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. アップグレード成功の確認
アップグレードプロセスの実行後に、アップグレードが予想通りに機能したかを確認することが重要になります。
以下のシンボリックリンクが存在するかを確認します。
-
/bin
は/usr/bin
へのシンボリックリンクです。 -
/sbin
は/usr/sbin
へのシンボリックリンクです。 -
/lib
は/usr/lib
へのシンボリックリンクです。 -
/lib64
は/usr/lib64
へのシンボリックリンクです。 -
/var/run
は/run
へのシンボリックリンクです。 /var/lock
は/run/lock
へのシンボリックリンクです。上記のディレクトリーが想定どおりにシンボリックリンクである場合、さらに 2 つのチェックが必要になります。
-
以下の find コマンドの出力をチェックします。
# find /usr/{lib,lib64,bin,sbin} -name '.usrmove'
このコマンドにより表示されるファイルもしくはディレクトリーは、同じ名前のものがすでに
/usr
にあるため、/usr
にコピーすることはできません。この命名に関する競合は、手動で解決する必要があります。保管しておきたいファイルについて、以下のディレクトリーをチェックします。
-
/var/run.runmove~
-
/var/lock.lockmove~
-
上記のディレクトリーがいずれもシンボリックリンクではない場合は、「失敗したアップグレードからのリカバリー」 に示されるリカバリープロセスを実行する必要があります。
2.3.1.3. 失敗したアップグレードからのリカバリー
アップグレードプロセスが失敗する理由はいくつもあります。以下のコマンドの出力をチェックして、失敗した原因を確認してください。
# dmesg # journalctl -ab --full
エラーが見つからない場合は、以下をチェックします。
-
/
が書き込み可能か -
/usr
が書き込み可能か -
/
に十分なスペースがあるか -
/usr
に十分なスペースがあるか -
/var
が rhelup ツールにマウントされているか
さらにヘルプが必要な場合は、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
にある設定例を参照してください。