本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
loop设备是一种在Linux系统中使用的虚拟块设备。它允许将常规文件模拟为块设备,从而使操作系统能够像访问物理磁盘或分区一样访问这些文件。losetup命令用于在Linux中创建一个设备映射器,将文件与loop设备关联起来。本文介绍了Alibaba Cloud Linux中使用losetup命令将loop设备关联到文件时,出现错误“losetup: failed to set up loop device: Device or resource busy”的原因及解决方案。
问题现象
查看系统信息。
sudo cat /etc/os-release
返回信息如下所示。
NAME="Alibaba Cloud Linux" VERSION="3 (Soaring Falcon)" ID="alinux" ID_LIKE="rhel fedora centos anolis" VERSION_ID="3" UPDATE_ID="9.1" PLATFORM_ID="platform:al8" PRETTY_NAME="Alibaba Cloud Linux 3 (Soaring Falcon)" ANSI_COLOR="0;31" HOME_URL="https://www.aliyun.com/"
查看系统中所有loop设备。
sudo ls /dev/loop*
返回信息如下所示,当前系统里面存在loop0。
/dev/loop0 /dev/loop-control
查看当前目录下的内容。
ll
返回信息如下所示。
total 11448 drwxr-xr-x 2 root root 4096 Sep 7 15:34 . drwxr-xr-x 7 root root 4096 Sep 5 18:57 .. -rw-r--r-- 1 root root 10485760 Sep 5 18:57 img -rw-r--r-- 1 root root 10485760 Sep 7 15:34 img1
关联loop设备到指定文件。
执行命令将loop0与img文件关联。
sudo losetup /dev/loop0 ./img
出现下列错误信息。
losetup: ./img: failed to set up loop device: Device or resource busy
原因分析
将loop0与img文件关联时,如果当前loop0正与其他文件关联,那么则会出现错误信息“Device or resource busy”。
输入下列命令查看loop0的关联情况。
sudo losetup /dev/loop0
返回信息如下,loop0与文件/root/workplace/losetup/img1
关联。
/dev/loop0: [64771]:928116 (/root/workplace/losetup/img1)
解决方案
为了解决上述问题,有两种可选的解决方案。方案一适用于当前loop设备充足的场景,方案二适用于当前没有可用的空闲loop设备场景。
方案一
新建一个loop设备,并将新建的loop设备与img文件关联。执行下列命令获取一个与img文件关联的设备,如果当前不存在与img文件关联的设备,下列命令则会查找第一个空闲loop设备并与img文件关联。
sudo losetup -f ./img
输入下列命令查看所有的loop设备情况。
sudo losetup -a
输出信息如下所示,loop1与img文件成功进行了关联。
/dev/loop1: [64771]:929300 (/root/workplace/losetup/img)
/dev/loop0: [64771]:928116 (/root/workplace/losetup/img1)
方案二
取消loop0与img1文件的关联关系,并重新建立loop0与img的关联关系。
使用这种方法存在一定风险,在解除loop0的关联关系前请确保没有第三方正在使用loop0设备。
取消loop0的当前关联关系。
sudo losetup -d /dev/loop0
重新将loop0与img文件关联。
sudo losetup /dev/loop0 ./img
查看loop0的关联情况。
sudo losetup /dev/loop0
输出信息如下,loop0已经成功与img文件关联。
/dev/loop0: [64771]:929300 (/root/workplace/losetup/img)