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. アップグレード成功の確認
アップグレードプロセスの実行後に、アップグレードが予想通りに機能したかを確認することが重要になります。
以下のシンボリックリンクが存在するかを確認します。
-
/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 にある設定例を参照してください。