Выберите продукт

Debian/Ubuntu: как исправить swapoff: Device or resource busy при отключении swap

Ошибка swapoff: Device or resource busy в Debian и Ubuntu обычно связана не с «битым» swap, а с нехваткой RAM, zram, автоподключением через systemd или старыми записями в /etc/fstab. Ниже — практичная диагностика и безопасный порядок отключения swap-файла или swap-раздела.
Debian/Ubuntu: как исправить swapoff: Device or resource busy при отключении swap

Ошибка swapoff: ... Device or resource busy в Debian и Ubuntu встречается регулярно, особенно когда нужно временно отключить swap, перенести swap-файл, убрать swap-раздел или проверить поведение системы без подкачки. На первый взгляд команда простая, но на практике почти всегда всплывают детали: устройство реально занято, в системе активен zram, осталась старая запись в /etc/fstab, либо swap снова поднимается автоматически.

Хорошая новость в том, что это обычно не признак повреждения системы. Плохая — отключать swap без предварительной проверки опасно: если памяти впритык, можно быстро получить давление на RAM, срабатывание OOM killer и падение сервисов.

Ниже разберём, как понять причину ошибки, что проверить перед отключением и как безопасно завершить миграцию или удаление swap в рабочей системе.

Если swap уже заметно занят, не начинайте с удаления файла или правки /etc/fstab. Сначала убедитесь, что система переживёт возврат страниц из swap обратно в RAM.

Что означает Device or resource busy при swapoff

Сообщение Device or resource busy означает, что указанный swap-объект сейчас нельзя отключить. Чаще всего это не «блокировка» в привычном файловом смысле, а ситуация, когда ядру некуда безопасно вернуть данные из подкачки.

Наиболее типичный сценарий — в swap уже лежат страницы памяти, а свободной RAM недостаточно. В этом случае swapoff пытается вернуть данные в оперативную память, но упирается в нехватку ресурсов.

Вторая частая причина — отключается не тот объект. Например, администратор выключает /swapfile, а активным остаётся другой swap-файл, отдельный раздел или /dev/zram0.

Третий сценарий — автоподключение. Вы выключаете swap вручную, а потом его снова включает systemd, пакет для zram или запись в /etc/fstab.

Отдельная история — VPS и контейнеры. В некоторых окружениях swap управляется не внутри гостевой ОС, а на стороне платформы. Если у вас сервер на VDS, поведение обычно предсказуемое, но в контейнерах ограничения встречаются заметно чаще.

С чего начать диагностику

Перед любыми изменениями нужно увидеть полную картину: какие swap-устройства активны, сколько swap реально используется, есть ли zram и не вернётся ли подкачка автоматически.

Посмотреть активные swap-источники

Базовая команда для начала диагностики:

swapon --show

Она показывает тип swap, путь или устройство, размер, объём использования и приоритет. Если записей несколько, отключать их нужно осознанно, а не по предположению.

Сразу после этого полезно посмотреть общую картину по памяти:

free -h

Если swap уже занят на сотни мегабайт или гигабайты, отключение может потребовать заметный запас RAM. В таких случаях полезно дополнительно почитать разбор про память, swap и zram на Linux-серверах.

Проверить записи в /etc/fstab

Следующий шаг — понять, не включается ли swap автоматически из конфигурации:

grep -n 'swap' /etc/fstab

Ищите старые UUID, дублирующиеся строки, одновременное наличие swap-файла и swap-раздела, а также записи, оставшиеся после миграции диска или шаблона VPS.

Убедиться, что дело не в zram

На современных Debian и Ubuntu zram встречается всё чаще. Он выглядит как swap-устройство, но работает в сжатой памяти, из-за чего диагностика может быть неочевидной.

swapon --show --bytes
lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS

Если в выводе есть /dev/zram0 или похожее устройство, учитывать нужно именно его. Иногда проблема не в swap-файле, а в сервисе, который поднимает zram при загрузке.

После базовой диагностики уже можно решать, нужен ли вам временный обходной сценарий, перенос swap или полное отключение. Главное — не переходить к удалению файлов, пока не проверены активные устройства и объём занятой подкачки.

FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

Почему swapoff не срабатывает: основные причины

