2019 年のステータス
Btrfs と Linux カーネルの開発により、私の最初の回答は時代遅れになりました .この他の回答をご覧ください。
2016 年の元の回答
btrfs FAQ から:
btrfs はスワップ ファイルをサポートしていますか?現在のところサポートしていません。ファイルを NOCOW にするだけでは役に立ちません。スワップ ファイルのサポートは、潜在的な破損のために btrfs が意図的に実装しない 1 つの機能に依存しています。 (...) 回避策としては、パフォーマンスは劣りますが、ループ デバイスを介してスワップ ファイルをマウントすることです。
そのため、btrfs パーティションにスワップファイルを作成する良い方法はまだありません。
前述のように、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
の後に作成されたすべてのファイル ディレクトリに nocow 属性が含まれます)。
注意: 前述のとおり、これにはカーネル バージョン 5.0 以降が必要です。たとえば、Raspberry Pi は 4.19.* カーネルを使用するため、この手法を使用することはできません。
コミットで確認できるように、カーネル バージョン 5.0 にスワップ ファイルのサポートが追加されました。ファイルが btrfs にある場合、ファイルは 1 つのデバイスで圧縮なしで NOCOW として完全に割り当てられる必要があります。