やるきなし

2021/01/13 21:27 / brtfs 上に swap ファイルを置く

btrfs 上の file を swap file として利用しようとすると,以下のように kernel に怒られる.

[1646778.804931] BTRFS warning (device nvme0n1): swapfile must not be copy-on-write

これを回避するには以下のようにして copy-on-write (CoW) の機能を off にしたファイルを作成して swapon する(要 Linux 5.0以降).

% sudo touch swap
% sudo lsattr swap
-------------------- swap
% sudo chattr +C swap
% sudo lsattr swap
---------------C---- swap
% sudo fallocate -l 2g swap
% sudo chmod 600 swap
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=(snip)
% sudo swapon swap

touch してから fallocate する必要があるので注意.See man chattr.

A file with the ‘C’ attribute set will not be subject to copy-on-write updates. This flag is only supported on file systems which perform copy-on-write. (Note: For btrfs, the ‘C’ flag should be set on new or empty files. If it is set on a file which already has data blocks, it is undefined when the blocks assigned to the file will be fully stable. If the ‘C’ flag is set on a directory, it will have no effect on the directory, but new files created in that directory will have the No_COW attribute set.)

Related articles