Проверка активного swap и использования памяти в Linux

Не хватает оперативной памяти

Это самая распространённая причина. Если в swap уже выгружены страницы, ядру нужно вернуть их обратно в RAM. Когда свободной памяти недостаточно, swapoff завершается ошибкой или создаёт опасное давление на систему.

Особенно неприятно это проявляется на серверах с базами данных, PHP-FPM, Java-процессами, контейнерами и очередями воркеров. Команда может даже отработать, но спустя минуту система уйдёт в OOM.

Выключается не тот объект

Если активны несколько swap-источников, легко перепутать файл, раздел и устройство zram. Поэтому путь в команде всегда нужно сверять с фактическим выводом swapon --show.

Swap автоматически включается снова

Такое бывает из-за строк в /etc/fstab, systemd-юнитов или отдельного пакета для zram. Визуально это выглядит так, будто команда не сработала, хотя на самом деле swap был выключен и почти сразу активирован заново.

Гибернация и resume

На серверах это редкость, но на универсальных образах Debian и Ubuntu иногда остаются настройки resume. Тогда swap-раздел фигурирует не только как подкачка, но и как устройство для выхода из гибернации.

Ограничения контейнера или платформы

В контейнерах управление swap часто ограничено. На некоторых площадках изменить его внутри системы вообще нельзя. Если поведение выглядит странно, сначала уточните тип окружения: полноценная виртуальная машина, контейнер или managed-среда.

Безопасный порядок действий перед отключением swap

Чтобы не устроить себе аварийное окно, лучше действовать в понятной последовательности.

  1. Проверьте активные swap-объекты через swapon --show.
  2. Оцените запас памяти через free -h и при необходимости через vmstat 1 5.
  3. Посмотрите, кто реально потребляет RAM.
  4. Проверьте /etc/fstab на старые и дублирующиеся записи.
  5. Убедитесь, что у вас нет zram или автоподключения через systemd.
  6. Только после этого запускайте swapoff.

Если памяти мало, лучше сначала снизить нагрузку: остановить тяжёлые фоновые задачи, сократить количество воркеров, временно выключить необязательные контейнеры или дождаться окна обслуживания.

Как временно отключить swap в Debian и Ubuntu

Если нужно просто проверить систему без подкачки, самый удобный вариант — отключить все swap-источники сразу:

sudo swapoff -a

После команды сразу проверьте результат:

swapon --show
free -h

Если снова видите ошибку Device or resource busy, не стоит повторять команду наугад. Сначала разберитесь, какой swap активен и хватает ли памяти.

Если нужно отключить только один swap-файл или раздел

Когда swap-источников несколько, отключать лучше конкретный объект ровно в том виде, как он указан в swapon --show:

sudo swapoff /swapfile
sudo swapoff /dev/vda2

Если в выводе фигурирует UUID или путь из /dev/disk/by-uuid/, сначала сопоставьте его с реальным устройством:

lsblk -f

Что делать, если памяти не хватает для swapoff

Это ключевой практический момент. Если swap занят, а RAM почти закончилась, есть несколько рабочих сценариев.

Временно освободить память

Остановите то, что можно безопасно перезапустить: фоновые воркеры, dev-сервисы, контейнеры сборки, индексаторы, вспомогательные очереди. Иногда этого уже достаточно, чтобы swapoff прошёл без ошибок.

Временно добавить новый swap

Звучит нелогично, но при миграции это часто лучший вариант: сначала создаётся новый swap, затем отключается старый. Так система не остаётся без подкачки в самый неудачный момент.

sudo fallocate -l 2G /swapfile.new
sudo chmod 600 /swapfile.new
sudo mkswap /swapfile.new
sudo swapon /swapfile.new
swapon --show

Если вы размещаете проекты на виртуальном хостинге, такой сценарий обычно неактуален, потому что доступ к системному swap там ограничен. Зато для VPS это нормальная рабочая практика.

Перезагрузить сервер в окно обслуживания

Когда нагрузка высокая постоянно, а рисковать нельзя, иногда честнее запланировать короткое окно обслуживания. Но перезагрузка сама по себе не решает проблему старых записей в /etc/fstab или автоподключения через systemd.

