Не может использовать Файл подкачки на ZFS: Файлы с дырами

Я пытаюсь добавить новое swapfile увеличить Область подкачки следующим это учебное руководство.

swapfile создает успешно, но, swapon команда не примет его: говорит "пропуск - это, кажется, имеет дыры"..

Я выполняю Xubuntu 19.10 с ZFS на корне.

Вот то, что я попробовал до сих пор:

Создайте своп-файл

Используя fallocate - неудавшийся

sudo fallocate -l 8G /swapfile
fallocate: fallocate failed: Operation not supported

Это кажется fallocate, в настоящее время не поддерживает ZFS.

Альтернативный путь - Используя dd - успех

sudo dd if=/dev/zero of=/swapfile bs=1MiB count=$((8*1024))
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 2.68284 s, 3.2 GB/s

Подготовьте Файл подкачки - успех

sudo chmod 600 /swapfile
ls -lah /swapfile 
-rw------- 1 root root 8.0G Dec 27 14:15 /swapfile

sudo mkswap /swapfile
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=db8aa64c-734c-4eba-a803-72db681ec1a1

Включите Файл подкачки - отказавший

sudo swapon /swapfile
swapon: /swapfile: skipping - it appears to have holes.

Из swapon руководства:

Файлы с дырами

Реализация файла подкачки в ядре ожидает мочь записать в файл непосредственно без помощи файловой системы. Это - проблема на файлах с дырами или на файлах копии на записи в файловых системах как Btrfs.

Команды как CP (1) или усеченный (1) создают файлы с дырами. Эти файлы будут отклонены swapon.

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

Самое портативное решение создать файл подкачки состоит в том, чтобы использовать dd (1) и/dev/zero.

Как я могу создать своп-файл на ZFS который swapon команда приняла бы?

Информация о системе:

sudo parted -l

Model: WDC PC SN520 SDAPNUW-512G-1002 (nvme)
Disk /dev/nvme0n1: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system     Name                  Flags
 1      1049kB  538MB   537MB   fat32           EFI System Partition  boot, esp
 2      538MB   590MB   52.4MB  ext4
 3      590MB   2738MB  2147MB  linux-swap(v1)
 4      2738MB  4885MB  2147MB  zfs
 5      4885MB  512GB   507GB   zfs
sudo zpool list -v

NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
bpool        1.88G   131M  1.75G        -         -     0%     6%  1.00x    ONLINE  -
  nvme0n1p4  1.88G   131M  1.75G        -         -     0%  6.82%      -  ONLINE  
rpool         472G   112G   360G        -         -     9%    23%  1.00x    ONLINE  -
  nvme0n1p5   472G   112G   360G        -         -     9%  23.8%      -  ONLINE
sudo zfs list

# https://pastebin.ubuntu.com/p/6jDVwbhfCT/
sudo lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 19.10
Release:    19.10
Codename:   eoan
sudo uname -a

Linux iCyberRoze 5.3.0-24-generic #26-Ubuntu SMP Thu Nov 14 01:33:18 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
1
задан 27 December 2019 в 14:36

2 ответа

Учебник, на который вы ссылаетесь, не предполагает, что вашей корневой файловой системой является ZFS. Справочная страница ZFS указывает:

Тома ZFS как устройства подкачки

Тома ZFS можно использовать в качестве устройств подкачки. После создания тома с помощью команды zfs create -V настройте и включите область подкачки с помощью команд mkswap(8) и swapon(8). Не переключайтесь на файл в файловой системе ZFS. Конфигурация файла подкачки ZFS не поддерживается.

Вы можете следовать инструкциям в другом ответе от stratus, чтобы заставить пространство подкачки работать из zvol, которое можно использовать в качестве пространства подкачки, являющегося частью вашего пула ZFS.

Однако, если вы действительно хотите следовать рекомендациям по использованию файла подкачки , хранящегося в файловой системе ZFS:

fallocate не работает в файловых системах ZFS, как вы уже знаете из Ошибка zfsonlinux github, которую вы уже опубликовали.Вместо использования dd, который будет работать медленнее, поскольку он должен записывать каждую часть выходного файла, вы можете быстро создать большой разреженный файл, который можно создать в файловой системе ZFS, попробуйте truncate, которая делает то же самое, но работает на ZFS.

sudo truncate -s 8G /swapfile
sudo chmod 600 /swapfile
sudo swapon /swapfile

По-прежнему показывает: swapon: /swapfile: пропускает — похоже, там есть дыры.

ls -lsh /swapfile

Отчеты 512 -rw------- 1 root root 8.0G Jan 17 18:27 /swapfile показывают, что созданный файл занимает всего 512 байт вместо 8 ГБ.

Ваши настройки сжатия для файловой системы ZFS, которая будет содержать этот файл, скорее всего, приведут к тому, что вывод dd в любом случае будет разреженным (занимает гораздо меньше места на диске, чем заявленный размер файла).

sudo dd if=/dev/zero of=/swapfile bs=1M count=8k status=progress
ls -lsh /swapfile

Отчеты 512 -rw-rw-r-- 1 root root 8.0G 17 января 18:39 /swapfile показывают, что настройки сжатия файловой системы ZFS сделали полный файл размером 8 ГБ размером 512 байт.

Вместо использования сильно сжимаемого ввода в dd из /dev/zero вы можете использовать несжимаемый /dev/urandom так, чтобы он фактически занял до 8 ГБ места на жестком диске. Однако, судя по моим тестам, swapon по-прежнему отклоняет его:

sudo dd if=/dev/urandom of=/swapfile bs=1M count=8k status=progress
sudo chmod 600 /swapfile
sudo swapon /swapfile

Он по-прежнему показывает: swapon: /swapfile: пропускает — похоже, в нем есть дыры.

Еще один эксперимент может состоять в том, чтобы попробовать это в файловой системе ZFS с отключенным сжатием.

sudo zfs create rpool/swap -o compression=off -o mountpoint=/swap/
sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=8k status=progress

И на этот раз он действительно записывает все 0 на диск.

ls -lsh /swap/swapfile

Это возвращает 8.0G -rw-r--r-- 1 root root 8.0G 17 янв. 18:52 /swap/swapfile

sudo chmod 600 /swap/swapfile
sudo swapon /swap/swapfile

По-прежнему показывает: swapon: /swapfile: пропуск — похоже, что в нем есть дыры.

Мой вывод состоит в том, что я не могу сказать, есть ли способ обойти его отказ использовать файл, расположенный в файловой системе ZFS, в качестве файла подкачки.

Вне рамок этого вопроса альтернативой использованию пространства подкачки в этой системе может быть раздел подкачки (который, как я вижу, у вас уже есть раздел подкачки 590 МБ или помещение файла подкачки на файловая система, отличная от ZFS, например, в разделе ext4, или если на диске нет места, используйте Zswap (сжатые блоки ОЗУ, используемые в качестве пространства подкачки) или vramfs (пространство подкачки, которое находится на оперативной памяти вашей видеокарты).

4
ответ дан 18 January 2020 в 01:13

Я думаю, что Вы хотите, на самом деле хорошо документируется на страница

ZFSOnlinux TLDR;

# To set swap on a zfs drive:
zfs create -V 8G -b $(getconf PAGESIZE) -o logbias=throughput -o sync=always -o primarycache=metadata -o com.sun:auto-snapshot=false VMs/swap

mkswap -f /dev/zvol/VMs/swap
swapon /dev/zvol/VMs/swap

# IN FSTAB
/dev/zvol/VMs/swap none swap discard 0 0
2
ответ дан 28 December 2019 в 12:44

Другие вопросы по тегам:

Похожие вопросы: