Как исправить ошибку read-error on swap-device в Ubuntu

Linux — надёжная операционная система для серверов и рабочих станций. Но даже она иногда даёт сбои из‑за нехватки памяти или проблем со swap. Ошибка “read-error on swap-device” может сделать систему нестабильной или вовсе неотзывчивой. В этой статье объясняю, как диагностировать причину и устранить проблему в Ubuntu.
Что такое swap и зачем он нужен
Определение: swap — это дополнительная область хранения, которую ядро Linux использует, когда оперативная память (RAM) заполнена. Swap может быть отдельным разделом, файлом на диске или помещением в сжатую оперативную память (zram).
Swap нужен для:
- Поддержки работы приложений при дефиците оперативной памяти.
- Уменьшения риска аварийных завершений процессов при временных всплесках нагрузки.
Важно: чтение из swap гораздо медленнее, чем из RAM. Поэтому swap помогает выжить, но не заменяет реальный объём оперативной памяти.
Частые причины ошибки read-error on swap-device
- Очень мало RAM: при интенсивных задачах система начинает активно использовать swap. Это повышает нагрузку на диск и задержки чтения/записи.
- Слишком маленький swap-файл или переполнение swap: если swap заполнен, система может испытывать ошибки при работе с подкачкой.
- Повреждение файловой системы или битые сектора на диске: если хранение swap расположено на повреждённом носителе, чтение возвращает ошибки.
- Неправильные записи в /etc/fstab: при изменении swap без корректного обновления fstab система пытается подключить несуществующий или перемещённый swap.
- Аппаратные проблемы: проблемы с контроллером диска, кабелями или самими накопителями.
Исходный вывод: увеличение RAM или swap часто решает проблему, но иногда потребуется работать с диском и конфигурацией.
Просмотр размера и состояния swap
Чтобы понять, сколько у вас swap и активен ли он, используйте встроенные утилиты.
Просмотреть активные swap-области:
swapon --showВыход команды покажет путь к swap (например, /swapfile или /dev/sdXN) и объём в ГБ. На десктопе можно использовать графический монитор:
- Нажмите клавиши Super (клавиша Windows) + A, найдите «System Monitor» или «Системный монитор». График памяти покажет использование RAM и swap.
Пошаговое восстановление и создание swap-файла
Ниже — безопасный процесс отключения старого swap, создания нового и включения его обратно.
- Отключите текущий swap (если это swap-файл /swapfile):
sudo swapoff /swapfile- Создайте новый swap-файл нужного размера. Пример для 4 ГБ:
sudo fallocate -l 4G /swapfileПримечание: если fallocate не поддерживается на вашей файловой системе, используйте dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress- Ограничьте права доступа — только root должен иметь доступ:
sudo chmod 600 /swapfile- Инициализируйте swap-область:
sudo mkswap /swapfile- Включите swap:
sudo swapon /swapfile- Убедитесь, что swap активен:
swapon --show
free -m
cat /proc/swaps- Если вы хотите, чтобы swap подключался автоматически при загрузке, добавьте строку в /etc/fstab (проверьте правильность пути и опций перед перезагрузкой):
/swapfile none swap sw 0 0Важно: ошибочная запись в /etc/fstab может привести к проблемам при загрузке. Всегда делайте резервную копию файла перед изменениями.
Мониторинг использования памяти и поведения системы
Команды для наблюдения в реальном времени:
free -m # показывает RAM и swap в мегабайтах
vmstat 1 # системная статистика с интервалом 1 сек
top или htop # процессы и использование памяти
dmesg | grep -i swap # сообщения ядра, связанные со swap
journalctl -k | grep -i swapЕсли система активно свопит и становится медленной, рассмотрите изменение значения swappiness (как часто система будет пользоваться swap):
cat /proc/sys/vm/swappiness # текущее значение (обычно 60)
sudo sysctl vm.swappiness=10 # временно снизить агрессивностьЧтобы сделать значение постоянным, измените /etc/sysctl.conf.
Когда простое пересоздание swap не помогает
Контрпримеры / ситуации, в которых описанные шаги не устраняют проблему:
- Повреждён диск или есть битые сектора. В этом случае swap, размещённый на проблемном диске, будет давать ошибки чтения. Решение: проверить SMART (smartctl), выполнить fsck и при необходимости заменить диск.
- Проблемы в оборудовании (контроллер SATA/PCIe, плохие кабели) — требуется диагностика и замена железа.
- Повреждён загрузочный или системный раздел, некорректные права на /swapfile или неправильный формат — проверьте логи ядра (dmesg) и systemd-journald.
- Аппаратная память (RAM) действительно неисправна — её стоит протестировать с помощью memtest86.
Альтернативные подходы и улучшения
- Увеличить объём физической RAM — наиболее устойчивое решение для серверов и рабочих станций.
- Использовать выделенный swap-раздел вместо файла, если вы предпочитаете управление разделами.
- Включить zram: сжатый swap в оперативной памяти. Это уменьшает использование диска и улучшает отклик на системах с медленными носителями.
- Настроить swappiness и cache pressure, чтобы снизить частоту обращения к swap.
- Для временных данных использовать tmpfs, если данные не критичны и могут быть сброшены при перезагрузке.
Чеклист для ролей
Для системного администратора:
- Проверить swapon –show и dmesg на ошибки.
- Проверить /etc/fstab и права /swapfile.
- Просканировать диск (smartctl) и файловую систему (fsck).
- Рассмотреть возможность увеличения RAM или переноса swap на надёжный носитель.
Для разработчика/пользователя:
- Мониторить free -m и htop при нагрузке.
- При зависании убивать проблемные процессы (kill или pkill).
- Временно снизить swappiness.
Для десктоп-пользователя:
- Пересоздать swap-файл через приведённые команды.
- Проверить наличие обновлений ядра и драйверов диска.
Короткая шпаргалка команд
# Просмотр и диагностика
swapon --show
free -m
cat /proc/swaps
dmesg | grep -i swap
journalctl -k | grep -i swap
smartctl -a /dev/sda
memtest86 # запуск с USB для теста RAM
# Создание swap-файла 4G
sudo swapoff /swapfile
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Альтернатива если нет fallocate
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
# Настройка swappiness временно
sudo sysctl vm.swappiness=10Матрица рисков и способы смягчения
| Риск | Последствие | Смягчение |
|---|---|---|
| Повреждение диска | Ошибки чтения swap, падения сервисов | SMART, fsck, замена носителя |
| Неправильный /etc/fstab | Система может не загрузиться | Резервная копия fstab, тест перед реBOOT |
| Недостаток RAM | Частые зависания и медленная работа | Увеличение RAM, zram, корректный swap |
| Неправильные права на /swapfile | swap не подключится или будет небезопасен | chmod 600 /swapfile |
Критерии приёмки
- swapon –show показывает ожидаемый объём и активность.
- Система не отдаёт ошибок “read-error on swap-device” в dmesg/journal.
- При нагрузке система остаётся отзывчивой в пределах ожидаемых показателей.
Однострочный глоссарий
- swap: область подкачки, дополнительная память на диске.
- swappiness: параметр, определяющий агрессивность использования swap.
- zram: сжатый swap в оперативной памяти.
Важно: если вы сомневаетесь в состоянии диска или памяти, начните с аппаратной диагностики. Проблемы с железом чаще всего маскируются как ошибки на уровне файловой системы или swap.
Короткое резюме
- Проверьте состояние swap и RAM.
- Отключите и пересоздайте swap-файл при необходимости.
- Диагностируйте диск и память при подозрениях на аппаратные проблемы.
- Рассмотрите zram или добавление RAM как долгосрочное решение.
Примечание: перед изменением системных файлов всегда делайте резервные копии и, при возможности, тестируйте операции на тестовой машине.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone