Swaponが失敗しました:Btrfsファイルシステムを使用するLinuxシステムでの無効な引数


16

Btrfsファイルシステムを備えたDebian Squeezeシステムで実行されているこの一連の操作の何が問題になっていますか?

$ dd if=/dev/zero of=swapfile2 bs=1024 count=524288
$ sudo mkswap swapfile2
$ sudo chown root:root swapfile2
$ sudo chmod 0600 swapfile2  
$ sudo swapon -v -f swapfile2
swapon on swapfile2
swapon: /home/mathieu/swapfile2: found swap signature: version 1, page-size 4, same byte order
swapon: /home/mathieu/swapfile2: pagesize=4096, swapsize=536870912, devsize=536870912
swapon: swapfile2: swapon failed: Invalid argument

私のファイルシステムは:

$ mount
/dev/mapper/voxbox-root on / type btrfs (rw)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/mapper/voxbox-boot on /boot type ext2 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)

malat、私はあなたの質問を再開し、以下のようにあなたの答えを追加しました。あなたの答えを投稿してください、私は私のものを削除します。
サティアジスバート

回答:


16

このバグレポートこの議論につながります

したがって、「無効な引数」は「あなたのファイルシステムはスワップファイルをサポートしていません」と読む必要があります

計上によりmalat


6
ナイスキャッチ!btrfsそれは周りのファイルデータを移動し、Linuxのスワップコードは一度だけスワップファイルのマッピングがかかるため、ファイルシステムは、スワップファイルをサポートすることはできません。これが許可されている場合、大惨事が発生します-一度使用されたスワップファイルが破損するブロックを使用したランダムファイルデータ。
デビッドシュワルツ

1
新しいswaponのマニュアルページには、「ファイルをループバックデバイスにマップすることで回避できる可能性があります」という新しいトリックが記載されています。まだ試していません。
マラト

8

私の評判は50未満なので、コメントできません。ただし、既存の回答を更新する必要があります。Linuxカーネル5.0.0では、btrfsがネイティブにスワップファイルをサポートするようになりました。(COWなしとして設定する必要があります)

kernel.orgからの情報は次のとおりです。https : //btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

カーネル5.0以降では、btrfsにはネイティブスワップファイルがサポートされていますが、いくつかの制限があります。スワップファイル-1つのデバイスで圧縮せずにNOCOWとして完全に割り当てる必要があります。

このリンクにそれを行う方法を示した: https://wiki.archlinux.org/index.php/swap#Swap_file

LINUX <4.21で試さないでください!!!

警告:バージョン5.0より前のLinuxカーネルのBtrfsは、スワップファイルをサポートしていません。この警告に従わないと、ファイルシステムが破損する可能性があります。ループデバイスを介してマウントされると、Btrfsでスワップファイルが使用される場合がありますが、これによりスワップパフォーマンスが大幅に低下します。


1
リンクの関連セクションを引用してもらえますか?
ブルギ

@Burgi私は自分の答えを編集しましたが、今はもっと良いです!
回収

2

とにかくファイルをスワップしたい場合は、btrfs-swaponを使用してください


私は同じ解決策を見つけましたが、そのようなアプローチの正確性に懸念があります。例 ループ開発では、で作成されたホールチェックを回避できtruncate -s 4G swapfile_holes.imgます。すなわち、swapon何かをチェックする理由は、swapfileが合理的なパフォーマンスのためのいくつかの要件を満たす必要があるためです。
15年

1
そしてほんの少し前に、losetupマッピングの使用を避けることにしました。losetup(事前に割り当てられたファイルを使用して)btrfsでスワップスルーを使用し始めた後、システムが停止しました。たぶんそれはバッファとキャッシュに何らかの形で干渉します。つまり、システムはメモリを解放し、何かをスワップアウトしたいのですが、これにより同じサイズのキャッシュが増加します。よくわかりませんが、それは避けたいです。
15年

0

2019年4月の更新:recolicの回答をご覧ください。Btrfs はLinuxカーネルバージョン5.0.0からスワップのサポートを開始したと主張しています。

元の回答:

サティアの答えには、死んだリンクが含まれているようです。

私はこれをBtrfs FAQで見つけました:

btrfsはスワップファイルをサポートしていますか?

現在はありません。ファイルをNOCOWにするだけでは役に立ちません。スワップファイルのサポートは、破損の可能性があるためにbtrfsが意図的に実装しない1つの関数に依存しています。スワップの実装は、スワップファイル内のブロック番号のように、btrfsには当てはまらないいくつかの仮定に依存していましたが、btrfsには複数のデバイスの場合に異なるブロック番号マッピングがあります。スワップをbtrfsに移植するために使用できる新しいAPIがあります。詳細については、プロジェクトのアイデア#スワップファイルのサポートをご覧ください。

パフォーマンスは低下しますが、回避策はループデバイスを介してスワップファイルをマウントすることです。

ソース:https : //btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F


FAQでは、BtrfsのスワップはLinuxカーネル5.0以降でサポートされていると述べています
-phuclv

@phuclv:やった、進歩!
mpb

-2

Invalid argumentswaponコマンドの引数に問題があると言います。

まず、読んでくださいman swapon

試してくださいsudo swapon swapfile2。私の場合、それは動作します。


5
おそらく、manページを読まずに-vおよび-fフラグを見つけることができると思いますか?
マラト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.