Filesystems
為什麼需要一個循環設備呢?
我以前使用創建圖像文件,使用
dd
在它們上設置文件系統,並將mkfs
它們mount
作為已安裝的分區訪問它們。後來我在網上看到很多例子都是losetup
事先在/dev
. 我不知道為什麼實際上需要一個圖像文件來充當循環設備並擁有自己的/dev
條目,而無需任何麻煩即可獲得相同的行為。**總結:**在現實生活場景中,為什麼我們需要一個
/dev/loopX
條目,而我們可以在沒有它的情況下掛載 fs 映像?循環設備有什麼用?
掛載通常必須在塊設備上完成。循環驅動程序將塊設備前端放置到您的數據文件中。
如果您沒有進行循環掛載,
losetup
那麼作業系統會在後台執行一個。例如
$ dd if=/dev/zero of=/tmp/foo bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s $ mke2fs /tmp/foo mke2fs 1.42.9 (28-Dec-2013) .... $ losetup $ mount -o loop /tmp/foo /mnt1 $ losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 1 0 /tmp/foo $ umount /mnt1 $ losetup $
losetup
如果您的文件映像中包含嵌入式分區, 您可能需要直接呼叫。例如,如果我有這張圖片:
$ fdisk -l /tmp/foo2 Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x1f25ff39 Device Boot Start End Blocks Id System /tmp/foo2p1 2048 204799 101376 83 Linux
我不能直接掛載
$ mount -o loop /tmp/foo2 /mnt1 mount: /dev/loop0 is write-protected, mounting read-only mount: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error
但是如果我使用
losetup
然後kpartx
我可以訪問分區:$ losetup -f /tmp/foo2 $ losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /tmp/foo2 $ kpartx -a /dev/loop0 $ mount /dev/mapper/loop0p1 /mnt1 $