Posted on 2013-04-03 19:47
鑫龍 閱讀(552)
評論(0) 編輯 收藏 引用 所屬分類:
linux基礎(chǔ)
回環(huán)設(shè)備(loop-back devices) ¶
回環(huán)設(shè)備( 'loopback device')允許用戶以一個普通磁盤文件虛擬一個塊設(shè)備。設(shè)想一個磁盤設(shè)備,對它的所有讀寫操作都將被重定向到讀寫一個名為 disk-image 的普通文件而非操作實際磁盤或分區(qū)的軌道和扇區(qū)。(當(dāng)然,disk-image 必須存在于一個實際的磁盤上,而這個磁盤必須比虛擬的磁盤容量更大。)回環(huán)設(shè)備允許你這樣使用一個普通文件。
回環(huán)設(shè)備以 /dev/loop0、/dev/loop1 等命名。每個設(shè)備可虛擬一個塊設(shè)備。注意只有超級用戶才有權(quán)限設(shè)置回環(huán)設(shè)備。
回環(huán)設(shè)備的使用與其它任何塊設(shè)備相同。特別是,你可以在這個設(shè)備上創(chuàng)建文件系統(tǒng)并像普通的磁盤一樣將它掛載在系統(tǒng)中。這樣的一個將全部內(nèi)容保存在一個普通文件中的文件系統(tǒng),被稱為虛擬文件系統(tǒng)(virtual file system)(譯者注:這個用法并不常見。VFS 通常另有所指,如指代 Linux 內(nèi)核中有關(guān)文件系統(tǒng)抽象的代碼層次等)。
可以通過下列步驟創(chuàng)建一個虛擬文件系統(tǒng)并通過回環(huán)設(shè)備掛載:
創(chuàng)建一個用于承載虛擬文件系統(tǒng)的空文件。這個文件的大小將成為掛載后文件系統(tǒng)的大小。
創(chuàng)建指定大小文件的簡單方法是通過 dd 命令。這個命令以塊為單位(通常為 512 字節(jié))從一個文件向另一個文件復(fù)制數(shù)據(jù)。/dev/zero 文件則是一個很好的數(shù)據(jù)來源。
要建立一個 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 字節(jié)。在掛載之前,必須在其上建立一個文件系統(tǒng)。這個過程會建立許多用于組織和存儲文件的控制單元并構(gòu)造根目錄結(jié)構(gòu)。
在這個磁盤映像之上可以構(gòu)建任何類型的文件系統(tǒng)。以創(chuàng)建 ext2 文件系統(tǒng)為例(ext2 是 Linux 系統(tǒng)中最常見的文件系統(tǒng)),用 mke2fs 可以完成這個操作。因為這個命令通常是針對塊設(shè)備進行操作,當(dāng)對一個普通文件操作時它會要求確認(rèn):
% 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 參數(shù)用于省略輸出有關(guān)新建立文件系統(tǒng)的概要信息。如果你想看到這些信息,則請省略這個參數(shù)。
現(xiàn)在 disk-image 文件包含了一個新建立的文件系統(tǒng),正如一個被剛剛初始化完畢的 10 MB 大小的磁盤。
以一個環(huán)回設(shè)備掛載這個文件系統(tǒng)。方法是使用 mount 命令,指定磁盤文件為被掛載的設(shè)備。同時指定 loop=loopback-device 作為 -o 選項的參數(shù),告訴 mount 命令使用哪個回環(huán)設(shè)備。
下面例子中的命令可用于掛載我們的 disk-image 文件系統(tǒng)。要記住的是只有超級用戶可以使用環(huán)回設(shè)備。第一個命令將創(chuàng)建一個目錄 /tmp/virtual-fs,這個目錄將被用于掛載我們的文件系統(tǒng)。
% mkdir /tmp/virtual-fs
% mount -o loopback=/dev/loop0 /tmp/disk-image /tmp/virtual-fs
這時,這個設(shè)備應(yīng)該已經(jīng)被掛載,就如同一個普通的 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
你可以向任何其它磁盤一樣使用這個設(shè)備:
% 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 自動建立的文件夾一旦文件系統(tǒng)被破壞,部分?jǐn)?shù)據(jù)被回復(fù)但沒有與任何文件關(guān)聯(lián)起來,將被放置在這個文件夾中。。
結(jié)束使用后,卸載這個文件系統(tǒng):
% cd /tmp
% umount /tmp/virtual-fs
你可以刪除 disk-image,或者之后再次掛載并使用其中的文件。你甚至可以將這個文件復(fù)制到遠程主機并在那里掛載、使用——文件系統(tǒng)的內(nèi)容完全不會受到影響。
除了從新創(chuàng)建一個文件系統(tǒng),還可以從一個現(xiàn)有的文件系統(tǒng)復(fù)制而得到一份映像。例如,可以通過普通的復(fù)制操作為一個 CD-ROM 創(chuàng)建一份映像。
如果系統(tǒng)中有一個 IDE 接口的 CD-ROM 驅(qū)動器,使用前面說過的設(shè)備名如 /dev/hda。如果 CD-ROM 是 SCSI 接口的話,設(shè)備文件名可能是 /dev/scd0 之類。系統(tǒng)中也可能包含一個符號鏈接 /dev/cdrom 指向?qū)嶋H的光驅(qū)。請參考 /etc/fstab (譯者注: 手冊)查看系統(tǒng)實際使用的光驅(qū)對應(yīng)的設(shè)備。
接下來要做的僅僅是將這個設(shè)備復(fù)制為一個文件——得到的文件將是被存在硬盤上的、這個 CD-ROM 內(nèi)容的完整映像。例如:
% cp /dev/cdrom /tmp/cdrom-image
取決于設(shè)備的速度和 CD-ROM 的容量,這個操作可能需要幾分鐘的時間。最終的文件將會相當(dāng)大,它的體積與這個 CD-ROM 的容量相同。
這時,你可以在系統(tǒng)中掛載這個光盤而無須插入原始的 CD-ROM 盤片。要掛載在 /mnt/cdrom 目錄下:
mount -o loopback=/dev/loop0 /tmp/cdrom-image /mnt/cdrom
因為映像位于磁盤上,這個文件系統(tǒng)的速度將遠勝于直接掛載自實際光驅(qū)的時候。請注意多數(shù)光盤使用的文件系統(tǒng)類型都是 iso9660。