Помилка заміни: Недійсний аргумент у системі Linux з файловою системою Btrfs


16

Що не так у цій послідовності операцій, що працює в системі Debian Squeeze з файловою системою 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

Моя файлова система:

$ 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

Цей звіт про помилку призводить до цього обговорення

Отже, "Недійсний аргумент" слід читати як "Ваша файлова система не підтримує файл swap"

а відповідав на Малатья


6
Приємний улов! btrfsФайлова система не підтримує файли підкачки , оскільки він переміщує файл даних навколо і код підкачки Linux займає лише відображення файл підкачки в один раз. Катастрофа може статися, якщо це дозволено - дані випадкових файлів, які використовували блоки, які файл swap колись використаний, будуть пошкоджені.
Девід Шварц

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 підтримується нативні файли swap, але з деякими обмеженнями. Файл підкачки - повинен бути повністю розподілений як NOCOW без компресії на одному пристрої.

Це посилання показує, як це зробити: https://wiki.archlinux.org/index.php/swap#Swap_file .

НЕ Спробуйте його в LINUX <4,21 !!!

Попередження: Btrfs в ядрі Linux до версії 5.0 не підтримує файли підкачки. Нехтування цим попередженням може призвести до пошкодження файлової системи. Хоча файл swap може використовуватися на Btrfs, коли він встановлюється через циклічний пристрій, це призведе до сильної погіршення продуктивності підкачки.


1
Чи можете ви процитувати відповідний розділ у вашому посиланні?
Burgi

@Burgi Я відредагував свою відповідь, і зараз краще!
спогад

2

Якщо ви хочете все-таки поміняти файл на файл, просто використовуйте btrfs-swapon


Я прийшов до того ж рішення, але я маю занепокоєння щодо правильності такого підходу. Вих. з циклічним розробником, з яким я справляюсь, перевіряють отвори, створені за допомогою truncate -s 4G swapfile_holes.img. Тобто причина, чому swaponперевірка на щось є, полягає в тому, що swapfile повинен відповідати деяким вимогам для розумної продуктивності.
оні

1
І лише мить тому я вирішив уникати використання losetupкарти. Моя система застрягла після початку використання swap через losetupbtrfs (з попередньо виділеним файлом). Можливо, це якось заважає буферам і кешам. Тобто система хоче звільнити пам'ять і щось замінити, але це призводить до збільшення кешу на той же розмір. Хоча я не впевнений, я би цього уникав.
оні

0

Оновлення квітня 2019 року : дивіться відповідь recolic, в якій стверджується, що Btrfs почав підтримувати своп у версії ядра Linux версії 5.0.0.

Оригінальна відповідь:

Здається, відповідь Саті містить мертві посилання.

Я знайшов це в FAQ Btrfs:

Чи підтримує btrfs файли swap?

В даний час немає. Просто створення файлу NOCOW не допомагає, підтримка swap-файлів покладається на одну функцію, яку btrfs навмисно не реалізує через потенційні пошкодження. Реалізація swap використовується для покладання на деякі припущення, які можуть не містити btrfs, наприклад, номери блоків у файлі swap, тоді як btrfs має різне відображення номерів блоків у випадку декількох пристроїв. Існує новий API, який може використовуватися для порту swap на btrfs; для детальної інформації ознайомтеся з ідеями проекту # Підтримка файлів Swap.

Обхідне рішення, хоч і з низькою продуктивністю, полягає в монтажі файлу swap через циклічний пристрій.

Джерело: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F


FAQ також говорить, що своп на Btrfs підтримується з ядра Linux 5.0
phuclv

@phuclv: Так, прогрес!
MPB

-2

Invalid argumentговорить, що щось не так у аргументах для swaponкоманди.

Перш за все, прочитайте man swapon.

Спробуйте sudo swapon swapfile2. У моєму випадку це працює.


5
Ви думаєте, можливо, я міг би знайти прапор -v та -f, не прочитавши сторінку man?
malat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.