Виртуальный хостинг FastFox
Виртуальный хостинг для сайтов
Универсальное решение для создания и размещения сайтов любой сложности в Интернете от 95₽ / мес

Как отключить swap навсегда

Если временное отключение прошло нормально и система стабильно работает без подкачки, можно убрать её из конфигурации.

Шаг 1. Сохранить резервную копию и поправить /etc/fstab

sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab

Закомментируйте или удалите строку со swap. Например:

UUID=xxxx-xxxx none swap sw 0 0
/swapfile none swap sw 0 0

После правки обязательно перепроверьте файл. Ошибка в /etc/fstab может создать проблемы при следующей загрузке.

Шаг 2. Отключить swap в текущей сессии

sudo swapoff -a

Проверьте, что список активных swap-источников пуст:

swapon --show

Шаг 3. Удалить swap-файл или подготовить раздел к переразметке

Если использовался swap-файл и он больше не нужен:

sudo rm -f /swapfile

Если это отдельный раздел, не торопитесь его сразу переразмечать. Лучше сначала убедиться, что система переживает одну-две перезагрузки без сюрпризов.

Правка fstab и отключение swap на Linux-сервере

Как проверить systemd, zram и автоподключение

Если swap «оживает сам», смотреть нужно не только в /etc/fstab.

Сначала проверьте активные swap-юниты:

systemctl list-units --type swap --all

Потом — сервисы, связанные с zram:

systemctl list-unit-files | grep -i zram

И после изменения конфигурации полезно обновить состояние systemd:

systemctl daemon-reload
systemctl list-units --type swap

Если пакет управления zram установлен отдельно, одной правки /etc/fstab недостаточно. Нужно отключить или перенастроить соответствующий сервис.

Отдельный случай: swap-раздел и resume после гибернации

Если проблема касается именно swap-раздела, а система когда-то использовала гибернацию, проверьте параметры resume:

cat /proc/cmdline
grep -R 'RESUME=' /etc/initramfs-tools /etc/default 2>/dev/null

Если там указан старый swap-раздел, после изменений стоит обновить initramfs. На обычном сервере это требуется не всегда, но в универсальных образах помогает убрать странности после перезагрузки.

Чего не стоит делать

  • Не удаляйте swap-файл, пока он активен.
  • Не правьте /etc/fstab без резервной копии.
  • Не отключайте swap на продакшене в пик нагрузки ради эксперимента.
  • Не считайте, что нулевой swap всегда лучше.
  • Не забывайте проверить zram, если swap исчезает и появляется снова.

Краткий чек-лист

  1. Выполните swapon --show и определите все активные swap-источники.
  2. Проверьте free -h и оцените запас RAM.
  3. Проверьте /etc/fstab на старые и дублирующиеся строки.
  4. Убедитесь, что нет zram и автоподключения через systemd.
  5. Если памяти мало, сначала разгрузите систему или временно добавьте новый swap.
  6. Только потом запускайте swapoff -a или отключение конкретного объекта.
  7. Если отключаете swap навсегда, проверьте поведение системы после перезагрузки.

В большинстве случаев swapoff: Device or resource busy лечится не «магической» командой, а нормальной диагностикой. Сначала понять, что именно занято и почему, затем обеспечить запас памяти, и только потом отключать подкачку.

Поделиться статьей

Вам будет интересно

Debian/Ubuntu: duplicate address detected, DAD failed IPv6 — причины и исправление OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: duplicate address detected, DAD failed IPv6 — причины и исправление

Сообщения duplicate address detected и DAD failed в Debian/Ubuntu означают, что IPv6-адрес не прошёл проверку уникальности в локал ...
Debian/Ubuntu: как исправить cloud-init status: error после first boot на VDS OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: как исправить cloud-init status: error после first boot на VDS

Если на Debian или Ubuntu после первого запуска или клонирования VDS вы видите cloud-init status: error, причина обычно в datasour ...
Debian/Ubuntu: как исправить SSH remote port forwarding failed for listen port и GatewayPorts OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: как исправить SSH remote port forwarding failed for listen port и GatewayPorts

Если reverse SSH tunnel через ssh -R не поднимается и клиент пишет remote port forwarding failed for listen port, причина обычно н ...