【问题标题】:Cannot delete device /dev/loop0无法删除设备 /dev/loop0
【发布时间】:2011-08-18 09:03:11
【问题描述】:

我不安全地删除了一个使用losetup 连接到 loop0 的 USB 设备,之后无法删除或分离 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。有没有办法摆脱循环设备?

【问题讨论】:

  • 这很奇怪,您通常不会将环路连接到 USB 设备。你是怎么做到的?
  • 我正在使用 LUKS 加密,并认为我可以加密我的 1gb USB 闪存驱动器。
  • 您可以为此使用 LUKS,但不能使用循环设备。 LUKS 分区有自己的分区类型。
  • 对不起,我的菜鸟,在网上找不到任何明确的说明。

标签: linux ubuntu mount


【解决方案1】:

尝试重新加载循环内核模块。如果没有帮助,请重新启动。

【讨论】:

  • 这实际上对我有用(其他解决方案没有)
  • 对于那些不确定如何操作的人:modprobe -r loop && modprobe loop。 :)
  • 如果没有安装或配置循环设备文件,modprobe 循环工作正常
【解决方案2】:

您确定设备不忙吗?您是否尝试过 fuser 来确定可能的 PID?

谨慎获取所有可能的信息:

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

尝试停止进程,它可以使用 /dev/loop0。如有必要,使用kill -9 或尝试fuser -k 发送终止信号 -> 查看man fuser

【讨论】:

  • fuser -dfuser -f 是什么?我的 fuser 没有这些标志(fuser (PSmisc) 22.20 - 来自 Centos 7.6)
【解决方案3】:

您可能还必须使用dmsetup 来删除设备映射。如果不干扰任何其他映射,最简单的方法是使用dmsetup remove_all

【讨论】:

  • 这对我有用,虽然我使用dmsetup info 获取映射,然后使用dmsetup remove <device>。谢谢。
  • sudo dmsetup info 给我No devices found
  • 这也对我有用。出于某种原因,在 CentOS 6.5 上使用 kpartx -a 然后 kpartx -d 并没有像它应该那样删除映射。
  • 如果您在此之前通过简单的rm /dev/loop 删除循环开发而没有正确的losetup -d 删除,它可以节省一天的时间。
【解决方案4】:

我在使用 SD 卡时遇到了类似的问题,而 Aaoron Flin 使用 dmsetup 的建议对我有用。

具体来说,您应该能够ls /dev/mapper 来查看是否存在任何loop0pX 分区。

如果是这样,您可以使用dmsetup remove /dev/mapper/loop0p2 删除任何不必要的分区。如果您想保留一些映射,这可能很有用。

【讨论】:

    【解决方案5】:

    如果你使用 Luks,你需要先 luksClose

    cryptsetup luksClose $whatever
    losetup -D
    

    【讨论】:

      【解决方案6】:

      肯定有一个进程在使用它。如果您无法确定是哪个进程阻止它删除,请尽可能重新启动服务器。

      【讨论】:

        【解决方案7】:

        我今天遇到了同样的问题,之前的答案都没有解决它(我没有尝试重新加载循环内核模块,因为我想了解实际问题)。

        原来与循环设备关联的映像文件包含一个“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
        

        【讨论】:

          【解决方案8】:

          与@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
          

          我删除了它们,一切都再次服从命令。

          【讨论】:

            【解决方案9】:

            我只需右键单击 dolphin 中的循环设备并卸载它。

            【讨论】:

              【解决方案10】:

              我把这个循环解决方案追到了互联网的尽头,发现解决方案是卸载 snapd清除所有相关 文件:(在我的情况下,这是 167 Gb)

              sudo apt purge snapd
              

              【讨论】:

              • 我清除了 snapd 并且循环设备仍然存在。设备:/dev/loop1(只读) 内容:未知(squashfs 4.0)。它发生在我安装 Clementine 软件之后。我卸载了软件,这个循环设备出现了。它还说支持文件:/var/lib/snapd/snaps/clementine_274.snap (deleted)
              • 这会导致所有通过 snapd 安装的软件都被删除。
              【解决方案11】:

              这篇文章的 THX BiX 和所有: 我不是 Linux 管理员,只是一个用户,但可以为一个有循环设备问题做出这么多贡献:

              当虚拟安装的映像文件 (.iso) 并未真正从文件资源管理器 (Dolphin/Nautilus) 中完全删除时。

              您可以使用 Prg“磁盘”(在 Service Prg 的磁盘管理工具下)卸载此虚拟分区。 但是,ISO 文件仍将作为循环保留在设备管理列表中。例如,如果您想从磁盘中删除这个 ISO 文件卷轴,删除过程只会虚拟进行,相应的 MB 或 GB 存储空间根本不会空闲。删除后ISO文件在Dolphin/Nautilus中不再可见,但相应的存储空间需求不再指定为free;即该ISO文件所在的数据载体上的空闲和占用存储空间信息在删除前后没有变化。

              一个简单但非常规的解决方案是重新启动/启动计算机。 但这不可能不是真正的解决方案!

              手册页中描述的 Linux shell losetup 在此处提供了补救措施:

              losetup 用于将循环设备与常规文件或块设备关联,分离循环设备并查询循环设备的状态。如果只给出 loopdev 参数,则显示相应循环设备的状态。

              因此您可以使用losetup -d /dev/loop0 删除与 dev/loop0 上的循环关联的文件(!“losetup -d”仅可作为管理员使用。因此您需要输入 sudo losetup -d 或大多数 LinuxGurus 不fink fin,你有一个终端静态打开)。

              losetup 的手册页中可以看到这里没有使用Delete 表达式,而是Solve。然而,根据我的示例,在使用选项 -d 后,“文件未删除卷轴,尽管完全卸载”,文件现在才被删除卷轴。 (我不是 Linux 管理员,但是:)这与 loopNumber 的分配有关,它是虚拟的,但在安装 iso-image(图像)时成为真实条件。

              这里是shelllosetup的完整语法:

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

              (我在有点损坏的 linuxMint-18 上工作)

              使用 www.DeepL.com/Translator 从德语翻译

              【讨论】:

                【解决方案12】:

                运行

                mount | grep /dev/loopN
                

                检查循环设备是否安装在某处, 然后运行

                umount /dev/loopN 
                

                卸载它。

                如果仍有问题,则运行

                lsof | grep loopN
                

                检查哪个进程正在使用它然后杀死它。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-04-18
                  • 2011-12-20
                  • 2023-03-25
                  • 2021-12-25
                  • 1970-01-01
                  • 2019-11-13
                  • 2018-07-15
                  相关资源
                  最近更新 更多