Linux: Який процес викликає "зайнятість пристрою" при виконанні umount?
NFS
! Вам потрібно зупинити всі точки експорту або монтування NFS на потрібному вам диску umount
. NFS НЕ відображається на lsof
або fuser
... так що це дуже складно!
Linux: Який процес викликає "зайнятість пристрою" при виконанні umount?
NFS
! Вам потрібно зупинити всі точки експорту або монтування NFS на потрібному вам диску umount
. NFS НЕ відображається на lsof
або fuser
... так що це дуже складно!
Відповіді:
Подивіться на команду lsof (перелік відкритих файлів) - вона може сказати вам, які процеси зберігають те, що відкрито. Іноді це складно, але часто щось таке просте, що sudo lsof | grep (your device name here)
могло б зробити це за вас.
lsof /mountpoint
замістьlsof /mountpoint/
lsof +f /dev/device
а не точки монтування . Подивіться те саме для процесів ядра з анонімними анодами, які можуть не відображатися навіть у цьому списку.
Про всяк випадок ... іноді трапляється, що ви викликаєте umount з терміналу, а ваш поточний каталог належить змонтованій файловій системі.
fuser
вловлює поточні робочі каталоги, як цей, я вважаю.
Вам слід використовувати команду термофіксатора .
Напр. fuser /dev/cdrom
поверне pid (и) процесу за допомогою /dev/cdrom
.
Якщо ви намагаєтеся демонтувати, ви можете вбити процес дисертацій за допомогою -k
перемикача (див. man fuser
).
fuser
іноді показує речі, які lsof
цього не роблять, і навпаки. так що ви не можете робити лише те чи інше!
Перевірте наявність пристроїв із відкритим циклом, зіставлених із файлом у файловій системі з "losetup -a". Вони не з'являться ні з lsof, ні з термофіксатором.
umount -l /data
Фактично працював - ФС зник - але пізніше размонтирования /dev/loop0
і /dev/loop1
вішали на деякий час. Але зараз, здається, все гаразд. Ця відповідь дуже важлива, тому що вона допомагає людям, які знають lsof
і fuser
віками ...
/dev/loop0 /dev/loop1
циклічні пристрої. Єдиним способом, яким я міг від них позбутися, було перерахування пристроїв за допомогою dmsetup ls
тодішнього пошуку підозрілого докера devicemapper пристрій docker-253: 0-4291588-pool. dmsetup remove docker-253:0-4291588-pool
позбувся чисто
Також перевірте /etc/exports
. Якщо ви експортуєте шляхи в точці монтування через NFS, це дасть цю помилку при спробі демонтувати, і нічого не відображатиметься в fuser
або lsof
.
lsof +f -- /mountpoint
(як перераховує процеси, що використовують файли на монтуванні, змонтованому в / mountpoint. Особливо корисно для пошуку того, які процеси використовують монтований USB-накопичувач або CD / DVD.
fuser
або стандартний lsof
.
/dev/<device>
а не , /mountpoint
як /mountpoint
зникне після umount -l
.
lsof і fuser - це справді два способи знайти процес, який тримає певний файл відкритим. Якщо ви просто хочете, щоб umount досяг успіху, вам слід дослідити його параметри -f та -l.
Саме тому існує "термофіксатор -m / mount / point".
До речі, я не думаю, що "fuser" або "lsof" будуть вказувати, коли ресурс утримується модулем ядра, хоча зазвичай у мене такої проблеми немає.
lsof і термофіксатор мені теж нічого не дали.
Після процесу перейменування всіх можливих каталогів на .old і перезавантаження системи щоразу після того, як я вносив зміни, я знаходив один конкретний каталог (що стосується postfix), який відповідав.
Виявилося, що я одного разу зробив символічне посилання з / var / spool / postfix на / disk2 / pers / mail / postfix / varspool, щоб мінімізувати запис диска в кореневу файлову систему на основі SDCARD (Sheeva Plug).
З цим символічним посиланням, навіть після зупинки служб postfix та dovecot (як ps aux, так і netstat -tuanp не показували нічого пов'язаного), я не зміг відключити / disk2 / pers.
Коли я видалив символічне посилання та оновив конфігураційні файли postfix та dovecot, щоб вказувати безпосередньо на нові директорії на / disk2 / pers /, я зміг успішно зупинити служби та відключити каталог.
Наступного разу я детальніше розгляну результат:
ls -lR /var | grep ^l | grep disk2
Вищенаведена команда буде рекурсивно перераховувати всі символічні посилання в дереві каталогів (тут, починаючи з / var) і відфільтровувати ті імена, які вказують на конкретну цільову точку монтування (тут disk2).
find /var -lname *disk2*
Процеси з відкритими файлами є звичними винуватцями. Покажіть їх:
lsof +f -- <mountpoint or device>
Існує перевага використання, /dev/<device>
а не /mountpoint
: точка монтування зникне після umount -l
або може бути прихована накладеним монтуванням.
fuser
також можна використовувати, але, на мій погляд lsof
, це більш корисний результат. Однак fuser
це корисно, коли мова йде про вбивство процесів, що спричиняють ваші драми, щоб ви могли продовжувати своє життя.
Перелічіть файли <mountpoint>
(див. Застереження вище):
fuser -vmM <mountpoint>
Інтерактивно вбивайте лише процеси з файлами, відкритими для запису:
fuser -vmMkiw <mountpoint>
Після повторної установки лише для читання ( mount -o remount,ro <mountpoint>
) безпечно (r) знищити всі залишені процеси:
fuser -vmMk <mountpoint>
Винуватцем може бути саме ядро. Інша файлова система, змонтована на файловій системі, яку ви намагаєтесь umount
, спричинить горе. Зв'яжіться з:
mount | grep <mountpoint>/
Для кріплень із зворотним зв'язком також перевірте вихідні дані:
losetup -la
Анонімні аноди можна створити:
open
з O_TMPFILE
)Це самий невловимий тип покемона, і з'являються в lsof
«s TYPE
стовпець як a_inode
(який без документів на lsof
сторінці людини ).
Вони не з’являться в lsof +f -- /dev/<device>
, тому вам потрібно:
lsof | grep a_inode
Інформацію про процеси вбивства, що містять анонімні аноди, див. У: Перелік поточних годинників інотифікації (шлях, PID) .
Якщо після зупинки всіх служб і процесів з відкритими файлами ви все ще не можете відключити або перемонтувати пристрій, тоді може бути файл підкачки або розділ підкачки, що заважає вашому пристрою. Це не відображатиметься з fuser
або lsof
. Вимкніть обмін за допомогою:
sudo swapoff -a
Ви можете заздалегідь перевірити та показати підсумок будь-яких розділів підкачки або файлів підкачки за допомогою:
swapon -s
або:
cat /proc/swaps
Як альтернативу використанню команди sudo swapoff -a
, ви також можете відключити обмін, зупинивши службу або системний блок. Наприклад:
sudo systemctl stop dphys-swapfile
або:
sudo systemctl stop var-swap.swap
У моєму випадку вимкнення підкачки було необхідним, крім зупинки будь-яких служб і процесів з файлами, відкритими для запису, щоб я міг перемонтувати свій кореневий розділ як лише для читання, щоб запустити fsck
на моєму кореневому розділі без перезавантаження. Це було необхідно на Raspberry Pi під управлінням Raspbian Jessie.
Файлові системи, змонтовані у файловій системі, яку ви намагаєтеся демонтувати, можуть спричинити target is busy
помилку на додаток до будь-яких використовуваних файлів. (Наприклад, коли ви mount -o bind /dev /mnt/yourmount/dev
використовуєте chroot
там.)
Щоб знайти, які файлові системи змонтовані у файловій системі, виконайте наступне:
mount | grep '/mnt/yourmount'
Щоб дізнатись, які файли використовуються, скористайтеся порадами, вже запропонованими іншими тут:
lsof | grep '/mnt/yourmount'