Могу ли я получить файл подкачки на btrfs?
Современные версии Ubuntu по умолчанию используют файл подкачки вместо раздела подкачки.
Перед ядром Linux 5.0 было невозможно разместить файл подкачки на
btrfs перегородка
btrfs файловая система может быть повреждена.
Теперь ядра поддерживают файлы подкачки на разделах btrfs. Могу ли я использовать файл подкачки в Ubuntu, установленном на
btrfs а какие возможные проблемы?
7 ответов
Можно использовать файл подкачки на
btrfs, но есть некоторые моменты, о которых необходимо позаботиться.
btrfsфайловая система не позволяет создавать снимки, если в подобоме есть рабочий файл подкачки. Это означает, что настоятельно рекомендуется разместить файл подкачки в отдельном подобтоме.
Предположим, что текущий своп уже отключен,
/ на
/dev/sda1 и Ubuntu установлен с
/ на
@ подобъём и
/home на
@home подобъём.
Mount
/dev/sda1к/mnt.sudo mount /dev/sda1 /mnt
Если ты бежишь
ls /mnt, ты увидишь
@,
@home и другие подтомы, которые могут там быть.
Создать новый
@swapподобъём.sudo btrfs sub create /mnt/@swapРазмонтировать
/dev/sda1из/mntsudo umount /mntСоздайте
/swapкаталог, в который мы планируем смонтировать@swapподобъём.sudo mkdir /swapУстановите
@swapсубобъем к/swap.sudo mount -o subvol=@swap /dev/sda1 /swapСоздайте файл подкачки.
sudo touch /swap/swapfileУстановите 600 разрешений на файл.
sudo chmod 600 /swap/swapfileОтключите COW для этого файла.
sudo chattr +C /swap/swapfileВ качестве примера установите размер файла подкачки 4G.
sudo fallocate /swap/swapfile -l4gОтформатируйте файл подкачки
sudo mkswap /swap/swapfileВключите файл подкачки.
sudo swapon /swap/swapfile
Теперь новый своп должен работать.
Вам также необходимо обновить
/etc/fstabчтобы смонтировать все это при загрузке. Добавьте туда две строчки:
UUID=XXXXXXXXXXXXXXX /swap btrfs subvol=@swap 0 0
/swap/swapfile none swap sw 0 0
В
UUID один из твоих
/dev/sda1.
Комментарии и предложения приветствуются.
Обратите внимание, что для современных систем/ноутбуков с твердотельными накопителями NVME у вас есть
/dev/nvme0n1p2вместо
/dev/sda1и вы должны игнорировать /dev/nvme0n1p1, потому что это ваш загрузочный диск efi, созданный вашей ОС при ее установке.
Кроме того, рекомендуется добавить два параметра монтирования «по умолчанию» и «без времени». По умолчанию автоматически загружаются параметры монтирования для диска (SSD, HDD). Noatime предотвратит запись файлов, если они только открыты:
UUID=XXXXXXXXXXXXXXX /swap btrfs defaults,noatime,subvol=@swap 0 0
/swap/swapfile none swap sw 0 0
Популярный ответ правильный, за исключением того, что вы не должны использовать fallocate(1) для выделения места для файла подкачки. Он может создавать «дыры» в файловой системе, которые несовместимы с использованием файла подкачки (для подкачки требуется 100% непрерывного пространства, поскольку файловая система не используется в пространстве подкачки). Вместо этого вы должны использовать 'dd if=/dev/zero...'. Смотрите ответ в этой теме: fallocate vs dd для файла подкачки?Справочные страницы mkswap(8) и swapon(8) явно не рекомендуют использовать fallocate(1) для создания экземпляра файла подкачки в файловой системе.
Начиная с версии 6.1, файл подкачки можно создать одной командой .
Я попытаюсь проверить последствия следующего (например, следует ли смонтировать файл подкачки btrfs в субтоме файла подкачки, чтобы снимки можно было выполнять на родительском томе?)
Примечание. Снимок не поддерживается для подтомов, содержащих файлы подкачки, поскольку выполняются следующие требования к снимку.
subvolume - cannot be snapshotted if it contains any active swapfiles
Используйте значение по умолчанию 8G, но если оно уже установлено, используйте то, что было установлено.
btr_swap_size=${btr_swap_size:=8G}
btrfs subvolume create SWAP
btrfs filesystem mkswapfile --size btr_swap_size /SWAP/swapfile
swapon /swapfile
мини-скрипт
btr_swap_size=${btr_swap_size:=8G}
btr_swap_subvolume=${btr_swap_subvolume:="/SWAP"}
btr_swap_file=${btr_swap_subvolume}/SWAP-"${btr_swap_size}".img
swapon -s|grep -q "$swapfile" /etc/fstab
if [ $? -ne 0 ]; then
# if not then create it
echo '$swapfile not found. Adding $swapfile.'
btrfs subvolume create ${btr_swap_subvolume}
btrfs filesystem mkswapfile --size "${btr_swap_size}" "${btr_swap_file}"
swapon "${btr_swap_file}"
echo '/$swapfile none swap defaults 0 0' >> /etc/fstab
else
echo '$swapfile found. No changes made.'
fi
Если ваш раздел зашифрован (LUKS), точка монтирования включена
/dev/mapperНапример:
/dev/mapper/nvme0n1p5_crypt /swap btrfs defaults,noatime,subvol=@swap 0 0
/swap/swapfile none swap sw 0 0 here
Чтобы получить
uuidsзапустить
blkidкоманда:
/dev/mapper/nvme0n1p5_crypt: UUID="06c8c73c-1cc4-477b-a687-6c21697d645d" UUID_SUB="7f884b26-d76e-49db-9959-311fa2a5dd20" TYPE="btrfs"
/dev/nvme0n1p1: UUID="8090a824-63fa-4087-a948-89cca1a369cd" TYPE="ext2" PARTUUID="887ff27b-01"
/dev/nvme0n1p5: UUID="46405308-2ed1-40f3-a86b-906f1118970b" TYPE="crypto_LUKS" PARTUUID="887ff27b-05"
А затем замените
mapperместо с конкретным
uuid
UUID=06c8c73c-1cc4-477b-a687-6c21697d645d /swap btrfs defaults,noatime,subvol=@swap 0 0
/swap/swapfile none swap sw 0 0
У вас может быть обмен на btrfs, если вы позаботитесь о том, что об этом говорится в документации btrfs:
filesystem - must be only single device
filesystem - must have only single data profile
swapfile - the containing subvolume cannot be snapshotted
swapfile - must be preallocated (i.e. no holes)
swapfile - must be NODATACOW (i.e. also NODATASUM, no compression)
Для получения дополнительной информации см. источник:
Лучший ответ для меня не получил. Я получал ошибку:
$ sudo swapon -v --show /swap/swapfile
swapon: /swap/swapfile: swapon не удалось: недопустимый аргумент
для меня рабочее решение было из https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#swapfile-support
# truncate -s 0 swapfile
# chattr +C swapfile
# fallocate -l 2G swapfile
# chmod 0600 swapfile
# mkswap swapfile
# swapon swapfile
/etc/fstab:
/swap/swapfile none swap sw 0 0