Невозможно удалить устройство / dev / loop0 - PullRequest
27 голосов
/ 04 мая 2011

Я небезопасно удалил USB-устройство, которое было подключено к loop0 с помощью losetup и не смогло впоследствии ни удалить, ни отключить loop0.

losetup -a показывает /dev/loop0: [0005]:145606719 (/dev/sdb1)

Когда я перемонтируюподключитесь к / dev / sdb1, umount и попробуйте losetup -d /dev/loop0, я все равно получу ту же ошибку loop: can't delete device /dev/loop0: Device or resource busy.Есть ли способ избавиться от петлевого устройства?

Ответы [ 11 ]

45 голосов
/ 21 июня 2012

Возможно, вам также придется использовать dmsetup для удаления сопоставления устройства. Самый простой способ, если он не мешает каким-либо другим сопоставлениям, это использовать dmsetup remove_all.

14 голосов
/ 04 мая 2011

Вы уверены, что устройство не занято?Вы когда-нибудь пробовали использовать fuser для определения возможного PID?

Предупредительно получите всю возможную информацию:

fuser -c /dev/loop0
fuser -d /dev/loop0
fuser -f /dev/loop0

Попробуйте остановить процесс, который может использовать / dev / loop0.При необходимости используйте kill -9 или попробуйте fuser -k, чтобы отправить сигнал об уничтожении -> посмотрите на man fuser.

8 голосов
/ 11 января 2013

У меня была похожая проблема с SD-картой, и предложение Аарона Флина использовать dmsetup сработало для меня.

В частности, вы должны иметь возможность ls / dev / mapper, чтобы увидеть, существуют ли какие-либо разделы loop0pX.

Если это так, вы можете использовать dmsetup remove /dev/mapper/loop0p2, чтобы избавиться от ненужных разделов.Это может быть полезно, если вы хотите сохранить некоторые сопоставления.

5 голосов
/ 10 января 2017

У меня была такая же проблема сегодня, и ни один из предыдущих ответов не устранил ее (я не пытался перезагрузить модуль ядра цикла, потому что хотел понять реальную проблему).

Получается, что файл образа, связанный с устройством петли, содержал раздел «Linux LVM», который был автоматически установлен, как показано pvscan:

$ pvscan
  PV /dev/sda1    VG server-vg   lvm2 [417,76 GiB / 0  free]
  PV /dev/loop0   VG vbox-vg     lvm2 [7,81 GiB / 0    free]
  Total: 2 [425,57 GiB] / in use: 2 [425,57 GiB] / in no VG: 0 [0   ]

Итак, мне пришлось деактивировать все логические тома в группе томов:

$ vgchange --activate n vbox-vg
  0 logical volume(s) in volume group "vbox-vg" now active

В конце концов мне удалось отсоединить петлевое устройство:

$ losetup -d /dev/loop0
$ losetup -a
3 голосов
/ 22 декабря 2018

Я прогнал это решение цикла до конца Интернета и обнаружил, что решение - это удаление snapd и очистка всех связанных файлов: (в моем случае это было 167 Гб)

sudo apt purge snapd
2 голосов
/ 11 июня 2016

Если вы используете Luks, вам нужно luksЗакрыть сначала

cryptsetup luksClose $whatever
losetup -D
1 голос
/ 04 мая 2011

Попробуйте перезагрузить модуль ядра цикла. Если это не помогает, перезагрузите компьютер.

0 голосов
/ 22 февраля 2019

THX для этой статьи BiX и все: Я не администратор Linux, а только пользователь, но могу внести большой вклад в проблему устройства с петлей:

Когда файл виртуального смонтированного образа (.iso) не совсем корректно удален из проводника (Dolphin / Nautilus).

Вы можете размонтировать этот виртуальный раздел, используя Prg «Диски» (в инструменте управления дисками Service Prg). Тем не менее, файл ISO по-прежнему остается в виде цикла в списке управления устройством. Например, если вы хотите удалить этот ISO-файл с диска, процесс удаления будет происходить только виртуально, и соответствующее пространство хранения в МБ или ГБ вообще не будет свободным. Файл ISO больше не виден в Dolphin / Nautilus после удаления, но соответствующее требование к объему памяти больше не указывается как свободное; информация о свободном и занятом пространстве хранения на носителе данных, где находился этот файл ISO, остается неизменной до и после удаления.

Простое, но нетрадиционное решение - перезагрузить / запустить компьютер. Но это не может быть реальным решением!

Оболочка Linux losetup, которая описана на странице руководства, предоставляет здесь исправление:

losttup используется для связывания петлевых устройств с обычными файлами или блочными устройствами, для отключения петлевых устройств и для запроса статуса петлевого устройства. Если указан только аргумент loopdev, отображается состояние соответствующего устройства цикла.

Таким образом, вы можете использовать losetup -d /dev/loop0, чтобы удалить файл, связанный с циклом в dev / loop0 (! финк плавник, у вас так терминальное статическое открытие).

На справочной странице losetup вы можете видеть, что выражение Delete здесь не используется, но Solve. Тем не менее, согласно моему примеру, что «файл не удален на барабан, несмотря на чистое размонтирование» после использования опции -d, файл только сейчас удаляется на барабан. (Я не администратор Linux, но :) Это скорее связано с присвоением loopNumber, которое является виртуальным, но становится реальным условием при монтировании iso-образа (образа).

Здесь полный синтаксис оболочки losetup:

https://linux.die.net/man/8/losetup

(я работаю на немного поврежденном linuxMint-18)

Перевод с немецкого с www.DeepL.com/Translator

0 голосов
/ 15 сентября 2017

Я просто щелкаю правой кнопкой мыши на устройстве петли в дельфине и размонтирую его.

0 голосов
/ 11 февраля 2017

То же, что @ frntn.

Циклы были заняты RAID:

# cat /proc/mdstat

Personalities : [raid0]

md126 : active raid0 loop6p5[1] loop5p3[0]
  209584128 blocks super 1.2 512k chunks

md127 : active raid0 loop6p2[1] loop5p2[0]
  31440896 blocks super 1.2 512k chunks

Я удалил их, и все снова подчиняется приказам.

...