Solarisマシンにおける/tmpのファイルシステム:UNIX処方箋
現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、Solarisがテンポラリ領域として使用する/tmpについて、ファイルシステムの違いがあることを解説していきます。
複数のSolarisマシンを管理しており、再起動の際に/tmp以下のファイルが削除されないマシンがあるのに気づきました。通常は/tmp以下のファイルは再起動時に削除されると思うのですが、なぜ消えないマシンがあるのでしょうか? 違いを教えてください。
Solarisの再起動時に/tmp以下のファイルが削除される場合と削除されない場合がある理由は、/tmpのファイルシステムの違いに由来します。/tmpがtmpfsファイルシステムの場合は再起動時にファイルが削除され、/tmpがUFSファイルシステムの場合は再起動を行ってもファイルはそのまま残ります。
UFSとtmpfs
UFSはSolaris標準のディスクベースファイルシステムです。HDDを使用してデータを保存する場合、UFSでファイルシステムを作成しています。(当然ですが)Solarisの再起動を行ったり、マシンの電源を停止してもファイルは保存され残っています。
tmpfsは、物理メモリを使用するファイルシステムであり、UFSに比べて非常に高速にデータを読み書きできます。しかし、物理メモリを使用するため、Solarisを再起動したり、アンマウントしたりするとファイルは削除されます。このほかHDDにスワップパーティーションを設定しますが、これもtmpfsとして使用されます。物理メモリがすべて使用され、書き込みできなくなったデータを一時的に退避(スワップアウト)する領域として利用されます。
/tmpのファイルシステム
/tmpはSolarisがテンポラリ領域として使用するディレクトリで、Solarisが動作する上で作成される一時的なファイルが生成されます。一時的なファイルなので保存する必要がなく、かつ高速にアクセスできると効率が良いので、tmpfsが使用されるのが一般的です。
ところが、/tmpは必ずtmpfsである必要はなく、UFSとしてもマウントできます。/tmpをUFSとしてマウントするとディスクにデータを書き込んで保存するのとまったく同じ動作となります。そのため、UFSとしてマウントした/tmpは再起動してもファイルは削除されずに残ります。/tmpがtmpfsとUFSのどちらになっているのかは、mountコマンドやdfコマンドで確認できます(実行例1A、1B)。
# mount /tmp on swap read/write/setuid/dev=2 on (水) 9月 21 09:18:19 2005 # df -k swap 3332624 16 3332608 1% /tmp
# mount /tmp on /dev/dsk/c0t0d0s3 read/write/setuid/intr/largefiles/ onerror=panic/dev=800003 on (水) 9月 21 10:34:29 2005 # df -k /dev/dsk/c0t0d0s3 492287 635 442424 1% /tmp
/tmpのファイルシステムが決定されるタイミング
/tmpのファイルシステムは、ほとんどOSインストール時のパーティーション設定によって決められます。OSがすでにインストールされている状態でも変更できますが、通常そういった状態にあるディスクのパーティーション変更は行いません。パーティーション変更によって内部データが消失する恐れがあるからです。
OSインストール時にディスクパーティーションの設定項目があり、そこで/tmpを明示的に指定した場合、/tmpはUFSとしてマウントされます(リスト1)。/tmpは指定せず、スワップパーティーションを設定した場合、/tmpはtmpfsとしてマウントされます(リスト2)。
/tmpとswapの両方が指定された場合
パーティーション設定の違いによって、/tmpがtmpfsとUFSのどちらでマウントされるか説明しました。では、リスト3のように、/tmpとスワップパーティーションを同時に設定した場合はどうなるのでしょうか。
リスト3の場合、/tmpはUFSとしてマウントされ、スワップパーティーションはどこにもマウントされません。マウントされないスワップパーティーションは未使用の状態になります。インストール完了後の/etc/vfstabは以下のようになります。
fd - /dev/fd fd - no - /proc - /proc proc - no - /dev/dsk/c0t0d0s1 - - swap - no - /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no - /dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /tmp ufs 2 yes -
この状態では未使用のままとなってしまうので、OSインストール完了後、以下のように/etc/vfstab内でスワップパーティーションをtmpfsとしてマウントするように設定します。再起動するとスワップパーティーションを使用できるようになります。
fd - /dev/fd fd - no - /proc - /proc proc - no - /dev/dsk/c0t0d0s1 - - swap - no - /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no - /dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /tmp ufs 2 yes - swap - /tmp1 tmpfs - yes -
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Solaris 9におけるCDの自動マウント
- Basic認証を用いたアクセス制御
- quotaコマンドでファイルシステムの容量制限を行う
- 電源投入時にdiagが実行される設定の解除(ALOMの設定)
- mdbコマンドでSCSIのTagged Command Queueing設定を確認
- tarアーカイブ内から、特定キーワードを含むファイルを指定してリストアする
- /etc/systemファイルの編集に失敗してマシンが起動しない場合の対処法
- Perlを用いた自動FTP転送
- iノード数の変更方法
- Solaris 8以前と9以降のログローテーション設定の違い
- HTTPSサーバを構築する
- SolarisからIPv6ルーターのようにRAを配信する
- Solstice Backup 7.1によるディスクバックアップ
- シェルスクリプトによる特定ファイルのバックアップ
- 9個以上のディスクスライス作成
- bashが起動時に実行するファイル
- acctcomコマンドによる終了ステータスの確認
- 電源制御キーの役割と無効化
- 「load average」によるCPU負荷の確認
- FTP利用でのファイル/ディレクトリの属性変更
- UFS loggingによるエラーと復旧方法
- ALOMにおけるSC用ユーザーの確認とパスワード変更
- PostgreSQLのテーブルデータをファイルへコピーする方法
- sotrussやapptraceによる実行コマンドのトレース
- TCP遅延肯定応答タイマーのタイムアウト値の変更
- 複数のマシンで効率的にシャットダウンする方法
- WWW::MechanizeモジュールによるWebアクセスの自動化
- IPv6アドレスの自動生成による不具合解消法
- キャッシュファイルを利用したNFSマウント
