スワップファイルの作成にfallocateは適していない

  • OS: Ubuntu 22.04

fallocateコマンドで以ってスワップファイルを度々作成している。ddコマンドよりも短時間で片が付くから重宝するのである。終ぞ特段の不都合にぶつかった試しがないけれども、どうやらこれは良くない気配である。

NOTES

Files with holes

The swap file implementation in the kernel expects to be able to write to the file directly, without the assistance of the filesystem. This is a problem on files with holes or on copy-on-write files on filesystems like Btrfs.

Commands like cp(1) or truncate(1) create files with holes. These files will be rejected by swapon.

Preallocated files created by fallocate(1) may be interpreted as files with holes too depending of the filesystem. Preallocated swap files are supported on XFS since Linux 4.18.

The most portable solution to create a swap file is to use dd(1) and /dev/zero.

$ man 8 swapon

スワップファイルはファイルシステムの助けを借りずに書き込める想定で実装されているという。ところがfallocateで作成されたスパースファイルの取り扱いはファイルシステムの出番となるからスワップファイルに適さない。という意味であろうとおもう。結局はddが良いということであった。

ddを用いて2GBのスワップファイルを作成するならこういう具合である。

$ sudo dd if=/dev/zero of=/swapfile2gb bs=128K count=16384 status=progress
$ sudo chmod 600 /swapfile2gb
$ sudo mkswap /swapfile2gb
スワップ空間バージョン 1 を設定します。サイズ = 2 GiB (2147479552 バイト)
ラベルはありません, UUID=962db686-3bf1-41e2-99f1-f90e214e0806

$ sudo swapon /swapfile2gb
$ cat /proc/swaps 
Filename              Type        Size            Used        Priority
/swapfile2gb          file        2097148         0           -3

翻意してスワップ領域としての役割を取り消す場合はswapoffコマンドを走らせる。

$ sudo swapoff /swapfile2gb

OS再起動後も引き続きスワップを有効にするなら/etc/fstabに設定を投じておく。

$ sudo vi /etc/fstab 
/swapfile2gb   none    swap    sw    0    0

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください