ฉันจะเมานดิสก์อิมเมจได้อย่างไร?


26

ฉันมีภาพดิสก์myimage.diskที่มีตารางพาร์ทิชันและพาร์ทิชันหลัก (เช่นระบบไฟล์ FAT32) คิดว่าเป็นภาพปากกา USB

ฉันต้องการติดตั้งพาร์ทิชันหลักไปยังไดเรกทอรีท้องถิ่น ฉันรู้วิธีการเมาท์อิมเมจพาร์ติชั่นโดยใช้ลูป utils แต่ที่นี่ฉันมีอิมเมจดิสก์ ฉันเดาว่าฉันต้องติดภาพ "ข้าม" ตารางพาร์ทิชัน แต่ฉันจะทำอย่างไร


7
ดูเพิ่มเติมที่superuser.com/questions/117136/…คุณอาจต้องการใช้losetup --partscan --find --show disk.imgตามด้วยmount /dev/loop0p1 /mnt/disk
Flow

คำตอบ:


44

เครื่องมือ kpartx ทำให้ง่ายขึ้น มันสร้างอุปกรณ์ลูปใน / dev / mapper สำหรับแต่ละพาร์ติชันในภาพของคุณ จากนั้นคุณสามารถติดตั้งอุปกรณ์ลูปที่สอดคล้องกับพาร์ติชันที่คุณต้องการโดยไม่ต้องคำนวณออฟเซ็ตด้วยตนเอง

ตัวอย่างเช่นหากต้องการเมาต์พาร์ติชันแรกของอิมเมจดิสก์:

kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage

เมื่อคุณทำเสร็จแล้วให้นำอุปกรณ์ลูปออก:

umount /mnt/myimage
kpartx -d -v myimage.disk

อีกทางหนึ่งถ้าคุณมีเคอร์เนลที่ผ่านมาและส่ง loop.max_part = 63 ในการบูต (ถ้าวนรอบในตัว) หรือไป modprobe (ถ้าห่วงเป็นโมดูล) จากนั้นคุณสามารถทำได้ด้วยวิธีนี้:

losetup /dev/loop0 myimage.disk
partprobe /dev/loop0             # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage

เมื่อคุณทำลูปเสร็จแล้ว:

losetup -d /dev/loop0

1
คุณไม่จำเป็นต้องใช้-o loopข้างต้น/dev/mapper/loop0p1เป็นอุปกรณ์บล็อกอยู่แล้ว (อุปกรณ์ mapper ที่ด้านบนของอุปกรณ์ลูปคุณไม่ต้องการเลเยอร์อุปกรณ์ลูปอื่นที่ด้านบนของอุปกรณ์นั้น)
sch

2
หากคุณไม่ได้รับอุปกรณ์พาร์ทิชัน ( /dev/loop0p1อื่น ๆ ) หลังจากใช้วิ่งlosetup partprobe /dev/loop0
Vladimir Panteleev

kpartxดูเหมือนว่าจะมีการติดตั้งโดยเริ่มต้นในลินุกซ์มิ้นท์ 18
unfa

4

พบสิ่งนี้:

http://www.andremiller.net/content/mounting-hard-disk-image-including-partitions-using-linux

ซึ่งดูเหมือนว่าสิ่งที่ฉันกำลังมองหา

นี่คือส่วนสำคัญ:

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit

โดยที่ค่าออฟเซ็ตเป็นไบต์ วิธีที่แนะนำในการรับออฟเซ็ตคือการชี้ไปpartedที่รูปภาพจากนั้นหน่วย B เป็นไบต์และรับค่าเริ่มต้นจากเอาต์พุตการพิมพ์ เป็นทางเลือกสมมติว่าคุณมีพื้นที่ดิสก์ทำสิ่งที่ชัดเจน: เมื่อคุณมีออฟเซ็ตและขนาดเพียงใช้ddเพื่อแยกแต่ละพาร์ติชันเป็นไฟล์แยก


1
สำหรับการเขียนคำตอบที่ดีมากคุณช่วยอธิบายส่วนที่สำคัญที่สุดที่นี่ได้ไหม? มีลิงค์ดี แต่มีข้อมูลที่นี่จะดีที่สุด
slhck

1
นี่คือส่วนสำคัญ: mount -o loop,ro,offset=32256 hda.img /mnt/rabbitซึ่งมีค่าoffsetเป็นไบต์ วิธีที่แนะนำในการรับออฟเซ็ตคือให้ชี้ไปที่ภาพจากนั้นจึงunit Bหาไบต์และนำstartค่าจากprintเอาต์พุต เป็นทางเลือกสมมติว่าคุณมีพื้นที่ดิสก์ทำสิ่งที่ชัดเจน: เมื่อคุณมีออฟเซ็ตและขนาดเพียงใช้ddเพื่อแยกแต่ละพาร์ติชันเป็นไฟล์แยก
CVn

ใช่ขอโทษที่สั้นเกินไป ในขณะที่ไมเคิลชี้ให้เห็นถึงส่วนที่เกี่ยวข้องแน่นอนว่าmountบรรทัดนั้นมีoffsetตัวเลือก
Emiliano

2
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}

1
แม้ว่าสิ่งนี้อาจตอบคำถามได้ แต่มันจะเป็นคำตอบที่ดีกว่าถ้าคุณสามารถให้คำอธิบายได้ว่าทำไมถึงเป็นเช่นนั้น
DavidPostill

2

udisksปัจจุบันคุณสามารถลดการทำงานของคุณโดยใช้ โซลูชันจากArchWiki: udisks - อุปกรณ์เชื่อมต่อลูป

ในการเมาท์อิมเมจ ISO อย่างง่ายดายให้ใช้คำสั่งต่อไปนี้:

udisksctl loop-setup -r -f image.iso

สิ่งนี้จะสร้างอุปกรณ์ลูปและแสดงภาพ ISO พร้อมที่จะเมานต์ เมื่อยกเลิกการต่อเชื่อมอุปกรณ์ห่วงจะถูกยกเลิกโดย udev

-r มีตัวเลือกอ่านอย่างเดียว


มันน่าทึ่งมากขอบคุณสำหรับข้อมูล udisksctlบ้าวิธีนี้เป็นครั้งแรกที่ผมเคยพบว่ามีการอ้างอิงถึง
Oxwivi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.