Swapon gagal: Argumen tidak valid pada sistem Linux dengan sistem file Btrfs

16

Apa yang salah dengan urutan operasi ini, berjalan pada sistem Debian Squeeze dengan sistem file Btrfs?

$ 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

Sistem file saya adalah:

$ 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
sumber
malat, saya telah membuka kembali pertanyaan Anda & menambahkan jawaban Anda seperti di bawah ini. Jangan ragu untuk mengirim jawaban Anda, saya akan menghapus jawaban saya.
Sathyajith Bhat
Terkait: Cara membuat file swap di ext4 .
kenorb

Jawaban:

16

Laporan bug ini mengarah ke diskusi ini

Jadi "Argumen tidak valid" harus dibaca sebagai "Sistem file Anda tidak mendukung file swap"

seperti yang diposting oleh malat

Sathya
sumber
6
Tangkapan bagus! Sistem btrfsfile tidak dapat mendukung file swap karena memindahkan data file sekitar dan kode swap Linux hanya mengambil pemetaan file swap sekali. Bencana akan terjadi jika ini dibolehkan - data file acak yang menggunakan blok yang dulu pernah ditukar file swap akan rusak.
David Schwartz
1
halaman manual swapon yang lebih baru mendokumentasikan trik baru "Salah satu solusi yang mungkin adalah memetakan file ke perangkat loopback". Saya belum mencobanya.
malat
8

Saya memiliki kurang dari 50 reputasi sehingga saya tidak bisa berkomentar. Tapi SAYA HARUS memperbarui jawaban yang ada. Di linux kernel 5.0.0, btrfs secara native mendukung swapfile sekarang. (Anda harus mengaturnya sebagai no-COW)

Berikut ini beberapa informasi dari kernel.org: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

Dari kernel 5.0+ btrfs memiliki dukungan file swap asli, tetapi dengan beberapa batasan. File swap - harus sepenuhnya dialokasikan sebagai NOCOW tanpa kompresi pada satu perangkat.

Tautan ini menunjukkan cara melakukannya: https://wiki.archlinux.org/index.php/swap#Swap_file .

JANGAN MENCOBANYA DI LINUX <4.21 !!!

Peringatan: Btrfs di kernel Linux sebelum versi 5.0 tidak mendukung file swap. Gagal mengindahkan peringatan ini dapat mengakibatkan korupsi sistem file. Sementara file swap dapat digunakan pada Btrfs ketika dipasang melalui perangkat loop, ini akan menghasilkan kinerja swap yang sangat terdegradasi.

recolic
sumber
1
Bisakah Anda mengutip bagian yang relevan di tautan Anda?
Burgi
@ Burgi Saya mengedit jawaban saya dan sekarang lebih baik!
recolic
2

Jika Anda ingin menukar file, cukup gunakan btrfs-swapon

Sebastian Wagner
sumber
Saya datang ke solusi yang sama, tetapi saya memiliki kekhawatiran tentang kebenaran pendekatan semacam itu. Ex. dengan loop dev saya dapat bekerja di sekitar lubang cek dibuat dengan truncate -s 4G swapfile_holes.img. Yaitu alasan mengapa swaponmemeriksa sesuatu adalah bahwa swapfile harus memenuhi beberapa persyaratan untuk kinerja yang wajar.
ony
1
Dan beberapa saat yang lalu saya memutuskan untuk tidak menggunakan losetuppemetaan. Sistem saya macet setelah mulai menggunakan swap melalui losetuppada btrfs (dengan file yang dialokasikan sebelumnya). Mungkin itu entah bagaimana mengganggu buffer dan cache. Yaitu sistem ingin membebaskan memori dan menukar sesuatu, tetapi ini menghasilkan peningkatan cache untuk ukuran yang sama. Meskipun saya tidak yakin, saya akan menghindarinya.
ony
0

Pembaruan April 2019 : Silakan lihat jawaban recolic, yang mengklaim bahwa Btrfs mulai mendukung swap pada kernel Linux versi 5.0.0.

Jawaban asli:

Jawaban Sathya tampaknya berisi tautan mati.

Saya menemukan ini di FAQ Btrf:

Apakah btrfs mendukung file swap?

Saat ini tidak. Hanya membuat file NOCOW tidak membantu, menukar dukungan file bergantung pada satu fungsi yang btrfs sengaja tidak terapkan karena potensi korupsi. Implementasi swap digunakan untuk mengandalkan beberapa asumsi yang mungkin tidak berlaku di btrfs, seperti nomor blok dalam file swap sementara btrfs memiliki pemetaan nomor blok yang berbeda untuk beberapa perangkat. Ada API baru yang dapat digunakan untuk port swap ke btrfs; untuk lebih jelasnya lihat ide proyek # Dukungan file swap.

Solusi, meskipun dengan kinerja buruk, adalah memasang file swap melalui perangkat loop.

Sumber: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

mpb
sumber
FAQ juga mengatakan bahwa swap pada Btrfs didukung sejak kernel Linux 5.0
phuclv
@ phuclv: Yay, kemajuan!
mpb
-2

Invalid argumentmengatakan bahwa ada yang salah dalam argumen untuk swaponperintah.

Pertama-tama, baca man swapon.

Coba sudo swapon swapfile2. Dalam kasus saya ini berfungsi.

Paul Brit
sumber
5
Apakah Anda mungkin berpikir, saya dapat menemukan flag -v dan -f tanpa membaca halaman manual?
malat