全部產品
Search
文件中心

Alibaba Cloud Linux:loop裝置關聯檔案報錯“losetup: failed to set up loop device: Device or resource busy”的解決方案

更新時間:Sep 28, 2024

loop裝置是一種在Linux系統中使用的虛擬塊裝置。它允許將常規檔案類比為塊裝置,從而使作業系統能夠像訪問物理磁碟或分區一樣訪問這些檔案。losetup命令用於在Linux中建立一個裝置映射器,將檔案與loop裝置關聯起來。本文介紹了Alibaba Cloud Linux中使用losetup命令將loop裝置關聯到檔案時,出現錯誤“losetup: failed to set up loop device: Device or resource busy”的原因及解決方案。

問題現象

  1. 查看系統資訊。

    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/"
  2. 查看系統中所有loop裝置。

    sudo ls /dev/loop*

    返回資訊如下所示,當前系統裡面存在loop0。

    /dev/loop0  /dev/loop-control
  3. 查看目前的目錄下的內容。

    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
  4. 關聯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裝置。

  1. 取消loop0的當前關聯關係。

    sudo losetup -d /dev/loop0
  2. 重新將loop0與img檔案關聯。

    sudo losetup /dev/loop0 ./img
  3. 查看loop0的關聯情況。

    sudo losetup /dev/loop0

    輸出資訊如下,loop0已經成功與img檔案關聯。

    /dev/loop0: [64771]:929300 (/root/workplace/losetup/img)