Як я можу перерахувати ті файли, які перешкоджають / перераховуються лише для читання?
А) 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 .