組み込み系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 に最初に表示されました。