1. loop 設備介紹在類 UNIX 系統里,loop 設備是一種偽設備(pseudo-device),或者也可以說是仿真設備。它能使我們像塊設備一樣訪問一個文件。
在使用之前,一個 loop 設備必須要和一個文件進行連接。這種結合方式給用戶提供了一個替代塊特殊文件的接口。因此,如果這個文件包含有一個完整的文件系統,那么這個文件就可以像一個
磁盤設備一樣被 mount 起來。
上面說的文件格式,我們經常見到的是 CD 或 DVD 的 ISO 光盤鏡像文件或者是軟盤(硬盤)的 *.img 鏡像文件。通過這種 loop mount (回環mount)的方式,這些鏡像文件就可以被 mount 到當前文件系統的一個目錄下。
至此,順便可以再理解一下 loop 之含義:對于第一層文件系統,它直接安裝在我們計算機的物理設備之上;而對于這種被 mount 起來的鏡像文件(它也包含有文件系統),它是建立在第一層文件系統之上,這樣看來,它就像是在第一層文件系統之上再繞了一圈的文件系統,所以稱為 loop。
在 Linux 里,loop 設備的設備名形如:
引用
ls /dev/loop*
/dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6
/dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7
... ...
例如,要在一個目錄下 mount 一個包含有磁盤鏡像的文件,需要分 2 步走:
引用
losetup /dev/loop0 disk.img #使磁盤鏡像文件與循環設備連結起來
mount /dev/loop0 /home/groad/disk_test #將循環設備 mount 到目錄 disk_test 下
經過上面的兩個命令后,鏡像文件就如同一個文件系統掛載在 disk_test 目錄下,當然我們也可以往鏡像里面添加文件。
其實上面的兩個步驟可以寫成一個步驟:
引用
mount -t minix -o loop ./disk.img ./disk_test
其中,加了 -o loop 指定后,那么也就相當于執行了第一行的 losetup 命令。做一個簡單的試驗可以證明一點,首先分開執行 losetup 和 mount 命令,那么我們看到我們可以 mount 的是 /dev/loop0 這個設備。當我們在 mount 中指定參數 -o loop 時,鏡像文件其實已和 /dev/loop1 相關聯,這里我們在掛載鏡像文件后,嘗試再執行一下 mount -t minix /dev/loop1 ./disk_test 來驗證,它會得到提示:
引用
linux-z13e:/usr/local/share/bochs/Linux011/temp # mount -t minix /dev/loop1 ./test_dir/
mount: /dev/loop1 already mounted or ./test_dir/ busy
mount: according to mtab, /dev/loop1 is already mounted on /usr/local/share/bochs/Linux011/temp/test_dir
最后,要卸載的話,就直接 umount /dev/loop0 即可。
losetup -- 設置循環設備
格式:
引用
losetup [ -e encryption ] [ -o offset ] loop_device file
losetup [ -d ] loop_device
說明:
此命令用來設置循環設備。循環設備可把文件虛擬成塊設備,籍此來模擬整個文件系統,讓用戶得以將其視為硬盤驅動器,光驅或軟驅等設備,并掛入當作目錄來使用。
上面,命令格式中的選項與參數名:
-e 表示加密的方式
-o 設置數據偏移量
-d 卸載設備
loop_device 循環設備名,在 linux 下如 /dev/loop0 , /dev/loop1 等。
file 要與循環設備相關聯的文件名,這個往往是一個磁盤鏡象文件,如 *.img