Làm cách nào tôi có thể gắn phân vùng từ hình ảnh do dd tạo của thiết bị khối (ví dụ: HDD) trong Linux?


34

Tôi có một hình ảnh của toàn bộ đĩa được tạo bằng dd . Cấu trúc đĩa sau:

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

Hình ảnh được tạo bằng:

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

Làm thế nào tôi có thể, nếu có thể, gắn kết / dev / sda1 từ hình ảnh để tôi có thể đọc nội dung?

Đây không phải là một tùy chọn để sao chép lại ổ cứng, tôi biết cách thực hiện nếu tôi chỉ nhân bản phân vùng duy nhất. Tôi hy vọng nó vẫn có thể với hình ảnh hiện tại.



Câu trả lời:


48

Ngày nay, có một cách tốt hơn, không cần phải sử dụng offset hay kpartx nữa:

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

mount /dev/loop0p1 /mnt

để giải phóng loop0, sử dụng sau umount:

losetup -d /dev/loop0

8
Trong bản cài đặt Ubuntu 14.04 của tôi, losetup không cung cấp tùy chọn --partscan.
Máy cắt

1
@Cutter nó đã được thêm vào trong linux-linux 2.21, Ubuntu 16.04. :-)
Ciro Santilli 改造 心 心 事件

Đã sử dụng kpartxđầu tiên, gắn kết các phân vùng như thế nào /dev/mapper/loop3p1, tôi chỉ muốn chỉ ra rằng losetuptạo ra các thiết bị như thế nào /dev/loop0p1. Câu trả lời lưu ý rằng, nhưng tôi đọc nó có lẽ 10 lần. : /
Randy Syring

13

Tôi gặp phải vấn đề này ngày hôm nay và muốn cập nhật câu trả lời giống như một lời nhắc nhở cho chính mình. Thay vì tự mình tính toán bù đắp, bạn có thể sử dụng một công cụ cung cấp cho bạn các thiết bị có thể gắn kết từ hình ảnh dd: kpartx

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

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

Trong trường hợp cụ thể, nó sẽ cần một cái gì đó như

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

trong đó loop1p1 là viết tắt của phân vùng thứ nhất, loop1p2 cho phân vùng thứ hai, v.v.


6

Bạn đã có phần đầu tiên: fdisk -l để tìm phần bù bắt đầu. Lấy số đó, nhân với 512 và bạn sẽ có tùy chọn bù để gắn kết. Vì vậy, đối với sda1 trong trường hợp của bạn, 5 * 512 = 2560. Sau đó chạy mount:

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

4

Loopmounting chỉ là một phần của câu trả lời.

Hãy xem http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image để được trợ giúp về việc chỉ định phân vùng. Tôi nghĩ vòng lặp mount -o, offset = 32256 /path/to/image750.img / mnt sẽ hoạt động cho bạn. nhưng bạn thực sự nên đọc hướng dẫn đã đề cập.


phần bù có vẻ sai; tương ứng với phân vùng bắt đầu là 63 (<i> 63 * 512 = 32256 </ i>). phần bù trong câu trả lời của baumgart có vẻ đúng hơn cho tình huống này. liên kết là một tài liệu tham khảo tốt, nhưng nó sẽ là một câu trả lời tốt hơn nếu bạn dành thời gian để tóm tắt các bước hoặc lệnh cần thiết cho thủ tục này. cảm ơn!
quack quixote

1

losetup -P tự động hóa

Phương pháp được đề cập bởi https://superuser.com/a/684707/128124 (được thêm vào trong linux-linux v2.21, đã thêm Ubuntu 16.04), đây là các chức năng để tự động hóa thêm. Sử dụng:

$ 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

Nguồn:

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"
)

cấu hình vòng lặp max_part config

Phương pháp Decent trước khi sử dụng linux v2.21.

loop là một mô-đun hạt nhân, được tích hợp vào kernel trong Ubuntu 14.04.

Nếu bạn định cấu hình đúng, Linux sẽ tự động chia nhỏ các thiết bị cho bạn.

cat /sys/module/loop/parameters/max_part

cho biết có bao nhiêu loopthiết bị phân vùng có thể tạo ra.

Theo 0mặc định, trên Ubuntu 14.04, đó là lý do tại sao không có tự động chia tách xảy ra.

Để thay đổi nó, chúng ta có thể thêm:

options loop max_part=31

vào một tập tin trong /etc/modprobe, hoặc:

GRUB_CMDLINE_LINUX="loop.max_part=31"

đến /etc/default/grubvà sau đó sudo update-grub.

Cách đặt tham số mô-đun cũng được đề cập tại: https://askubfox.com/questions/51226/how-to-add-kernel-module-parameter

Sau khi khởi động lại, khi bạn làm:

sudo losetup -f --show my.img

nó gắn hình ảnh vào một /dev/loopXthiết bị và tự động gắn các phân vùng vào /dev/loopXpYthiết bị.

Vì vậy, đây là phương pháp thuận tiện nhất nếu bạn sẵn sàng khởi động lại.

Xem thêm


0

Nếu bạn có hệ thống tệp Chế độ người dùng như cầu chì, thì trong môi trường máy tính để bàn thích Gnome và đã cài đặt công cụ như gnome-đĩa-image-mount, thì nó thậm chí không cần root bằng cách nhấp chuột phải và mở bằng nó.


0

Tôi tin rằng loopmounting là câu trả lời -

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

Ở trên nên gắn kết nó dưới thư mục đó.

Điều này sẽ ngắt kết nối nó:

umount /path/to/dir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.