もっと詳しく

組み込み系Linuxシステムでよく見かける tmpfs は、一時ファイルの格納先のファイルシステムとして広く採用されていて、 Raspberry Pi のシステムでもVolumioなどでよく見掛けます。今回は tmpfs が一時ファイルの格納先に使われていないシステムへの導入方法をまとめました。

OpenWRTに使われるtmpfsの例

GL-iNet GL-AR750Sポータブルルータで稼働するOpenWRTなど、組み込み系ではよくtmpfsが効果的に採用されています。

BusyBox v1.28.3 () built-in shell (ash)
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 18.06.1, r7258-5eb055306f
 -----------------------------------------------------
# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                12.5M     12.5M         0 100% /rom
tmpfs                    60.7M      2.0M     58.8M   3% /tmp
/dev/ubi0_1              98.4M     23.6M     70.1M  25% /overlay
overlayfs:/overlay       98.4M     23.6M     70.1M  25% /
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/sda1               928.9M     69.5M    811.4M   8% /mnt/sda1
# ls -ld /tmp
drwxrwxrwt   23 root     root           640 Dec  1 14:42 /tmp

今回はRaspbian Stretchの動くRaspberry Pi 3B+を例に進めますが、Raspberry Piのみならず広範囲なLinux系システムに於いても、普遍的に使えると思います。

 

tmpfs化する箇所の現状確認

Raspbian Stretchでtmpfsへ変更するのは次の2箇所、

  • /tmp
  • /var/tmp

システムによってはこれらは既にtmpfs化されていることが多いのですが、Raspbian Jessieの頃から使っているこのデバイスでは、未だtmpfsにはなっていませんでした。

$ df -hF tmpfs
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           486M     0  486M   0% /dev/shm
tmpfs           486M   50M  437M  11% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           486M     0  486M   0% /sys/fs/cgroup

SDカードへの負荷を抑えるならば、

/var/log

もtmpfs化したいところですが、起動の度にログが消えてしまうのはトラブルシューティング時に不安なので除外しました。

まずこれらのディレクトリの詳細を確認して、いずれもスティッキービット付(誰でも読み書き可能も、削除は所有者とrootのみ)であることを覚えておきます。

$ ls -ld /tmp /var/tmp
drwxrwxrwt 8 root root 4096 Dec  1 11:30 /tmp
drwxrwxrwt 2 root root 4096 Aug  9  2020 /var/tmp

 

fstabへ記述

得られた現在のパーミッション情報(1777)を元に、root権限で

/etc/fstab

へtmpfs化する2つのマウントポイントを以下のように追加します。

$ sudo nano /etc/fstab
tmpfs  /tmp           tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs  /var/tmp       tmpfs defaults,size=16m,noatime,mode=1777 0 0

 

手動マウントによる確認

これでシステムの起動時にtmpfsとしてマウントされるようになったので、再起動の前にまずは手動でマウントしてみます。

sudo rm -rf /tmp
sudo mkdir -m 1777 /tmp
sudo mount /tmp

sudo rm -rf /var/tmp
sudo mkdir -m 1777 /var/tmp
sudo mount /var/tmp

正常にtmpfsとしてマウントされました。

$ df -hF tmpfs
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           464M     0  464M   0% /dev/shm
tmpfs           464M  6.5M  457M   2% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           464M     0  464M   0% /sys/fs/cgroup
tmpfs            16M  2.6M   14M  17% /tmp
tmpfs            16M     0   16M   0% /var/tmp
tmpfs            93M     0   93M   0% /run/user/1000

$ mount | grep tmpfs
devtmpfs on /dev type devtmpfs (rw,relatime,size=469544k,nr_inodes=117386,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
tmpfs on /tmp type tmpfs (rw,noatime,size=16384k)
tmpfs on /var/tmp type tmpfs (rw,noatime,size=16384k)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=94828k,mode=700,uid=1000,gid=1000)

 

デバイスの再起動後も正しく自動マウントされ、利用されている様子を確認できました。

$ ls -la /tmp/ /var/tmp/
/tmp/:
drwxrwxrwt  8 root root     220 Dec  1 12:10 .
drwxr-xr-x 23 root root    4096 Nov 30 16:26 ..
drwxrwxrwt  2 root root      40 Nov 30 16:33 .font-unix
drwxrwxrwt  2 root root      40 Nov 30 16:33 .ICE-unix
-rw-r--r--  1 pi   pi       302 Dec  1 12:10 ssr_upload
drwxrwxrwt  2 root root      40 Nov 30 16:33 .Test-unix
-rw-------  1 root root 2707943 Nov 30 16:33 .unicode_cache_490a766a.dat
-rw-r--r--  1 pi   pi       164 Dec  1 08:02 vnstat_email
drwxr-xr-x  2 root root      40 Nov 30 16:34 .webmin
drwxrwxrwt  2 root root      40 Nov 30 16:33 .X11-unix
drwxrwxrwt  2 root root      40 Nov 30 16:33 .XIM-unix
/var/tmp/:
drwxrwxrwt  2 root root   40 Nov 30 16:33 .
drwxr-xr-x 12 root root 4096 Nov 30 16:30 ..

 

投稿 Raspberry Pi OSにtmpfsを活用しSDカードに優しいシステムをFun Scripting 2.0 に最初に表示されました。