Вопрос или проблема
У меня уже несколько месяцев возникает проблема, когда Linux просто не может завершить работу.
Он зависает на экране, где отображаются все журналы и прочее, последняя строка всегда:
“kvm: exiting hardware virtualization”
Где-то посередине есть либо:
“Не удалось отмонтировать /oldroot: устройство или ресурс занят”
или что-то типа:
“Перемонтирование “/” ext4 с …..” (я не могу вспомнить остальное)
Это, похоже, не связано с конкретной дистрибуцией, но происходит на дистрибутивах, основанных на arch (я не пробовал ubuntu или другие дистрибуции).
Это также, похоже, влияет только на этот ноутбук, так как все другие системы с Linux в моем доме работают идеально.
Также считаю нужным упомянуть, что я новичок, но решил, что arch был бы лучшим способом обучения из-за его сложной кривой обучения.
Буду рад предоставить любые необходимые логи,
изображение предоставлено экрана завершения работы.
У меня было что-то подобное несколько месяцев назад, также на Arch. Проблема была в модулях nvidia, поэтому, если nvidia присутствует в вашей системе, это может помочь. Несколько модулей было необходимо выгрузить в процессе завершения работы, так что я добился этого, добавив и включив следующий файл юнита. Обратите внимание, что я использую дисплейный менеджер sddm с LXQt. Если вы используете другой дисплейный менеджер, то редактируйте соответственно.
# /etc/systemd/system/nvidia-unload-shutdown.service
[Unit]
Description=Удаление модулей nvidia перед завершением работы
DefaultDependencies=no
After=sddm.service
[Service]
Type=oneshot
ExecStart=/usr/bin/modprobe -r nvidia_drm nvidia_modeset nvidia_uvm nvidia
[Install]
WantedBy=shutdown.target
Ответ или решение
Проблема, с которой вы столкнулись при выключении Linux, связанная с невозможностью полностью размонтировать файл-систему, может быть вызвана несколькими факторами. Давайте разберем каждую из них, чтобы попытаться выявить наиболее подходящее решение.
Теория
При выключении Linux выполняется процесс, называемый "размонтирование" файловых систем. Системный демон Systemd отвечает за координацию процесса отключения всех служб и развязывание файловых систем. Когда вы видите сообщение об ошибке "Failed to unmount /oldroot: Device or resource busy", это указывает на то, что некоторая служба или процесс всё ещё держит файловую систему открытой, не позволяя её размонтировать.
Другие сообщения, как "Remounting "/" ext4 with…", могут указывать на попытки переподключения файловой системы в режиме только для чтения перед завершением работы, что является стандартной практикой для предотвращения повреждений данных. Сообщение "kvm: exiting hardware virtualization" свидетельствует о завершении работы KVM-модуля, который может быть задействован, если вы используете виртуализацию.
Пример
Ваша проблема напоминает случай, когда модули nvidia, загруженные в память, мешают завершить работу системы корректно. Проблема решилась добавлением системного сервиса для выгрузки этих модулей. То, что это происходит на распределениях, основанных на Arch, указывает на возможные нюансы в работе с более современными или настраиваемыми конфигурациями ядра, используемыми в Arch Linux.
Применение
-
Проверка активных процессов и монтированных файловых систем: Используйте команды
lsof
иfuser
, чтобы выяснить, какие процессы всё ещё могут обращаться к/oldroot
во время завершения работы. Это может помочь вам выявить, какой именно процесс блокирует размонтирование.lsof | grep /oldroot fuser -vm /oldroot
-
Обновление и настройка системных модулей: Если у вас есть графическая карта от NVIDIA, и вы используете соответствующие драйверы, рассмотрите возможность создания и использования системного юнита для демонтажа модулей перед выключением. Даже если у вас другая графическая архитектура, логика остается той же – убедиться, что все модули карт или связанные службы корректно выгружаются.
# Создайте файл /etc/systemd/system/nvidia-unload-shutdown.service [Unit] Description=Remove NVIDIA modules before shutdown DefaultDependencies=no After=display-manager.service [Service] Type=oneshot ExecStart=/usr/bin/modprobe -r nvidia_drm nvidia_modeset nvidia_uvm nvidia [Install] WantedBy=shutdown.target
Затем активируйте и запустите юнит:
sudo systemctl enable nvidia-unload-shutdown.service
-
Настройка логов и диагностика: Проверьте логи systemd с помощью
journalctl -xe
для изучения последней активности перед зависанием системы. Это может помочь вам выявить какие-либо ошибки или предупреждения, указывающие на специфическую проблему. -
Тестирование в безопасном режиме: Попробуйте загрузиться в безопасном режиме или с минимальной конфигурацией путем добавления соответствующего параметра в загрузчике GRUB. Это может помочь исключить какие-либо дополнительные модули или драйверы, которые удерживают монтирование.
-
Обратитесь за помощью к сообществу Arch Linux: Arch Linux располагает обширной и активной базой пользователей, часто сталкивающейся с подобными проблемами. Форумы и вики-страницы могут предложить дополнительные советы и решения.
Важно помнить, что проблемы, специфичные для оборудования, как, например, зависание на одном устройстве, часто требуют индивидуальной настройки и понимания того, как различные компоненты аппаратного обеспечения взаимодействуют с определённой конфигурацией Linux. Постепенные шаги, как те, что описаны выше, в сочетании с постоянным обучением и экспериментами, со временем приведут к успешному разрешению проблемы.