tmpfs

提供: ArchWiki
2015年2月16日 (月) 12:17時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「{{Lowercase title}} Category:ファイルシステム en:tmpfs tmpfs はメモリやスワップパーティションに存在する一時フ...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

tmpfs はメモリやスワップパーティションに存在する一時ファイルシステムです。ディレクトリを tmpfs としてマウントすることでファイルへのアクセスを高速化させたり、再起動時に自動的に中身が消去されるようにすることができます。

ノート: systemd を使っている場合、tmpfiles.d を使って tmpfs ディレクトリの一時ファイルを起動時に再作成することができます。

使用方法

Some directories where tmpfs is commonly used are /tmp, /var/lock and /var/run. Do not use it on /var/tmp, because that folder is meant for temporary files that are preserved across reboots.

glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for POSIX shared memory. Mounting tmpfs at /dev/shm is handled automatically by systemd, so manual configuration in fstab is no longer necessary.

Arch uses a tmpfs /run directory, with /var/run and /var/lock simply existing as symlinks for compatibility. It is also used for /tmp by the default systemd setup and does not require an entry in fstab unless a specific configuration is needed.

Generally, I/O intensive tasks and programs that run frequent read/write operations can benefit from using a tmpfs folder. Some applications can even receive a substantial gain by offloading some (or all) of their data onto the shared memory. For example, relocating the Firefox profile into RAM shows a significant improvement in performance.

サンプル

By default, a tmpfs partition has its maximum size set to half your total RAM, but this can be customized. Note that the actual memory/swap consumption depends on how much you fill it up, as tmpfs partitions do not consume any memory until it is actually needed.

To explicitly set a maximum size, in this example to override the default /tmp mount, use the size mount option:

/etc/fstab
tmpfs   /tmp         tmpfs   nodev,nosuid,size=2G          0  0

Here is a more advanced example showing how to add tmpfs mounts for users. This is useful for websites, mysql tmp files, ~/.vim/, and more. It's important to try and get the ideal mount options for what you are trying to accomplish. The goal is to have as secure settings as possible to prevent abuse. Limiting the size, and specifying uid and gid + mode is very secure. For more information on this subject, follow the links listed in the #See also section.

/etc/fstab
tmpfs   /www/cache    tmpfs  rw,size=1G,nr_inodes=5k,noexec,nodev,nosuid,uid=648,gid=648,mode=1700   0  0

See the mount command man page for more information. One useful mount option in the man page is the default option. At least understand that.

Reboot for the changes to take effect. Note that although it may be tempting to simply run mount -a to make the changes effective immediately, this will make any files currently residing in these directories inaccessible (this is especially problematic for running programs with lockfiles, for example). However, if all of them are empty, it should be safe to run mount -a instead of rebooting (or mount them individually).

After applying changes, you may want to verify that they took effect by looking at /proc/mounts and using findmnt:

$ findmnt --target /tmp
TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw,nosuid,nodev,relatime

The tmpfs can also be temporarily resized without the need to reboot, for example when a large compile job needs to run soon. In this case, you can run:

# mount -o remount,size=4G,noatime /tmp

Ramdisk

To create a directory whose files are actually stored in RAM, we may adapt the tmpfs example:

/etc/fstab
tmpfs   /home/archie/Ramdisk         tmpfs   nodev,nosuid,size=2G          0  0

自動マウントの無効化

systemd 下では、/etc/fstab にエントリを記述してなくても /tmp は自動的に tmpfs としてマウントされます。

自動マウントを無効にするには、次を実行:

# systemctl mask tmp.mount

ファイルは tmpfs ではなく、ブロックデバイスに保存されるようになります。/tmp の中身は再起動しても消去されないようになるので、問題が起こる可能性があります。前の挙動に戻して再起動で /tmp フォルダが自動的に消去されるようにするには、以下の tmpfiles.d(5) を使ってください:

/etc/tmpfiles.d/tmp.conf
# see tmpfiles.d(5)
# always enable /tmp folder cleaning
D! /tmp 1777 root root 0

# remove files in /var/tmp older than 10 days
D /var/tmp 1777 root root 10d

# namespace mountpoints (PrivateTmp=yes) are excluded from removal
x /tmp/systemd-private-*
x /var/tmp/systemd-private-*
X /tmp/systemd-private-*/tmp
X /var/tmp/systemd-private-*/tmp

トラブルシューティング

root で tmpfs のシンボリックリンクを開けない

Considering /tmp is using tmpfs, change the current directory to /tmp, then create a file and create a symlink to that file in the same /tmp directory. If you try to open the file you created via the symlink, you will get a permission denied error. This is expected as /tmp has the sticky bit set.

この挙動は /proc/sys/fs/protected_symlinks や sysctl で変更できます: sysctl -w fs.protected_symlinks=0。設定を永続化させる方法は Sysctl#設定 を見て下さい。

警告: Changing this behaviour can lead to security issues! Disable it only if you know what you are doing.

参照