我們在 掛載鏡像的時候,需要用到 kernel 中的 loop device 和 鏡像中的分區 分別對應起來,就可以隨心所欲的玩耍啦。我們需要用到一個命令 losetup。
先創建一個鏡像來玩玩
dd if=/dev/zero of=test.img bs=1M count=100
分個區,
# fdisk test.img
Command (m for help): p
Disk test.img: 100 MiB, 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
Disklabel type: dos
Disk identifier: 0xfd339fe7
Device Boot Start End Sectors Size Id Type
test.img1 2048 104447 102400 50M 83 Linux
test.img2 104448 204799 100352 49M 83 Linux
要注意兩個分區的偏移地址,後面會用到,這裏的單位是 sector
先看看有沒有空閒的loopdevice ,這裏只會顯示一個,用到 loop0 之後,再查看會顯示 loop1
# losetup -f
/dev/loop0
把它綁定到一個分區
losetup -o $((2048*512)) /dev/loop0 demo_armhf_rootfs.img
losetup -o $((104448 *512)) /dev/loop1 demo_armhf_rootfs.img
然後就可以愉快的玩耍啦
mkfs.ext4 /dev/loop0
mkfs.ext4 /dev/loop1
mount /dev/loop0 tmp0
mount /dev/loop1 tmp1
umount tmp0 tmp1
別忘了最後 要釋放 loop device哦
losetup -d /dev/loop0
---------------
因爲 qcow2 的鏡像分區要用到 nbd , 比較麻煩,是不是可以先使用 raw 鏡像來分區,然後再轉化爲 qcow2呢?
說做就做,成功之後,使用qemu-system-arm 來啓動的時候總是報 下面這樣的錯誤,但是單獨 通過 loop 的方式掛載查看設備都是沒有問題的,用fsck來修復也是不行,留個疑慮吧
bad geometry: block count 4878390 exceeds size of device (2883789 blocks)