web-dev-qa-db-ja.com

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

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)
16
malat

このバグレポートこのディスカッション につながります

したがって、「無効な引数」は「ファイルシステムはスワップファイルをサポートしていません」と読み替えてください。

as posted by malat

16
Sathyajith Bhat

評判が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でスワップファイルが使用されることがありますが、これによりスワップパフォーマンスが大幅に低下します。

9
recolic

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

2

2019年4月更新Btrfsがswapのサポートを開始したと主張するrecolicの回答をご覧ください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

0
mpb

私は不潔なシャットダウンの後で今不可解なエラーを受け取りました。唯一の解決策は、古いスワップファイルを削除して再作成することでした。

Btrfsと同様に、特定の制限があります(たとえば、コピーオンライトを無効にする必要があります)。 Arch Wiki の手順に従うことをお勧めします(512Mスワップを作成する手順をコピーしましたが、実行する前にドキュメントをお読みください):

# truncate -s 0 /swapfile
# chattr +C /swapfile
# btrfs property set /swapfile compression none
# fallocate -l 512M /swapfile
# chmod 600 /swapfile
# mkswap /swapfile

swapon /swapfileは成功するはずです。

そうでない場合は、カーネルが少なくとも5.0であることを確認してください。以前のカーネルスワップファイルはbtrfsでサポートされていません(ソース: btrfs FAQ ):

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

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

0
Philipp Claßen