Solarisマシンにおける/tmpのファイルシステムUNIX処方箋

現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、Solarisがテンポラリ領域として使用する/tmpについて、ファイルシステムの違いがあることを解説していきます。

» 2008年09月30日 04時00分 公開
[ITmedia]

複数の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

実行例1A /tmpがtmpfsの場合

# 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

実行例1B /tmpがUFSの場合

/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 -

インストール完了後の/etc/vfstabの設定

 この状態では未使用のままとなってしまうので、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  -

スワップパーティションをtmpfsとして、/tmp1にマウントするように設定した例

関連キーワード

UNIX処方箋 | Solaris | ファイルシステム | UNIX


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