/dev/loop(或稱vnd (vnode disk)、lofi(迴圈檔案介面))在類Unix系統中是一種偽裝置,這種裝置使得檔案可以如同塊裝置一般被訪問。

在使用之前,迴圈裝置必須與現存檔案系統上的檔案相關聯。這種關聯將提供給用戶一個應用程式介面,介面將允許檔案視為塊特殊檔案(參見裝置檔案系統)使用。因此,如果檔案中包含一個完整的檔案系統,那麼這個檔案就能如同磁碟裝置一般被掛載

這種裝置檔案經常被用於光碟或是磁碟鏡像。通過迴圈掛載來掛載包含檔案系統的檔案,便使處在這個檔案系統中的檔案得以被訪問。這些檔案將出現在掛載點目錄。如果掛載目錄中本身有檔案,這些檔案在掛載後將被禁止使用。

一個迴圈裝置或許能允許在重新導向過程中進行一些數據處理。例如,裝置可能是一個被加密檔案的解密形式。在這種情況下,與迴圈裝置相關的檔案可能是另一種偽裝置。當裝置包含加密檔案系統時,這種數據處理十分有用。如果數據處理得到支援且原檔案被加密,迴圈裝置將是此加密檔案的解密形式並且裝置可以如同普通檔案系統一般被掛載。

迴圈掛載的使用

編輯

在掛載了含有檔案系統的檔案之後,儲存於該檔案系統中的檔案不需要特殊函數的支援便可以被常規的檔案系統介面或是系統訪問。例如在應用程式中讀寫光碟鏡像檔案。

應用包括管理與編輯檔案系統鏡像以提供日後使用(尤其是CD、DVD鏡像或是安裝系統)或是在實際應用中永久隔離一些數據(例如在抽取式媒體上模擬一個更快,更方便的硬碟或封裝加密的檔案系統)。

迴圈裝置提供了在單個檔案中安裝作業系統一種便捷方法,使得安裝作業系統不必為磁碟機重新分區。

可用性

編輯

在各種作業系統中迴圈裝置的命名存在着一些混亂。各種類Unix作業系統中,功能性的迴圈裝置被以不同的名字命名。

在Linux中,裝置名按照相應裝置驅動程式的符號表項進行命名。這些裝置被叫做「loop」裝置,裝置節點通常命名為/dev/loop0, /dev/loop1之類。 靜態裝置目錄可以用makedev指令碼建立,或者動態地由裝置檔案系統(udev)設施建立。 迴圈裝置的管理介面是 losetup,這是util-linux軟件套件的一部分。

有時,迴圈裝置被錯誤地認為是迴環裝置,但是這個術語在Linux內核中是為網絡裝置保留的(參見迴環網卡)。迴圈裝置的概念和迴環裝置不同,雖然在名字上有相似的地方。

NetBSDOpenBSD等BSD所衍生的系統中,迴圈裝置被稱為「虛擬節點裝置」或「vnd」,並且裝置被置於 /dev/vnd0, /dev/rvnd0/dev/svnd0等處。在檔案系統中,使用vnconfig程式來進行組態。

FreeBSD在發行版5之前和其他BSD系統一樣遵守約定,之後迴圈裝置便被納入記憶磁碟裝置("md")。目前使用mdconfig[1]程式進行組態。

Solaris/OpenSolaris中,迴圈裝置被稱為 "迴環檔案介面" 或 lofi,[2] 位於 /dev/lofi/1等處。SunOS 擁有 lofiadm 組態程式。"lofi"驅動程式支援唯讀壓縮和可讀寫的加密。 自從1988年夏季開始更有SunOS/Solaris平台的第三方驅動 "fbk"[3] (檔案模擬塊裝置,英文:File emulates Blockdevice)

Mac OS X實現了一個原生的鏡像掛載機制並作為其隨機訪問磁碟裝置的抽象。這些裝置如同普通裝置一樣出現在 /dev 中,讀寫操作被送往一個用戶模式的輔助行程,並由輔助行程負責讀取和寫入的操作。在用戶介面中當打開磁碟鏡像的時候自動被啟用。這可以處理多種格式的盤片、CD-ROM 或 DVD 鏡像。

Microsoft Windows作業系統上並不能原生支援迴圈掛載(直到Windows 7,這個功能才被原生實現,並通過工具diskpart進行工作)。 [4] 然而,這項能力經常通過第三方程式得以實現,例如Daemon ToolsAlcohol 120% VMware頁面存檔備份,存於互聯網檔案館)的免費工具以及LTR Data頁面存檔備份,存於互聯網檔案館) (ImDisk)都可以實現類似的功能。

實例

編輯

在目錄上掛載包含檔案系統的檔案一般需要兩步:

  1. 用一個迴圈裝置節點連接檔案。
  2. 在目錄上掛載該迴圈裝置

這兩個操作既可以用兩條命令來完成,也可以通過加上特殊的掛載符號的掛載命令來完成。第一個操作可以通過如Linux平台下的losetup[5]或者是SunOS上的lofiadm[6]命令完成。

例如,如果 example.img 是一個包含檔案系統的常規檔案,並且 /home/you/dir 是 Linux用戶的目錄,超級用戶(root)或許可以通過執行如下的命令來將檔案掛載在目錄上:

losetup /dev/loop0 example.img
mount /dev/loop0 /home/you/dir

其中第二條命令將裝置掛載於目錄 /home/you/dir。執行上述陳述式的效果便是檔案被作為檔案系統掛載,檔案的內容出現在被掛載的目錄中(以被掛載的目錄作為根目錄)。

此外 mount 工具常常可以勝任整個掛載的程式:

mount -o loop example.img /home/you/dir

之後裝置便能用下列命令實現解除安裝:

umount /home/you/dir
# 或者通过诸如 mount | grep "/home/you/dir" 
# 或是 losetup -a | grep example.img 的查找找到与文件相关联的loop设备号码
# 并执行下列命令:(<N>代表设备号)
umount /dev/loop<N> 

在較底層的應用程式介面中,檔案的關聯與解除關聯通過在迴圈裝置上的ioctl 系統呼叫來實現。

參見

編輯

參照

編輯
  1. ^ mdconfig—configure and enable memory disks, FreeBSD manual page. [2011-02-01]. (原始內容存檔於2020-10-23). 
  2. ^ 存档副本. [2009-09-28]. (原始內容存檔於2010-12-30). 
  3. ^ 存档副本. [2011-02-01]. (原始內容存檔於2004-08-25). 
  4. ^ See for example: DiskPart: vdisk create select attach頁面存檔備份,存於互聯網檔案館), install and boot Windows 7 from virtual disk drive頁面存檔備份,存於互聯網檔案館) and other relative articles on this thematics.
  5. ^ losetup manual page. [2011-02-01]. (原始內容存檔於2016-03-13). 
  6. ^ lofiadm, Sun System Administration Command manual. [2011-02-01]. (原始內容存檔於2009-05-02). 

外部連結

編輯