Подробный гайд: Swap-файл в Linux и объём 18400030736. Часть 2: разделы 11-17
Начало статьи в Первой части
11. Настройка swappiness
Параметр vm.swappiness влияет на то, насколько активно ядро использует swap.
Посмотреть текущее значение:
cat /proc/sys/vm/swappiness
Обычно по умолчанию:
60
Для настольного компьютера или ноутбука часто используют:
10
Для серверов значения подбираются индивидуально. Слишком низкое значение может привести к нехватке памяти и OOM-killer.
Временно установить:
sudo sysctl vm.swappiness=10
Постоянно:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system
12. Приоритет нескольких swap-устройств
Если у вас несколько swap-разделов или файлов, можно задать приоритет.
Посмотреть текущие приоритеты:
swapon --show
Пример:
NAME TYPE SIZE USED PRIO
/swapfile file 17.1G 0B -2
/dev/sda2 part 8.0G 0B -3
Чем выше число, тем выше приоритет.
Временно:
sudo swapoff /swapfile
sudo swapon -p 100 /swapfile
Постоянно через /etc/fstab:
/swapfile none swap sw,pri=100 0 0
13. Особенности файловых систем
ext4
Обычно проблем нет. Можно использовать:
sudo fallocate -l 18400030736 /swapfile
или dd.
XFS
Обычно работает, но если fallocate даёт ошибку, используйте dd.
Btrfs
Для swap-файла на Btrfs есть особенности:
- файл не должен быть в снапшоте;
- лучше отключить COW для файла;
- желательно создавать через
dd, а неfallocate; - не должно быть сжатия данных для файла;
- гибернация может требовать отдельной аккуратной настройки.
Пример для Btrfs:
sudo touch /swapfile
sudo chattr +C /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=17548 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
chattr +C нужно выполнять до записи данных в файл.
ZFS
Swap-файлы на ZFS обычно не рекомендуются или не поддерживаются корректно. Для swap на ZFS лучше использовать ZVOL.
Пример:
sudo zfs create -V 18G pool/swap
sudo mkswap /dev/zvol/pool/swap
sudo swapon /dev/zvol/pool/swap
В /etc/fstab:
/dev/zvol/pool/swap none swap sw 0 0
NFS / сетевые ФС
Не используйте обычный файл на сетевой файловой системе как swap. Это может привести к нестабильности и проблемам с производительностью.
14. Гибернация и swap-файл
Если нужен не просто swap, а гибернация, одного файла может быть недостаточно.
Нужно настроить:
- Ядро.
initramfs.- Параметры загрузки.
resumeиresume_offset.- Достаточный размер swap.
Обычно параметры выглядят примерно так:
resume=UUID=uuid-файловой-системы
resume_offset=offset-файла
Для swap-раздела обычно достаточно:
resume=UUID=uuid-раздела
Для swap-файла нужен ещё resume_offset.
Посмотреть UUID файловой системы:
sudo findmnt -no UUID /
Для поиска resume_offset часто используют:
sudo filefrag -v /swapfile
Но конкретная настройка сильно зависит от дистрибутива:
- Ubuntu;
- Debian;
- Fedora;
- Arch Linux;
- RHEL/AlmaLinux/Rocky Linux.
Если гибернация критична, надёжнее использовать отдельный swap-раздел или LVM-том.
15. Частые ошибки
Ошибка: swapon failed: Invalid argument
Возможные причины:
- файл разрежённый;
- файл создан неправильно;
- файловая система не поддерживает такой swap;
- включено сжатие или COW, например на Btrfs;
- файл лежит на неподдерживаемой ФС.
Решение:
sudo swapoff /swapfile
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=17548 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Ошибка: insecure permissions
Решение:
sudo chmod 600 /swapfile
sudo chown root:root /swapfile
Ошибка: fallocate failed: Operation not supported
Используйте dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=17548 status=progress
Ошибка: swapon: /swapfile: already active
Файл уже используется как swap. Сначала отключите:
sudo swapoff /swapfile
Затем снова выполните:
sudo mkswap /swapfile
sudo swapon /swapfile
После перезагрузки swap не поднялся
Проверьте /etc/fstab:
cat /etc/fstab
Должна быть строка:
/swapfile none swap sw 0 0
Проверить без перезагрузки:
sudo swapoff -a
sudo swapon -a
swapon --show
16. Как удалить swap-файл
Отключить:
sudo swapoff /swapfile
Удалить файл:
sudo rm /swapfile
Удалить запись из /etc/fstab вручную:
sudo nano /etc/fstab
Найдите строку:
/swapfile none swap sw 0 0
и удалите её.
Проверить:
swapon --show
free -h
17. Итоговый практический сценарий
Если вам нужно создать своп-файл примерно на 18400030736 байт, то есть около 17.14 GiB, выполните:
sudo dd if=/dev/zero of=/swapfile bs=1M count=17548 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Проверка:
swapon --show
free -h
Сделать постоянным:
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Проверить применение:
sudo swapoff -a
sudo swapon -a
swapon --show
18. Краткая шпаргалка
# Проверить текущий swap
swapon --show
free -h
cat /proc/swaps
# Создать файл около 18400030736 bytes
sudo dd if=/dev/zero of=/swapfile bs=1M count=17548 status=progress
# Права
sudo chmod 600 /swapfile
# Разметить как swap
sudo mkswap /swapfile
# Включить
sudo swapon /swapfile
# Сделать постоянным
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# Проверить
swapon --show
free -h
# Отключить и удалить
sudo swapoff /swapfile
sudo rm /swapfile
Если нужно именно точное значение 18400030736, сначала уточните единицы: байты это или килобайты. Если это байты — используйте команды выше. Если это килобайты из free или /proc/swaps, тогда речь идёт уже о размере около 17.14 TiB, и такой объём нужно проверять отдельно.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.