Swapon nie powiodło się: Niepoprawny argument w systemie Linux z systemem plików Btrfs

16

Co jest nie tak z tą sekwencją operacji, działającą w systemie Debian Squeeze z systemem plików 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

Mój system plików to:

$ 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
źródło
malat, ponownie otworzyłem twoje pytanie i dodałem twoją odpowiedź jak poniżej. Możesz opublikować swoją odpowiedź, usunę moją.
Sathyajith Bhat
Powiązane: Jak utworzyć plik wymiany na ext4 .
kenorb

Odpowiedzi:

16

Ten raport o błędach prowadzi do tej dyskusji

Dlatego „Nieprawidłowy argument” należy rozumieć jako „Twój system plików nie obsługuje pliku wymiany”

jak pisał przez Malát

Sathya
źródło
6
Dobry chwyt! System btrfsplików nie może obsługiwać plików wymiany, ponieważ przenosi dane pliku, a kod wymiany systemu Linux pobiera mapowanie pliku wymiany tylko raz. Gdyby było to dozwolone, nastąpiłaby katastrofa - losowe dane pliku, które korzystały z bloków, które kiedyś użył plik wymiany, zostałyby uszkodzone.
David Schwartz
1
nowsza strona podręcznika swapon dokumentuje nową sztuczkę „Jednym z możliwych obejść jest zamapowanie pliku na urządzenie sprzężenia zwrotnego”. Jeszcze tego nie próbowałem.
Poniedziałek
8

Mam mniej niż 50 reputacji, więc nie mogę komentować. Ale muszę zaktualizować istniejące odpowiedzi. W jądrze Linuksa 5.0.0, btrfs natywnie obsługuje teraz plik wymiany. (Musisz ustawić jako no-COW)

Oto kilka informacji z kernel.org: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

Z jądra 5.0+ btrfs mają natywną obsługę plików wymiany, ale z pewnymi ograniczeniami. Plik wymiany - musi być w pełni przydzielony jako NOCOW bez kompresji na jednym urządzeniu.

Ten link pokazuje, jak to zrobić: https://wiki.archlinux.org/index.php/swap#Swap_file .

NIE WYPRÓBUJ GO W LINUX <4.21 !!!

Ostrzeżenie: Btrfs w jądrze Linuksa przed wersją 5.0 nie obsługuje plików wymiany. Niezastosowanie się do tego ostrzeżenia może spowodować uszkodzenie systemu plików. Chociaż plik wymiany może być używany na Btrfs po zamontowaniu przez urządzenie pętli, spowoduje to poważnie obniżoną wydajność wymiany.

recolic
źródło
1
Czy mógłbyś podać odpowiednią sekcję w swoim linku?
Burgi
@Burgi Zredagowałem swoją odpowiedź i teraz jest lepiej!
recolic
2

Jeśli mimo wszystko chcesz zamienić plik, po prostu użyj btrfs-swapon

Sebastian Wagner
źródło
Doszedłem do tego samego rozwiązania, ale mam obawy co do poprawności takiego podejścia. Dawny. z pętlą dev mogę trzaskać wokół otworów utworzonych za pomocą truncate -s 4G swapfile_holes.img. To jest powodem, dla którego swaponsprawdza się coś, że plik wymiany powinien spełniać pewne wymagania dotyczące rozsądnej wydajności.
tylko
1
Jeszcze chwilę temu postanowiłem unikać losetupmapowania. Mój system utknął po rozpoczęciu korzystania z wymiany losetupna btrfs (z wcześniej przydzielonym plikiem). Może to w jakiś sposób zakłóca bufory i pamięci podręczne. Tj. System chce zwolnić pamięć i coś wymienia, ale powoduje to zwiększenie pamięci podręcznej dla tego samego rozmiaru. Chociaż nie jestem pewien, unikałbym tego.
tylko
0

Aktualizacja kwiecień 2019 : Zobacz odpowiedź recolic, która twierdzi, że Btrfs zaczął obsługiwać swap od jądra Linuksa w wersji 5.0.0.

Oryginalna odpowiedź:

Odpowiedź Sathya wydaje się zawierać martwe linki.

Znalazłem to w FAQ Btrfs:

Czy btrfs obsługuje pliki wymiany?

Obecnie nie. Po prostu utworzenie pliku NOCOW nie pomaga, obsługa zamiany plików zależy od jednej funkcji, której btrfs celowo nie implementuje z powodu potencjalnych uszkodzeń. Implementacja wymiany wykorzystywana była w oparciu o pewne założenia, które mogą nie zawierać się w btrfs, takie jak numery bloków w pliku wymiany, podczas gdy btrfs ma inne odwzorowanie numerów bloków w przypadku wielu urządzeń. Istnieje nowy interfejs API, którego można użyć do przeniesienia wymiany na btrfs; Aby uzyskać więcej informacji, zapoznaj się z pomysłami na projekty # Obsługa plików wymiany.

Obejściem, choć słabej wydajności, jest zamontowanie pliku wymiany za pomocą urządzenia pętli.

Źródło: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

mpb
źródło
FAQ mówi również, że wymiana na Btrfs jest obsługiwana od jądra Linuksa 5.0
phuclv
@phuclv: Tak, postęp!
mpb
-2

Invalid argumentmówi, że coś jest nie tak z argumentami swaponpolecenia.

Przede wszystkim czytaj man swapon.

Spróbować sudo swapon swapfile2. W moim przypadku to działa.

Paul Brit
źródło
5
Czy sądzisz, że mógłbym znaleźć flagi -v i -f bez czytania strony podręcznika?
Poniedziałek