umount - пристрій зайнятий


14

Іноді, коли я хочу налаштувати пристрій, наприклад

sudo umount /dev/loop0

Я отримаю повідомлення

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Зазвичай я вирішую це питання, закриваючи вікно консолі (у моєму випадку xfce4-terminal), а потім umount.

Що означає ця проблема? Чи є якесь розумніше рішення?


2
Це станеться, наприклад, якщо ви все ще знаходитесь в оболонці в тому каталозі, де встановлено пристрій.
klapaucius

Я не пам'ятаю, чи був там, але я спробував це, і ти маєш рацію, це сталося.
xralf

Відповіді:


14

Це означає, що деякий процес має робочу директорію або відкриту ручку файлу під точкою монтажу. Найкраще зробити це - закінчити процес порушення, змінити його робочий каталог або закрити ручку файлу перед відключенням.

Однак у Linux є альтернатива. Використання umount -lдзвінків "ледачого" відключення. Файлова система все ще буде змонтована, але ви не зможете її бачити або використовувати, за винятком процесів, які вже її використовують. Коли програма, яка порушує порушення, закриває (будь-якими способами), система "закінчить" демонтування файлової системи.


2
Чи є спосіб дізнатися, який процес має обробку відкритого файлу і його слід припинити?
xralf

4
Використання lsof, мабуть, найкращий спосіб.
bahamat

1
наприклад lsof | grep loop0?
xralf

Ні, затисніть для точки кріплення. Він повинен містити список усіх файлів під ними. Я не думаю, що він покаже речі, які просто мають робочий каталог під точкою монтажу, тому це не ідеальний метод.
bahamat

7

Ви також fuserможете вбити всі процеси за допомогою змонтованої файлової системи.

fuser -cuk /mnt

Параметри:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

Перевірте себе на роз'яснення .


3

Враховуючи ваше "звичайне рішення", це означає, що оболонка, яку ви запускаєте у вікні консолі, має каталог у файловій системі на цьому пристрої як її поточний робочий каталог.

Linux та Unixes взагалі хочуть дуже добре підтримувати файлову систему, якщо процес має поточну робочу директорію у цій файловій системі.

Ви можете просто використовувати cdу вікні консолі, щоб вийти з каталогу в або під ним, /mntа не вбити вікно консолі та оболонки, що працює всередині неї.


0

Я виявив ситуацію, яка може заважати відключенню пристрою, який я поділюсь як відповідь, навіть якщо це питання дуже старе.

Якщо у вас на пристрої розміщені акції NFS, і будь-яка з цих акцій NFS підтримується пристроєм, на який ви намагаєтесь відключити, вам доведеться припинити їх спільний доступ (найкраще зробити, зупинивши службу NFS, наприклад, sudo service nfs-kernel-server stopна останніх версіях Ubuntu ). Сервер NFS може не відображатися в lsof або fuser, що може ускладнити ідентифікацію проблеми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.