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)