Filesystems

為什麼需要一個循環設備呢?

  • October 18, 2018

我以前使用創建圖像文件,使用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
$

引用自:https://unix.stackexchange.com/questions/476048