ฉันกำลังพยายามทำตามสคริปต์ใน https://jvns.ca/blog/2021/01/27/day-47--using-device-mapper-to-manage-firecracker-images/?hmsr=joyk.com&utm_source=joyk.com&utm_medium=referral แต่ได้รับข้อผิดพลาด เพื่อวินิจฉัยความเข้าใจของฉันเกี่ยวกับตัวทำแผนที่อุปกรณ์ ฉันพยายามสร้างการส่งผ่านแบบธรรมดา แต่มันไม่ทำงาน
BASEIMAGE=สวัสดี-rootfs.ext4
LOOP=$(sudolostup --find --show --read-only $BASEIMAGE)
$ # การติดตั้งอุปกรณ์ลูปทำงานได้อย่างถูกต้อง
$ mkdir -p mnt
$ sudo เมานต์ "$LOOP" mnt
$ # พิมพ์ "แถบ" ตามที่คาดไว้สำหรับระบบไฟล์นี้
$ sudo ls mnt/รูท
> บาร์
$ sudo umount mnt
$ # ลองสร้าง passthrough ผ่าน devicemapper
$ printf "0 `sudo blockdev --getsz $LOOP` เชิงเส้น $LOOP 0" | sudo dmsetup สร้าง mybase
$ sudo mount /dev/mapper/mybase mnt
> mount: /home/od/vm1/mnt: ไม่สามารถอ่าน superblock บน /dev/mapper/mybase.
อย่างที่คุณเห็น อุปกรณ์ลูปแบ็คจะเมานต์ได้ตามปกติ แต่เมื่อผ่านดีไวซ์แมปเปอร์ ก็จะไม่สามารถอ่าน superblock ได้ในทันที
ทำไมถึงเป็นเช่นนั้น? การตั้งค่า devicemapper ควรทำการแมป 0 -> sizeof(loop device) ถึง 0 -> sizeof(loop device) บนอุปกรณ์ loop ดูเหมือนว่ามันควรจะเป็นทางผ่าน
devicemapper กำลังทำอย่างอื่นอยู่หรือไม่?