本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
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)