【FreeBSD】/tmpをRAMに割り当てたい(tmpfs)

確認環境

PC Thinkpad X1 Carbon 2nd Gen
OS FreeBSD 12.1-RELEASE-p5

課題

こちらの記事/tmpディレクトリ配下のファイルを自動で削除する方法を調べた。

しかし、そもそも/tmpをRAMに割り当ててしまえば、シャットダウン時に勝手にファイルは消える。
ついでに高速化にもストレージの延命にもつながって、お得ではなかろうか。

ということで、やってみよう。

対策

RAMに割り当てるには、デバイスにtmpfsを指定すればいいっぽい。

ざっくりやることは下になる。

  1. 現在の/tmpのマウント設定確認 (df -h)
  2. tmpfsの有効化 (/boot/loader.conf or options TMPFS)
  3. tmpfsを/tmpにマウント (/etc/fstab)
  4. 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を頻繁に使うツールは自作のシェルスクリプトを含めてたくさんある。
きっとストレージには優しくなったと思う。



以上。

参考

【FreeBSD】/tmpディレクトリ配下のファイルを自動で削除したい

確認環境

   
PC Thinkpad X1 Carbon 2nd Gen
OS FreeBSD 12.1-RELEASE-p5

課題

気付けば/tmpディレクトリに大量の一時ファイルが溜まっている。。

自動で削除して欲しい。。。

対策

/etc/rc.conf/etc/periodic.confの設定で自動で削除するようになる。

PC起動時に一括で削除することもできるし、一定期間アクセスがないファイルだけ削除することもできる。

一括で削除したい場合(/etc/rc.conf)

/etc/rc.confに以下を追記すると、PC起動時に一括でファイルを削除するようになる。

clear_tmp_enable="YES"

X11関連のファイル

X11関連のファイルの削除と再構築をしない場合は、以下を追記。

clear_tmp_X="NO"

と、manには書いているように見えるのだが、NOを指定しても全部削除されている。
そして、PC起動時はたしかに再構築をしてなさげ。(/tmpディレクトリは空になっていた)

ちなみに僕の環境では、YESを指定した場合、起動時に再構築されているのは以下のディレクトリっぽい。

$ ls -la /tmp/
total 2
drwxrwxrwt  2 root  wheel  2  6月 16 17:13 .font-unix/
drwxrwxrwt  2 root  wheel  2  6月 16 17:13 .ICE-unix/
drwxrwxrwt  2 root  wheel  2  6月 16 17:13 .X11-unix/
drwxrwxrwt  2 root  wheel  2  6月 16 17:13 .XIM-unix/

指定期間アクセスがないファイルだけ削除したい場合(/etc/periodic.conf)

/etc/periodic.confに以下を追記すれば、一定期間アクセスがないファイルだけを削除できる。
期間はdaily_clean_tmps_daysで調整してねと。

daily_clean_tmps_enable="YES"        # 自動削除を有効にするなら`YES`
daily_clean_tmps_days="30"            # 削除対象とする無アクセス日数を指定
daily_clean_tmps_ignore="$daily_clean_tmps_ignore *.vim myfile"   # 削除しないファイルを指定

ちなみに設定用の変数は、毎日/毎週/毎月という周期ごとに用意されているっぽい。
各変数のPrefix(上の例ではdailyの部分)を変えればいい。

Prefix 周期
daily 毎日
weekly 毎週
monthly 毎月

デフォルトの無視ファイル

デフォルト(/etc/default/periodic.conf)では以下が削除非対象になっている。

daily_clean_tmps_ignore=".X*-lock .X11-unix .ICE-unix .font-unix .XIM-unix"
daily_clean_tmps_ignore="$daily_clean_tmps_ignore quota.user quota.group .snap"
daily_clean_tmps_ignore="$daily_clean_tmps_ignore .sujournal"

clear_tmp_enableとの優先度

/etc/rc.confclear_tmp_enable="YES"を指定している場合、
/etc/periodic.confの設定より優先されて一括で削除してそう。

ただ、マニュアルにそんな記載を見つけたというわけではないので、何か別に設定が必要なだけかも。

削除するディレクトリの指定

/tmp以外に削除したいディレクトリがある場合、以下で指定できるっぽい。
区切りは/etc/periodic/daily/110.clean-tmpsを見た感じ空白文字(シェルスクリプトのIFS)。

daily_clean_tmps_dirs="/tmp"         # 削除対象のルートディレクトリを指定

さいごに

ここまで調べた後に、一括削除でいい場合は/tmpをRAMに割り当てればいいことに気付く。

なんてこった。


以上。

参考

Twitterを使いはじめて。SNSとの付き合い方。

