確認環境
PC | Thinkpad X1 Carbon 2nd Gen |
OS | FreeBSD 12.1-RELEASE-p5 |
課題
こちらの記事で/tmp
ディレクトリ配下のファイルを自動で削除する方法を調べた。
しかし、そもそも/tmp
をRAMに割り当ててしまえば、シャットダウン時に勝手にファイルは消える。
ついでに高速化にもストレージの延命にもつながって、お得ではなかろうか。
ということで、やってみよう。
対策
RAMに割り当てるには、デバイスにtmpfs
を指定すればいいっぽい。
ざっくりやることは下になる。
- 現在の/tmpのマウント設定確認 (
df -h
) - tmpfsの有効化 (
/boot/loader.conf
oroptions TMPFS
) - tmpfsを/tmpにマウント (
/etc/fstab
) - ZFSのマウント設定 (
zfs set mountpoint=/tmp.old /zroot/tmp
)
1. 現在の/tmpのマウント設定確認
下のコマンドで現在の/tmp
のマウント設定を確認してみよう。
例では、/zroot/tmp
が/tmp
にマウントされていることが分かる。
% df -h /tmp Filesystem Size Used Avail Capacity Mounted on zroot/tmp 188G 144K 188G 0% /tmp
2. tmpfsの有効化
GENERICカーネルならtmpfs
は有効になっているはず。
念のため、下のようにtmpfs
をロードして有効になっているか確認しよう。
「既に読み込んでいるよ」という旨のメッセージが出れば問題ない。
$ sudo kldload tmpfs kldload: can't load tmpfs: module already loaded or in kernel
何もメッセージが出なかった場合は、/boot/loader.conf
に以下の追記が必要。
tmpfs_load="YES"
もしくは、カーネルビルド時にoptions TMPFS
を設定してビルドする。
3. tmpfsを/tmpにマウント
お試し
以下のコマンドで、一時的にtmpfs
を/tmp
にマウントできる。
/tmp
を使うソフトは挙動がおかしくなるので注意。
$ mount -t tmpfs tmpfs /tmp $ df -h /tmp Filesystem Size Used Avail Capacity Mounted on tmpfs 8.8G 4.0K 8.8G 0% /tmp
僕のシステムでは自動だとサイズは8.8Gになった。
PCのメモリサイズは8Gのはずなのだけれども。。
永続化
/etc/fstab
に以下の行を追加しよう。
size
の値は各自環境に合わせて変更してね。
tmpfs /tmp tmpfs rw,mode=1777,size=4.0G 0 0
僕はメモリサイズの半分で十分だと思ったので4.0G
にした。これでもかなり大きい。
ただ、tmpfs
は動的にメモリを確保・解放するっぽい。
フルで使うことはないと思うので、PCのメモリサイズを指定しておけばいいのかも。
PC再起動後、下のようにtmpfs
がマウントされていれば問題ない。
$ df -h /tmp Filesystem Size Used Avail Capacity Mounted on tmpfs 4.0G 4.0K 4.0G 0% /tmp
ZFSを使っていると、下のように元々のデバイス(下の例ではzroot/tmp
)が/tmp
にマウントされているかもしれない。
$ df -h /tmp Filesystem Size Used Avail Capacity Mounted on zroot/tmp 188G 144K 188G 0% /tmp
きっと下のように/tmp
が2箇所でマウントされていて、元々のデバイスが後からマウントされているはず。
その場合、次節のZFSの設定も必要。
$ df -h zroot/ROOT/default 202G 14G 188G 7% / devfs 1.0K 1.0K 0B 100% /dev tmpfs 4.0G 4.0K 4.0G 0% /tmp zroot 188G 88K 188G 0% /zroot zroot/var/log 188G 1.2M 188G 0% /var/log zroot/usr/home 197G 8.7G 188G 4% /usr/home zroot/tmp 188G 144K 188G 0% /tmp zroot/var/crash 188G 88K 188G 0% /var/crash zroot/var/audit 188G 88K 188G 0% /var/audit zroot/var/tmp 188G 88K 188G 0% /var/tmp zroot/var/mail 188G 112K 188G 0% /var/mail zroot/usr/src 189G 711M 188G 0% /usr/src zroot/usr/ports 190G 1.3G 188G 1% /usr/ports
4. ZFSのマウント設定
下のコマンドで、元々のデバイスを別のディレクトリに割り当てよう。
ディレクトリ(/tmp.old
)とデバイス名(zroot/tmp
)は各自の環境に合わせて変更してね。
$ sudo umount -f /tmp $ sudo zfs set mountpoint=/tmp.old zroot/tmp $ zfs list zroot/tmp NAME USED AVAIL REFER MOUNTPOINT zroot/tmp 144K 188G 144K /tmp.org
/tmp
を一度アンマウントしているのは、zfs set
でビジーエラーが出たときの力技。
無事に設定が終わったら、再起動後にtmpfs
が/tmp
に自動でマウントされていることを確認しよう。
$ df -h /tmp Filesystem Size Used Avail Capacity Mounted on tmpfs 4.0G 4.0K 4.0G 0% /tmp
さいごに
Windowsと違ってRAM化がウルトラ楽ですな。
もし/tmp
以外にもRAMに割り当てたいパスがある場合、同じような感じで設定すればOK。
シャットダウン時に消えて問題ないものは、どんどんRAM化して良いかと。
今回の設定前後でパフォーマンスを測っていないので、どれくらい高速化できているかは分からない。
HDDだったらもっと体感で分かるんだろうけど。
ただ、/tmp
を頻繁に使うツールは自作のシェルスクリプトを含めてたくさんある。
きっとストレージには優しくなったと思う。
以上。