Linux swapon invalid argument

CentOS 7 — swapon failed: Invalid argument

в ответ выдается ошибка Недопустимый аргумент. Проблема кроется в fallocate, не выделяющего реального пространства, которое требуется для swapon.
Решение: с помощью DD выполнить задачу возложенную на fallocate и в остальном, процесс продолжится по предыдущему сценарию.
Вместо sudo fallocate -l 1G /my-swap-file выполнить:

 $ sudo dd if=/dev/zero of=/my-swap-file bs=1MiB count=1000 1000+0 записей получено 1000+0 записей отправлено скопировано 1048576000 байт (1,0 GB), 1,44063 с, 728 МВ/c 

Значимые здесь параметры dd
of: указывает файл или устройство назначения назначения.
bs: количество байт, которые будут записаны или прочитаны за раз.
count: Копирует только указанное число входных блоков.
т.е. в строке в файл /my-swap-file копируется 1000 блоков, по 1MiB размер каждого блока. В остальном, все действия остаются прежними:

 $ sudo chmod 600 /my-swap-file $ sudo mkswap /my-swap-file Setting up swapspace version 1, size = 1023996 KiB без метки, UUID=bb94e86e-c1d2-4b5a-8cc2-fdffd2078d7e $ sudo swapon /my-swap-file 

Что интересно, на одной из VPS с установленной CentOS 7, fallocate отработал без последующих проблем, на другой же, пришлось обратится к утилите DD. Также, по ссылке обсуждается вопрос swapon failed: Invalid argument и его решение. И также, в комментариях отмечается, что на разных машинах и дистрибутивах, неоднозначная ситуация.

Проблема с fallocate (1) заключается в том, что он использует ioctl файловой системы для быстрого и эффективного выделения ресурсов, недостатком является то, что он не выделяет пространство физически, а системный вызов swapon (2) требует реального пространства. Ссылка: https://bugzilla.redhat.com/show_bug.cgi?id=1129205

Поделиться ссылкой на статью

Источник

CentOS 7 – swapon failed: Invalid argument

CentOS 7 – swapon failed: Invalid argument

Заметки айтишника

в ответ выдается ошибка Недопустимый аргумент. Проблема кроется в fallocate, не выделяющего реального пространства, которое требуется для swapon.
Решение: с помощью DD выполнить задачу возложенную на fallocate и в остальном, процесс продолжится по предыдущему сценарию.
Вместо sudo fallocate -l 1G /my-swap-file выполнить:

$ sudo dd if=/dev/zero of=/my-swap-file bs=1MiB count=1000 1000+0 записей получено 1000+0 записей отправлено скопировано 1048576000 байт (1,0 GB), 1,44063 с, 728 МВ/c

Значимые здесь параметры dd
of: указывает файл или устройство назначения назначения.
bs: количество байт, которые будут записаны или прочитаны за раз.
count: Копирует только указанное число входных блоков.
т.е. в строке в файл /my-swap-file копируется 1000 блоков, по 1MiB размер каждого блока. В остальном, все действия остаются прежними:

$ sudo chmod 600 /my-swap-file $ sudo mkswap /my-swap-file Setting up swapspace version 1, size = 1023996 KiB без метки, UUID=bb94e86e-c1d2-4b5a-8cc2-fdffd2078d7e $ sudo swapon /my-swap-file

Что интересно, на одной из VPS с установленной CentOS 7, fallocate отработал без последующих проблем, на другой же, пришлось обратится к утилите DD. Также, по ссылке обсуждается вопрос swapon failed: Invalid argument и его решение. И также, в комментариях отмечается, что на разных машинах и дистрибутивах, неоднозначная ситуация.

Проблема с fallocate (1) заключается в том, что он использует ioctl файловой системы для быстрого и эффективного выделения ресурсов, недостатком является то, что он не выделяет пространство физически, а системный вызов swapon (2) требует реального пространства.

Источник

Читайте также:  How to install linux on window

Swapon failed: Invalid argument on a Linux system with Btrfs filesystem

