Posted on 2013-04-03 19:47
鑫龍 閱讀(552)
評論(0) 編輯 收藏 引用 所屬分類:
linux基礎
回環設備(loop-back devices) ¶
回環設備( 'loopback device')允許用戶以一個普通磁盤文件虛擬一個塊設備。設想一個磁盤設備,對它的所有讀寫操作都將被重定向到讀寫一個名為 disk-image 的普通文件而非操作實際磁盤或分區的軌道和扇區。(當然,disk-image 必須存在于一個實際的磁盤上,而這個磁盤必須比虛擬的磁盤容量更大。)回環設備允許你這樣使用一個普通文件。
回環設備以 /dev/loop0、/dev/loop1 等命名。每個設備可虛擬一個塊設備。注意只有超級用戶才有權限設置回環設備。
回環設備的使用與其它任何塊設備相同。特別是,你可以在這個設備上創建文件系統并像普通的磁盤一樣將它掛載在系統中。這樣的一個將全部內容保存在一個普通文件中的文件系統,被稱為虛擬文件系統(virtual file system)(譯者注:這個用法并不常見。VFS 通常另有所指,如指代 Linux 內核中有關文件系統抽象的代碼層次等)。
可以通過下列步驟創建一個虛擬文件系統并通過回環設備掛載:
創建一個用于承載虛擬文件系統的空文件。這個文件的大小將成為掛載后文件系統的大小。
創建指定大小文件的簡單方法是通過 dd 命令。這個命令以塊為單位(通常為 512 字節)從一個文件向另一個文件復制數據。/dev/zero 文件則是一個很好的數據來源。
要建立一個 10 MB 大的名為 disk-image 的文件可以通過以下命令:
% dd if=/dev/zero of=/tmp/disk-image count=20480
20480+0 records in
20480+0 records out
% ls -l /tmp/disk-image
-rw-rw---- 1 root root 10485760 Mar 8 01:56 /tmp/disk-image
這個新建立的文件被填滿了 0 字節。在掛載之前,必須在其上建立一個文件系統。這個過程會建立許多用于組織和存儲文件的控制單元并構造根目錄結構。
在這個磁盤映像之上可以構建任何類型的文件系統。以創建 ext2 文件系統為例(ext2 是 Linux 系統中最常見的文件系統),用 mke2fs 可以完成這個操作。因為這個命令通常是針對塊設備進行操作,當對一個普通文件操作時它會要求確認:
% mke2fs -q /tmp/disk-image
mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
disk-image is not a block special device.
Proceed anyway? (y,n) y
這里 -q 參數用于省略輸出有關新建立文件系統的概要信息。如果你想看到這些信息,則請省略這個參數。
現在 disk-image 文件包含了一個新建立的文件系統,正如一個被剛剛初始化完畢的 10 MB 大小的磁盤。
以一個環回設備掛載這個文件系統。方法是使用 mount 命令,指定磁盤文件為被掛載的設備。同時指定 loop=loopback-device 作為 -o 選項的參數,告訴 mount 命令使用哪個回環設備。
下面例子中的命令可用于掛載我們的 disk-image 文件系統。要記住的是只有超級用戶可以使用環回設備。第一個命令將創建一個目錄 /tmp/virtual-fs,這個目錄將被用于掛載我們的文件系統。
% mkdir /tmp/virtual-fs
% mount -o loopback=/dev/loop0 /tmp/disk-image /tmp/virtual-fs
這時,這個設備應該已經被掛載,就如同一個普通的 10M 空間的磁盤一樣。
% df -h /tmp/virtual-fs
Filesystem Size Used Avail Use% Mounted on
/tmp/disk-image 9.7M 13k 9.2M 0% /tmp/virtual-fs
你可以向任何其它磁盤一樣使用這個設備:
% cd /tmp/virtual-fs
% echo 'Hello, world!' > test.txt
% ls -l
total 19
drwxr-xr-x 2 root root 12288 Mar 8 02:00 lost+found
-rw-rw---- 1 root root 14 Mar 8 02:12 test.txt
% cat test.txt
Hello, world!
請注意 lost+found 是一個由 mke2fs 自動建立的文件夾一旦文件系統被破壞,部分數據被回復但沒有與任何文件關聯起來,將被放置在這個文件夾中。。
結束使用后,卸載這個文件系統:
% cd /tmp
% umount /tmp/virtual-fs
你可以刪除 disk-image,或者之后再次掛載并使用其中的文件。你甚至可以將這個文件復制到遠程主機并在那里掛載、使用——文件系統的內容完全不會受到影響。
除了從新創建一個文件系統,還可以從一個現有的文件系統復制而得到一份映像。例如,可以通過普通的復制操作為一個 CD-ROM 創建一份映像。
如果系統中有一個 IDE 接口的 CD-ROM 驅動器,使用前面說過的設備名如 /dev/hda。如果 CD-ROM 是 SCSI 接口的話,設備文件名可能是 /dev/scd0 之類。系統中也可能包含一個符號鏈接 /dev/cdrom 指向實際的光驅。請參考 /etc/fstab (譯者注: 手冊)查看系統實際使用的光驅對應的設備。
接下來要做的僅僅是將這個設備復制為一個文件——得到的文件將是被存在硬盤上的、這個 CD-ROM 內容的完整映像。例如:
% cp /dev/cdrom /tmp/cdrom-image
取決于設備的速度和 CD-ROM 的容量,這個操作可能需要幾分鐘的時間。最終的文件將會相當大,它的體積與這個 CD-ROM 的容量相同。
這時,你可以在系統中掛載這個光盤而無須插入原始的 CD-ROM 盤片。要掛載在 /mnt/cdrom 目錄下:
mount -o loopback=/dev/loop0 /tmp/cdrom-image /mnt/cdrom
因為映像位于磁盤上,這個文件系統的速度將遠勝于直接掛載自實際光驅的時候。請注意多數光盤使用的文件系統類型都是 iso9660。