Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.3. ファイルシステムレイアウト

Red Hat Enterprise Linux 7 では、ファイルシステムのレイアウトに、大きな変更が 2 つ加えられています。

  • ディレクトリー /bin/sbin/lib、および /lib64 は、/usr 下に移動しています。
  • /tmp ディレクトリーは、一時ファイルストレージシステム (tmpfs) として使うことができるようになりました。
  • /run ディレクトリーは、一時ファイルストレージシステム (tmpfs) として使用されるようになりました。アプリケーションは、/var/run を使用するのと同じように、/run を使用できるようになりました。

2.3.1. root ファイルシステムの新レイアウト

従来は、最低限必要なコンテンツのみを /bin および /lib ディレクトリー配下に置くことで、ブートプロセスが遅くなることを回避してきました。ユーティリティーのなかには、/usr パーティションをマウントするために、root (/) レベルに置かれる必要があるものもありました。これにより、他のユーティリティーが、複数レベルのディレクトリーにコンテンツを広げてしまうという状況になりました。たとえば、/bin/usr/bin の両方にといったようにです。

Red Hat Enterprise Linux 7 では、/bin/sbin/lib、および /lib64 のディレクトリーが、/usr に移動しています。/usr ファイルシステムは、ユーティリティーではなく initramfs により root レベルのディレクトリーにマウントできるので、パッケージコンテンツを 2 つの異なるディレクトリーレベルに分ける必要はなくなりました。このため規模が非常に小さい root ファイルシステムが可能となり、システムがディスク領域の共有をより効率的に行い、メンテナーンスが容易になると同時に柔軟性と安全性が高まりました。

この変更の影響を受けないように、以前の /bin ディレクトリーは /usr/bin へのシンボリックリンクに、そして /sbin/usr/sbin へのシンボリックリンクに変更になりました。

2.3.1.1. ファイルシステムのアップグレード準備

警告

/usr が別のパーティションにある場合はインプレースアップグレードができません。別のパーティションからの /usr の移動は、お客様の責任のもとで行ってください。

/var が別のパーティションにある場合は、手動で /var/run/var/lock をシンボリックリンクに変換する必要があります。

# mv -f /var/run /var/run.runmove~
# ln -sfn ../run /var/run
# mv -f /var/lock /var/lock.lockmove~
# ln -sfn ../run/lock /var/lock
重要

パーティション設定スキームに関する preupgrade-assistant の結果にすべて対応してください。

準備が完了したら、インストールガイドを参照して、アップグレードプロセスの実行に関する詳細を確認してください。

2.3.1.2. アップグレード成功の確認

アップグレードプロセスの実行後に、アップグレードが予想通りに機能したかを確認することが重要になります。

  1. 以下のシンボリックリンクが存在するかを確認します。

    • /bin/usr/bin へのシンボリックリンクです。
    • /sbin/usr/sbin へのシンボリックリンクです。
    • /lib/usr/lib へのシンボリックリンクです。
    • /lib64/usr/lib64 へのシンボリックリンクです。
    • /var/run/run へのシンボリックリンクです。
    • /var/lock/run/lock へのシンボリックリンクです。

      上記のディレクトリーが想定どおりにシンボリックリンクである場合、さらに 2 つのチェックが必要になります。

  2. 以下の find コマンドの出力をチェックします。

    # find /usr/{lib,lib64,bin,sbin} -name '.usrmove'

    このコマンドにより表示されるファイルもしくはディレクトリーは、同じ名前のものがすでに /usr にあるため、/usr にコピーすることはできません。この命名に関する競合は、手動で解決する必要があります。

  3. 保管しておきたいファイルについて、以下のディレクトリーをチェックします。

    • /var/run.runmove~
    • /var/lock.lockmove~

上記のディレクトリーがいずれもシンボリックリンクではない場合は、「失敗したアップグレードからのリカバリー」 に示されるリカバリープロセスを実行する必要があります。

2.3.1.3. 失敗したアップグレードからのリカバリー

アップグレードプロセスが失敗する理由はいくつもあります。以下のコマンドの出力をチェックして、失敗した原因を確認してください。

# dmesg
# journalctl -ab --full

エラーが見つからない場合は、以下をチェックします。

  • / が書き込み可能か
  • /usr が書き込み可能か
  • / に十分なスペースがあるか
  • /usr に十分なスペースがあるか
  • /varrhelup ツールにマウントされているか

さらにヘルプが必要な場合は、Red Hat サポートにご連絡ください。

2.3.2. /tmp ディレクトリーへの移動

Red Hat Enterprise Linux 7 では、/tmp を一時ファイルストレージシステム (tmpfs) 用のマウントポイントとして使うことができます。

これを有効にすると、この一時的なストレージはマウントされたファイルシステムのように表示されますが、コンテンツの保管先は永続的なストレージデバイスではなく、揮発性メモリーになります。メモリーが不足している場合を除いて、/tmp 内のファイルがハードドライブに保管されることはありません。メモリーが不足している場合は、swap 領域が使用されます。つまり、/tmp のコンテンツは再起動すると持続しないことになります。

この機能を有効にするには、以下のコマンドを実行します。

# systemctl enable tmp.mount

この機能を無効にするには、以下のコマンドを実行します。

# systemctl disable tmp.mount

Red Hat では、Red Hat Enterprise Linux 7 で使用される様々なタイプの一時ストレージスペースに、以下のものを利用することを推奨しています。

  • デーモンなどの権限付きプロセスでは、/run/processname を使って一時データを保存。
  • 大量のデータを保存するプロセス、もしくは再起動後も存続する一時データを必要とするプロセスには、/var/tmp を使用。
  • その他のプロセスには、/tmp を使用して一時データを保存。

2.3.3. /run ディレクトリーへの移動

重要

Preupgrade Assistant は、初期リリースの Red Hat Enterprise Linux 7.0 でのこの変更の効果をチェックしませんでした。この問題は RHBA-2014:1627 で修正されました (https://rhn.redhat.com/errata/RHBA-2014-1627.html)。

Red Hat Enterprise Linux の前のバージョンでは、一部のプログラムで、起動初期に /var ディレクトリーをマウントする前に、実行時データを /dev ディレクトリーに格納できました。主な Linux ディストリビューションでは、/dev ディレクトリーはデバイスノードにのみ使用し、/run を代わりに使用することが推奨されています。

したがって、Red Hat Enterprise Linux 7 では、/run ディレクトリーは、/var/run ディレクトリーをバインドマウントする一時ファイルストレージシステム (tmpfs) です。同様に、/run/lock ディレクトリーは /var/lock ディレクトリーをバインドマウントするようになりました。/run/run/lock に格納されたファイルは、永続的ではなくなり、再起動後に保持されません。つまり、アプリケーションはインストール時に 1 回実行するのではなく、起動時に独自のファイルおよびディレクトリーを再作成する必要があります。これには、/etc/app_name ディレクトリーが適しています。

起動時にファイルとディレクトリーを再作成する方法については、tmpfiles.d の man ページである man tmpfiles.d を参照してください。設定例については、/etc/tmpfiles.d にある設定例を参照してください。