SNSを眺めていると、日々あちこちで様々なバトルが繰り広げられている。

何かについて人と議論できるほどの情熱には感心するが、中にはただの誹謗中傷もある。

そんなものは無視すればいいのだが、優しい性格なのか反応する人もいる。

そこからいつの間にか当事者以外の人達も参加した、合戦もしくは集団リンチになっていく。

不毛で、悲痛で、悲惨だ。

「好き」と「嫌い」

僕が何より不思議なのは、自分が好きなものを肯定するために、別の比較対象を叩く行為だ。
例えば、好きなアーティストの良さを示すために、別のアーティストを比較して蔑む、みたいな。

よくわからない。

特に「好き」「嫌い」という感情が絡んで暴走する人が多いように見える。

自分が好きなものに対して、自分が好きであるということに対して、自信が持てないのだろうか。

ハッキリ言って、自分の感情の正しさなんて、他人に肯定してもらうことに意味はない。
逆に言えば、他人に否定されても関係ない。自分の感じ方が全てだ。

だから、無駄に他を蔑んで、好きであるもの、好きであることを正当化しようとする行為には意味がない。

好きなものは好きなのである。

そして、他人の「好き」「嫌い」に理屈をつけて否定することも無意味だと思う。

批判するとき、されたとき

自分が嫌いと感じたものを批判することがダメってことはない。

ただそれよりは、好きなものについて語る方が幸せな時間になると思う。
もしかすると、そうすることで自分が好きなものに興味を持ってくれる人が増えるかもしれない。
それはきっと、嫌いなものを批判するよりずっと生産的で有意義な行為ではないだろうか。

せめて批判するときは、自分がなぜ批判しようとしているのか、一度冷静になって考えたい。
そして、批判がただの否定にならないように注意したい。
実際、感情的になるとこの塩梅は難しい。

反対にもし自分が批判されたとき、考えたいのは批判者の立ち位置だ。
なぜこの人はこんな発言をするのだろうかと理由を考えるうちに、きっと冷静になれる。
冷静になって相手を理解しようとすれば、違う考えの人を受け入れる姿勢ができるのではないだろうか。

SNSでは違う考えの人を簡単に拒絶できるので、宗教団体的な閉ざされた輪が生まれやすい。
そこは敵が存在しない居心地の良い空間かもしれない。
しかし同時に、偏った考えに陥りやすい空間であることに注意しておくべきだと思う。
同じ考えの人達だけで集まると、自分が暴走したときに止めてくれる人がいないかもしれない。

可能であれば、幅広い考えを受け入れられるだけの多様性を持った空間に身を置いておきたい。

関わると危ない人達

ただ、SNSに限らず、下のような人達を相手をするときは注意しないといけない。

  1. 自分の考えしか認めずに、それを他人に強要してくる人達
  2. 罵詈雑言で攻撃してくる人達

1については、違う視点を提供してくれるのはありがたいが、他人に強要するのはやり過ぎだ。
他者を認めず、自分が絶対正しいという傲慢さは、攻撃性を助長する。
極左や極右と呼ばれる人達は、そんな多様性がない人達の典型だと思う。
参考になるところがあれば、お互いに取り入れていけばいいのだ。

2については、そもそも相手にするべきではない。
精神的に成熟していない人達を相手にすると、多くの労力と苦痛を伴うことになると思う。
僕らの長くも短い人生において、そこに費やすほどの時間は余っていないはずだ。

さいごに

一つ前の日記もそうだけれども、最近のニュースやTwitterなどを見て感じたことを書きはじめたら随分と長くなった。
自分で思ってた以上にモヤモヤしていたらしい。

僕はSNSで他人と言い争いなんてした憶えがない。
そもそも対面でもほとんどない。

ベースには「ひとはひと」という考え方が強くあるからだと思う。
それはもしかすると、あまり健全ではないのかもしれない。
ここで書いたことは、そんな考えを持った人間の絵空事なのかもしれない。

ただ、そんな考えを持った人間だからか、他人が変わることへの期待値が低い。
SNSの情報開示の敷居を下げれば、言葉の暴力はある程度減るかもしれない。
しかし、それでも完全になくなるとは思えない。
制御できない他人に期待するよりは、自分の受け取り方や接し方を変えることで防げる苦痛も多いのではないかと思う。

個人に対して誹謗中傷を繰り返しているのは、感情や炎上に反射的に反応している人達だ。
それはもはやただのボットではないだろうか。
ボットによる自動投稿を深刻に受け取る必要なんてないのだ。

例えどんな暴言を受けたとしても

「あらそうですか。」

と、一言で片付けられる距離感で、SNSとは付き合っていきたい。


おわり。