Як я можу перерахувати ті файли, які перешкоджають / перераховуються лише для читання?
А) fuserможна знайти в psmiscупаковці; це випадок використання, коли я знаходжу fuserблиски & є кориснішим ніж lsof.
# fuser -v -m / 2>&1 | grep '[Ff]r.e'
Це покаже всі процеси, у яких файли відкриті / для читання (f) та запису (F). Файли, які заважають / не перераховуються лише для читання, - це файли, відкриті для запису (F).
Убийте процеси, які виконуються у виконанні з файлами кореневого каталогу, відкритими для запису ., Тобто
# for fupid in $(fuser -v -m / 2>&1 | grep Fr.e | awk '{print $2}'); do kill $fupid; done
Це вище systemdзауважень із застереженням. Якщо systemdє, initто fuserпобачимо це і є інші міркування. З systemdроботою, він може (перо) запуск процесів за вашу спину, навіть якщо вони тільки що були виявлені і вбиті fuser. systemdнабагато досконаліший, ніж традиційний sysvinit.
B) ОНОВЛЕННЯ в описі зазначає, що система має лише ... initі gettyвсе ще працює ...
Я бачу коментар, який говорить, що система не використовує systemd, а використовує init. На розтяжку, systemd є init . У коментарі прямо не сказано sysvinit, тому я припускаю, що система, про яку йдеться, може використовувати розтягнення systemdза замовчуванням init. Або інші люди, які натрапляють на цю посаду, які використовують розтяжки systemd, вважають цю частину корисною.
На Wiki Debian ,
Процесом ініціалізації системи керує демон init. У стисканні та більш ранніх версіях цей демон надається пакетом sysvinit, і альтернативи не підтримуються. У хрипі , демон за замовчуванням init демон все ще єsysvinit , але "попередній перегляд технологій" systemd доступний. У Jessie і протягу , система ініціалізації за замовчуваннямsystemd , але перемикання на Sysvinit підтримується.
Оскільки Джессі, повністю підтримується лише systemd; sysvinit здебільшого підтримується, але пакунки Debian не повинні надавати сценарії запуску sysvinit. runit також упакований, але не отримав такого ж рівня тестування та підтримки, як інші, і наразі не підтримується як PID 1.
Під час systemdзапуску є кілька додаткових кроків, які потрібно зробити, щоб звільнитись / щоб її можна було повторно змінити.
Ймовірно, system.sliceце проведення відкритих файлів для systemd-journald.serviceабо systemd-udevd.service(обидва з яких мають залежність сокета). Або, якщо NetworkManagerвін запущений, він може відновлюватись, dhclientякий пише оренду в / var / ... (& / var / не завжди є власним пристроєм) тощо, fuserможе виявити & ви вбити, dhclientале NetworkManagerзапустить його відразу ж резервного копіювання.
Мораль - багато речей, які автоматизовані, що могли б "захотіти" / (і тим більше з " systemd).
Напевно, якщо це можливо, systemdеквівалент рівня 1 запуску відповідає rescue.target(і runlevel1.targetє символічним посиланням на rescue.target).
1) Почніть з ізоляції системи до rescue.target
# systemctl isolate rescue.target
Він повинен запропонувати вам ввести кореневий пароль; дотримуйтесь інструкцій на екрані.
2) На рятувальній оболонці з’ясуйте, що хоче /.
# systemctl show -p Wants /
Як правило, це system.slice; зупинити все, що хоче /. напр
# systemctl stop system.slice
3) На даний момент перерахунок не повинен звітувати mount: / is busyі mount -o remount,ro / повинен працювати. Якщо ні, перевірте ще раз fuser.
4) FWIW; Я також бачив випадки umountвідмов, коли / якщо інший пристрій встановлено в підкаталозі іншого монтажу, тобто вкладених кріплень. Наприклад, umount /не вдасться, якщо / var / або / boot / знаходиться на іншому пристрої (і встановлено). Хоча mount -o remount,ro /в цьому випадку все-таки має працювати.
lsblk може бути корисним для візуалізації вкладених кріплень.
Чому lsof + L1 більше не перераховує відкриті файли, від’єднані від зв’язку?
Оскільки вони недоступні (сокети або більшість FIFO та труб), вони більше не відкривають файли (батьківський процес закрив дескриптор файлу), або ж у них (досі) кількість посилань перевищує 1.
людина lsof (8) детальніше ...
+ | -L [l]
Ця опція дозволяє ('+') або відключає ('-') перелік лічильників файлових посилань, де вони доступні - наприклад, вони недоступні для розеток або більшості FIFO та труб.
Коли + L вказано без наступного номера, усі лінки посилаються на список. Коли -L задано (за замовчуванням), кількість посилань не відображатиметься.
Коли + L супроводжується номером, у списку будуть лише файли, що мають кількість посилань, менших за це число . (Ніяке число не може слідувати -L.) Специфікація форми '' + L1 '' вибере відкриті файли, від’єднані. Специфікація форми +aL1 <file_system>дозволить вибрати від’єднані відкриті файли у зазначеній файловій системі.
wабоuвFDстовпціlsofвиведення, або дляFна виходіfuser -vm /, наприклад. Я не можу дати вам вичерпного списку. Ви також можете встановити пакет needrestart .