What’s wrong with this sequence of operation, running on a Debian Squeeze system with a Btrfs filesystem?

$ 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, I’ve reopened your question & added your answer as below. Feel free to post your answer, I’ll delete mine.

After btrfs-convert an ext4 root partition to btrfs, I encountered same error when booting. I have swap file in that ext4 root partition.

7 Answers 7

This bug report leads to this discussion

So «Invalid argument» should be read as «Your filesystem do not support swap file»

Nice catch! The btrfs filesystem cannot support swap files because it moves file data around and the Linux swap code only takes the swap file’s mapping once. Catastrophe would occur if this is allowed — random file data that used blocks that the swap file once used would get corrupted.

newer swapon man page document a new trick «One possible workaround is to map the file to a loopback device». I have not tried it yet.

Читайте также:  Linux посмотреть какие видеокарты

In Linux kernel 5.0.0, btrfs natively supports swapfile now. (You must set it as no-COW)

From kernel 5.0+ btrfs have native swap files support, but with some limitations. Swap file — must be fully allocated as NOCOW with no compression on one device.

DO NOT TRY IT IN LINUX < 4.21 .

Warning: Btrfs on Linux kernel before version 5.0 does not support swap files. Failure to heed this warning may result in file system corruption. While a swap file may be used on Btrfs when mounted through a loop device, this will result in severely degraded swap performance.

I got the cryptic error now after an unclean shutdown. The only solution was to delete the old swapfile and recreate it.

As on btrfs, there are certain restrictions (e.g. copy-on-write has to be disabled), I recommend to follow the steps on the Arch Wiki (I copied the steps to create a 512M swap, but please read their documentation before executing):

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

Now swapon /swapfile should succeed.

If not, ensure that the Kernel is at least 5.0, as is earlier Kernels swapfiles are not supported in btrfs (source: btrfs FAQ):

From kernel 5.0+ btrfs have native swap files support, but with some limitations. Swap file — must be fully allocated as NOCOW with no compression on one device.

For kernels before 5.0, swap files are not supported. Just making a file NOCOW does not help, swap file support relies on one function that btrfs intentionally does not implement due to potential corruptions. The swap implementation used to rely on some assumptions which may not hold in btrfs, like block numbers in the swap file while btrfs has a different block number mapping in case of multiple devices. There is a new API that could be used to port swap to btrfs; for more details have a look at project ideas#Swap file support.

Источник

Читайте также:  Чем открыть dmp linux

Swapon failed: Invalid argument on a Linux system with Btrfs filesystem

From kernel 5.0+ btrfs have native swap files support, but with some limitations. Swap file — must be fully allocated as NOCOW with no compression on one device.

DO NOT TRY IT IN LINUX < 4.21 .

Warning: Btrfs on Linux kernel before version 5.0 does not support swap files. Failure to heed this warning may result in file system corruption. While a swap file may be used on Btrfs when mounted through a loop device, this will result in severely degraded swap performance.

Solution 3

I got the cryptic error now after an unclean shutdown. The only solution was to delete the old swapfile and recreate it.

As on btrfs, there are certain restrictions (e.g. copy-on-write has to be disabled), I recommend to follow the steps on the Arch Wiki (I copied the steps to create a 512M swap, but please read their documentation before executing):

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

Now swapon /swapfile should succeed.

If not, ensure that the Kernel is at least 5.0, as is earlier Kernels swapfiles are not supported in btrfs (source: btrfs FAQ):

From kernel 5.0+ btrfs have native swap files support, but with some limitations. Swap file — must be fully allocated as NOCOW with no compression on one device.

For kernels before 5.0, swap files are not supported. Just making a file NOCOW does not help, swap file support relies on one function that btrfs intentionally does not implement due to potential corruptions. The swap implementation used to rely on some assumptions which may not hold in btrfs, like block numbers in the swap file while btrfs has a different block number mapping in case of multiple devices. There is a new API that could be used to port swap to btrfs; for more details have a look at project ideas#Swap file support.

Solution 4

If you want to swap on a file anyway, just use btrfs-swapon

Источник

Оцените статью
Adblock
detector