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'