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 パーティションには /bin/sbin/lib、および/lib64 のコピー用に十分なスペースがあることを確認してください。。
/usr が別個のパーティションでない場合、//bin/sbin/lib、および /lib64 のフォールバックコピー用の十分なスペースがあることを確認してください。
/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
準備完了後にアップグレード手順を実行する際の指示に関しては、『Red Hat Enterprise Linux 7 インストールガイド』 を参照してください。

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 が正常にマウントされているか
  • / に十分なスペースがあるか
  • /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 に格納されたファイルは、永続的ではなくなり、再起動後に保持されません。つまり、アプリケーションはインストール時ではなく起動時に独自のファイルとディレクトリーを再作成する必要があります (/etc/app_name ディレクトリーが理想的)。
起動時にファイルとディレクトリーを再作成する方法については、tmpfiles.d の man ページである man tmpfiles.d を参照してください。設定例については、/etc/tmpfiles.d にある設定例を参照してください。