Btrfsを備えたSSDを持っているので、次のようなスワップファイルを作成してみました。
dd if=/dev/zero of=swapfile01 bs=1M count=10240
mkswap swapfile01
chmod 600 swapfile01
swapon swapfile01
Dmesgで
[238434.731654] swapon: swapfile has holes
おそらくディスクの断片化によっていくつかの穴が開いていると思いますが、これはSSDディスクであるため、問題ではないでしょうか?穴を無視する方法はありますか?またはどうすれば修正できますか?
トピック外-なぜこれが必要なのか(コメントの無関係な質問を回避するため):****でサイズを変更するのが面倒な暗号化ディスクを持っているので、スワップパーティションのサイズを変更する代わりにスワップファイルを作成することにしました(14GBを追加しました) RAMの4GBから16GBになり、現在休止状態にできません)。
BtrfsとLinuxカーネルの開発により、元の回答は廃止されました。 この他の答え をご覧ください。
btrfs FAQ から:
Btrfsはスワップファイルをサポートしていますか?現在はありません。 NOCOWファイルを作成するだけでは効果がありません。スワップファイルのサポートは、破損の可能性があるため、btrfsが意図的に実装していない1つの関数に依存しています。 (...)パフォーマンスは低いですが、回避策は、ループデバイスを介してスワップファイルをマウントすることです。
したがって、btrfsパーティションにスワップファイルを作成する良い方法はまだありません。
コミットで確認できるように、スワップファイルのサポートがカーネルバージョン5.0に追加されました https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id = ed46ff3d423780fa5173b38a844bf0fdb210a2a7 btrfsでスワップファイルをアクティブにするには、ファイルを1つのデバイスで圧縮せずにNOCOWとして完全に割り当てる必要があります。
上記のように、Linux 5.0以降 BTRFSにスワップファイルを作成できるようになりました。しかし、それらは非圧縮でNoCOWでなければなりません。実際にそのようなファイルを作成する方法は次のとおりです。
touch /swap
chattr
を使用してNoCOW
属性をそれに設定します:chattr +C /swap
C
属性が表示されていることを確認します:lsattr /swap
dd if=/dev/zero of=/swap bs=1M count=1024
#1ギガバイトmkswap /swap && chmod 600 /swap && swapon /swap
または、ディレクトリを作成し、chattr +C
をそのディレクトリに移動し、その下にスワップファイルを作成します。
chattr +C
既存の空でないファイルへ。これは未定義の動作であることが文書化されています(実際には属性を変更しません)。したがって、空のファイルを作成してからchattr
を作成するか、chattr
を使用してディレクトリを作成し、その中にファイルを作成する必要があります(この場合、chattr
ingディレクトリにはnocow属性があります)。
警告:前述のとおり、これにはバージョン5.0以降のカーネルが必要です。たとえばRaspberry Piは4.19。*カーネルを使用しているため、この手法を使用することはできません。
私は here を読みました。スワップにzramを使用することは可能です。まだ試していません。
お役に立てれば幸いです。チェリオ。
Btrfsでループバックを介してスワップをセットアップする方法は次のとおりです。
# dd if=/dev/zero of=/swapfile bs=1M count=1k
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.23138 s, 872 MB/s
# losetup --find --show /swapfile
/dev/loop0
# mkswap /dev/loop0
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=04b048e2-47ab-4ab0-a79e-7e1c481a10c9
# swapon /dev/loop0
これは理想ですか?いいえ。本番環境での使用は避けてください。しかし、それは一種の最後の手段として機能します。