Loop設備

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

/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). 

外部連結[編輯]