Подкачка не подключается: swap-unit в состоянии failed
Подкачка в systemd тоже unit. Если он в состоянии failed, подкачка не подключена: обычно неверный UUID в fstab, отсутствующий файл или файл, созданный неподходящим способом.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Раздел или файл подкачки не найден
UUID сменился после переустановки, файл удалён при очистке диска. Запись в fstab осталась прежней.
-
Файл подкачки создан с дырами
Файл, созданный командой быстрого выделения, содержит дыры, и ядро отказывается использовать его как подкачку.
-
Права на файл подкачки слишком широкие
Ядро требует права 0600: иначе содержимое памяти оказалось бы доступно другим пользователям.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Что подключено фактически.
swapon --showСостояния unit подкачки.
systemctl list-units --type=swap --all --no-pagerСообщения ядра о подкачке.
journalctl -k -b --no-pager | grep -i swapРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- UUID сменился после переустановки, файл удалён при очистке диска. Запись в fstab осталась прежней.
- Как проверить
-
Посмотрите записи и фактическую подкачку.
swapon --show grep -i swap /etc/fstab lsblk -o NAME,FSTYPE,UUID | grep -i swap
- Как исправить
- Исправьте UUID или путь. Для файла подкачки проверьте, что он существует и имеет права 0600.
- Почему происходит
- Файл, созданный командой быстрого выделения, содержит дыры, и ядро отказывается использовать его как подкачку.
- Как проверить
-
Посмотрите сообщение ядра.
journalctl -k -b --no-pager | grep -i swap | tail -5
- Как исправить
-
Создайте файл сплошной записью или средствами, гарантирующими выделение блоков, затем разметьте и подключите.
sudo fallocate -l 2G /swapfile || sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
- Почему происходит
- Ядро требует права 0600: иначе содержимое памяти оказалось бы доступно другим пользователям.
- Как проверить
-
Посмотрите права.
ls -l /swapfile
- Как исправить
- Установите права 0600 и владельца root, затем подключите подкачку заново.
Пример вывода
Файл подкачки с широкими правами. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× swapfile.swap - /swapfile
Active: failed (Result: exit-code)
swapon[1100]: swapon: /swapfile: insecure permissions 0644, 0600 suggested.
swapon[1100]: swapon: /swapfile: swapon failed: Invalid argument
Связанные ошибки
- Mount process exited, code=exited, status=32: не найдено устройство Монтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
- Failed with result 'oom-kill' Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Cannot allocate memory в журнале службы Не удалось выделить память: предел службы, память машины, настройка overcommit, исчерпанные области отображения.
- Elasticsearch: служба падает из-за размера кучи JVM Размер кучи больше доступной памяти или больше предела службы: падение при старте или под нагрузкой.
- Hardware Error / EDAC: ошибки памяти в журнале Ядро сообщает об ошибках памяти. Что считать безобидным, а что поводом менять модуль.
- Java-служба: OutOfMemoryError и куча Служба на JVM падает с нехваткой памяти: размер кучи, предел контрольной группы, дампы кучи.
- MySQL убит из-за памяти: буферный пул больше доступной памяти MySQL падает сразу после старта или через минуты: размер innodb_buffer_pool_size превышает память машины.
Источники
-
systemd.swap(5)
Unit подкачки и их создание из fstab. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено файлом подкачки с правами 0644.