ฉันจะเมาท์พาร์ติชันจากอิมเมจที่สร้างโดย dd ของอุปกรณ์บล็อก (เช่น HDD) ภายใต้ Linux ได้อย่างไร?


34

ผมมีภาพของดิสก์ทั้งหมดที่สร้างขึ้นโดยใช้DD โครงสร้างดิสก์ดังต่อไปนี้:

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

ภาพถูกสร้างขึ้นโดยใช้:

dd if=/dev/sda of=image750.img

ถ้าเป็นไปได้ฉันจะเมานต์ / dev / sda1 จากภาพเพื่อให้ฉันสามารถอ่านเนื้อหาได้อย่างไร?

ไม่ใช่ตัวเลือกในการโคลน HDD อีกครั้งฉันรู้วิธีการทำถ้าฉันได้โคลนเพียงพาร์ติชันเดียวด้วยตัวเอง ฉันหวังว่ามันจะเป็นไปได้ด้วยภาพปัจจุบัน



คำตอบ:


48

ทุกวันนี้มีวิธีที่ดีกว่าไม่จำเป็นต้องใช้ออฟเซ็ตหรือ kpartx อีกต่อไป:

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

เพื่อเพิ่ม loop0 ให้ใช้หลังจาก umount:

losetup -d /dev/loop0

8
ในการติดตั้ง Ubuntu 14.04 ของฉัน losetup ไม่ได้มีตัวเลือก --partscan
ตัด

1
@Cutter มันถูกเพิ่มใน util-linux 2.21, Ubuntu 16.04 :-)
Ciro Santilli 新疆改造中心法轮功六四事件

มีการใช้kpartxครั้งแรกที่เมาท์พาร์ทิชันเหมือน/dev/mapper/loop3p1ผมแค่อยากจะชี้ให้เห็นว่าการสร้างอุปกรณ์เช่นlosetup /dev/loop0p1คำตอบบันทึกไว้ว่า แต่ฉันอ่านมันมากกว่า 10 ครั้ง : /
Randy Syring

13

ฉันพบปัญหานี้ในวันนี้และต้องการอัพเดตคำตอบเพื่อเป็นการเตือนสำหรับตัวฉันเอง แทนที่จะคำนวณออฟเซ็ตด้วยตัวคุณเองคุณสามารถใช้เครื่องมือที่ให้อุปกรณ์ที่ติดตั้งได้จากอิมเมจ dd: kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

ในกรณีที่กำหนดมันจะต้องมีอะไรบางอย่างเช่น

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

โดยที่ loop1p1 หมายถึงพาร์ติชั่นแรก, loop1p2 สำหรับพาร์ติชั่นที่สอง, เป็นต้น


6

คุณมีส่วนแรก: fdisk -l เพื่อค้นหาจุดเริ่มต้น ใช้หมายเลขนั้นคูณด้วย 512 และคุณจะได้ตัวเลือกออฟเซ็ต ดังนั้นสำหรับ sda1 ในกรณีของคุณ 5 * 512 = 2560 จากนั้นเรียกใช้การเมานต์:

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point

4

การวนซ้ำเป็นเพียงส่วนหนึ่งของคำตอบ

ดูที่http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_imageสำหรับความช่วยเหลือในการระบุพาร์ติชัน ฉันคิดว่า mount -o loop, offset = 32256 /path/to/image750.img / mnt จะทำงานให้คุณ แต่คุณควรอ่านบทแนะนำที่กล่าวถึงจริงๆ


การชดเชยดูผิด ที่สอดคล้องกับการเริ่มพาร์ติชันที่ 63 (<i> 63 * 512 = 32256 </i>) ชดเชยในคำตอบของ Baumgart ดูเหมือนถูกต้องมากขึ้นสำหรับสถานการณ์นี้ ลิงค์เป็นการอ้างอิงที่ดี แต่มันจะเป็นคำตอบที่ดีกว่าถ้าคุณใช้เวลาในการสรุปขั้นตอนหรือคำสั่งที่จำเป็นสำหรับขั้นตอนนี้ ขอบคุณ!
ต้มตุ๋น quixote

1

losetup -P ระบบอัตโนมัติ

วิธีการที่กล่าวถึงโดยhttps://superuser.com/a/684707/128124 (เพิ่มใน util-linux v2.21, เพิ่ม Ubuntu 16.04), นี่คือฟังก์ชั่นที่จะทำให้มันอัตโนมัติยิ่งขึ้น การใช้งาน:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

ที่มา:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

โมดูลวนลูป max_part config

วิธีที่ดีก่อน util-linux v2.21

loop เป็นโมดูลเคอร์เนลสร้างขึ้นในเคอร์เนลใน Ubuntu 14.04

หากคุณกำหนดค่าถูกต้อง Linux จะแยกอุปกรณ์ให้คุณโดยอัตโนมัติ

cat /sys/module/loop/parameters/max_part

บอกว่าloopอุปกรณ์พาร์ติชั่นสามารถสร้างได้กี่ตัว

เป็น0ค่าเริ่มต้นบน Ubuntu 14.04 ซึ่งเป็นสาเหตุที่ไม่มีการแยกอัตโนมัติเกิดขึ้น

หากต้องการเปลี่ยนเราสามารถเพิ่ม:

options loop max_part=31

ไปยังไฟล์ใน/etc/modprobeหรือ:

GRUB_CMDLINE_LINUX="loop.max_part=31"

ไปแล้ว/etc/default/grubsudo update-grub

วิธีการตั้งค่าพารามิเตอร์โมดูลยังได้รับการคุ้มครองที่: https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

หลังจากรีบู๊ตเมื่อคุณ:

sudo losetup -f --show my.img

มันติดภาพไปยัง/dev/loopXอุปกรณ์และพาร์ทิชันโดยอัตโนมัติไปยัง/dev/loopXpYอุปกรณ์

ดังนั้นนี่เป็นวิธีที่สะดวกที่สุดถ้าคุณเต็มใจที่จะรีบูต

ดูสิ่งนี้ด้วย


0

หากคุณมีระบบไฟล์โหมดผู้ใช้เช่นฟิวส์จากนั้นในสภาพแวดล้อมเดสก์ทอปชอบ Gnome และมีการติดตั้งเครื่องมือเช่น gnome-disk-image-mounter จากนั้นก็ไม่ต้องรูทด้วยการคลิกขวาและเปิดด้วย


0

ฉันเชื่อว่าการวนรอบเป็นคำตอบ -

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

ข้างต้นควรติดไว้ภายใต้ไดเรกทอรีนั้น

สิ่งนี้ควรเลิกเมานท์:

umount /path/to/dir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.