dev loop與裝置檔案系統

2021-06-17 22:55:19 字數 3750 閱讀 9560

摘要:在進行測試的時候,我們往往需要新建一些磁碟分割槽或者裝置等,此時對硬碟進行重新劃分往往不太方面。這種情況下,我們可以通過偽裝置來實現迴圈掛載,從而達到目的。本文主要為你講解什麼是迴圈掛載,什麼是虛擬裝置,裝置和檔案系統有什麼關係。

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

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

這種裝置檔案經常被用於光碟或是磁碟映象。通過迴圈掛載來掛載包含檔案系統的檔案,便使處在這個檔案系統中的檔案得以被訪問。這些檔案將出現在掛載點目錄。

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

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

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

在netbsd和openbsd等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"驅動程式支援唯讀壓縮和可讀寫的加密。 自從2023年夏季開始更有sunos/solaris平台的第三方驅動 "fbk"[3]

(檔案模擬塊裝置,英文:file emulates blockdevice)

mac os x實現了乙個本地的映象掛載機制並作為其隨機訪問磁碟裝置的抽象。這些裝置如同普通裝置一樣出現在 /dev 中,讀寫操作被送往乙個使用者模式的輔助程序,並由輔助程序負責讀取和寫入的操作。在使用者介面中當開啟磁碟映象的時候自動被啟用。這可以處理多種格式的碟片、cd-rom 或 *** 映象。

在microsoft windows作業系統上並不能原生支援迴圈掛載(直到windows 7,這個功能才被原生實現,並通過工具diskpart進行工作)。 [4]

然而,這項能力經常通過第三方程式得以實現,例如daemon tools

和 alcohol 120%

vmware的免費工具以及ltr data (imdisk)都可以實現類似的功能

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

用乙個迴圈裝置節點連線檔案。

在目錄上掛載該迴圈裝置

這兩個操作既可以用兩條命令來完成,也可以通過加上特殊的掛載符號的掛載命令來完成。第乙個操作可以通過如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裝置號碼

# 並執行下列命令:(代表裝置號)

umount /dev/loop

在較底層的應用程式介面中,檔案的關聯與解除關聯通過在迴圈裝置上的ioctl

系統呼叫來實現。

在類unix作業系統中,裝置檔案系統允許軟體通過標準輸入輸出系統呼叫與驅動程式互動,從而簡化了許多任務。

裝置檔案系統包括裝置檔案、裝置節點、裝置特定檔案,它們是驅動程式的介面,而在檔案系統中,它們就像是普通檔案。

塊裝置是指與系統間用塊的方式移動資料的裝置。這些裝置節點通常代表可定址裝置,如硬碟、cd-rom和記憶體區域。

塊裝置通常支援隨機訪問和定址,並使用快取器。作業系統為輸入輸出分配了快取以儲存一塊資料。當程式向裝置傳送了讀取或者寫入資料的請求時,系統把資料中的每乙個字元儲存在適當的快取中。當快取被填滿時,會採取適當的操作(把資料傳走),而後系統清空快取。

字元裝置是指每次與系統傳輸1個字元的裝置。這些裝置節點通常為傳真、虛擬終端和串列埠數據機之類裝置提供流通信服務,它通常不支援隨機訪問資料。

字元裝置在實現時,大多不使用快取器。系統直接從裝置讀取/寫入每乙個字元。

在類unix作業系統中,裝置節點並不一定要對應物理裝置。沒有這種對應關係的裝置是偽裝置。作業系統運用了它們提供的多種功能。部份經常使用到的偽裝置包括:

/dev/null

接受和丟棄所有輸入;即不產生任何輸出。

/dev/full

永遠在被填滿狀態的裝置。

/dev/loop

loop裝置

/dev/zero

產生連續的nul字元的串流(數值為0)。

/dev/random

產生乙個虛假隨機的任意長度字串流。(blocking)

/dev/urandom

產生乙個虛假隨機的任意長度字串流。(non-blocking)

6.1dd命令

dd - convert and copy a file

bs=bytes

read and write up to bytes bytes at a time

if:inputfile

of:outputfile

6.2losetup命令

losetup - set up and control loop devices

delete loop:

losetup -d loopdev...

print name of first unused loop device:

losetup -f

裝置檔案系統

一.devfs 裝置檔案系統 過時的系統 主要特點如下 1.可以通過程式在裝置初始化時在 dev目錄下建立裝置檔案,解除安裝裝置時將它刪除。2.裝置驅動程式可以指定裝置名 所有者和許可權位,使用者空間程式仍可以修改所有者和許可權位。3.不再需要為裝置驅動程式分配主裝置號以及處理次裝置號,在程式中可以...

Linux檔案系統與裝置驅動

應用程式與vfs virtual filesystem 之間的介面是系統呼叫。vfs與檔案系統及裝置檔案之間的介面是file operation 結構體成員函式。結構成員函式過多,基本上程式設計用到的有.read write open owner this module 在對file opreati...

裝置檔案系統(DevFS)

devfs裝置檔案系統是linux 2.4乙個全新的功能,它主要為了有效的管理 dev目錄而開發的。我能知道,unix linux中所有的目錄都是層次結構,唯獨 dev目錄是一維結構 沒有子目錄 這就直接影響著訪問的效率及管理的方便與否。另外,dev目錄下的節點並不是按實際需要建立的,因此,該目錄下...