2009-09-14 38 views
35

Có cách nào mới/tốt hơn của loopback gắn các phân đoạn riêng lẻ từ bên trong một tệp có chứa một bảng phân vùng trên Linux không? Tôi thấy những điều sau nhưng họ có phần ngày.loopback gắn các phân vùng riêng lẻ từ bên trong một tệp có chứa một bảng phân vùng trên linux

http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-01/7183.html

http://lists.gnu.org/archive/html/grub-devel/2005-01/msg00077.html

ftp://ftp.hq.nasa.gov/pub/ig/ccd/enhanced_loopback/

+0

http://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device || http://superuser.com/questions/117136/how-can-i-mount-a-partition-from-dd-created-image-of-a-block-device-e-g-hdd-u || http://unix.stackexchange.com/questions/9099/reading-a-filesystem-from-a-whole-disk-image –

Trả lời

25

Hãy nói rằng $ IMAGE được thiết lập để đường dẫn đến tập tin hình ảnh của bạn. Bạn có thể viết một tập lệnh nhỏ bằng cách sử dụng

để lấy danh sách phân vùng bên trong hình ảnh. Và sau đó sử dụng một chuỗi các

mount -o ro,loop,offset=$OFFSET -t auto $IMAGE /media/$DEST 

đâu bù đắp được tính có nghĩa là thông tin từ fdisk (bắt đầu ngành * kích thước của một ngành theo byte) và $ DEST một tên duy nhất cho mỗi phân vùng.

Đó không phải là giải pháp trực tiếp nhưng tôi hy vọng một dấu hiệu khá tốt về cách nhận ra nó. Nếu bạn thực hiện công việc một lần, bạn đã có một số khởi đầu nhỏ đẹp cho một số bộ công cụ pháp y!

+1

Trong khi câu trả lời này hoạt động, câu trả lời kpartx gần đây thực sự tốt hơn; nó cung cấp cho bạn một lệnh duy nhất làm cho tất cả các phân vùng có sẵn. – mkj

+1

Trong khi kpartx là một công cụ tốt, nó không có sẵn trên mọi hệ thống. Một số hệ thống nhúng tôi làm việc trên không có nó nguyên bản và tôi cần phải gắn kết phân vùng của hình ảnh đĩa hoặc thậm chí phân vùng phụ của một phân vùng. – gnac

+0

ví dụ ứng dụng câu trả lời ở trên cho hình ảnh Raspibian: http://raspberrypi.stackexchange.com/a/13138/359 –

62

Bạn có thể làm như thế này , mà không gặp rắc rối nhiều:

# kpartx -v -a logging-test.img 
add map loop0p1 (251:0): 0 497664 linear /dev/loop0 2048 
add map loop0p2 (251:1): 0 66605058 linear /dev/loop0 501758 
add map loop0p5 (251:2): 0 66605056 251:1 2 
# ls /dev/mapper/ 
control loop0p1 loop0p2 loop0p5 
# mount /dev/mapper/loop0p1 /mnt/test 
# mount | grep test 
/dev/mapper/loop0p1 on /mnt/test type ext2 (rw) 
# 

Và để loại bỏ các thiết bị vòng lặp sau khi bạn đã hoàn thành:

# kpartx -v -d logging-test.img 
del devmap : loop0p2 
del devmap : loop0p1 
loop deleted : /dev/loop0 
# 
+10

Cũng nên đề cập đến d để xé thiết lập xuống. –

+1

Điểm tốt, cảm ơn! Không có hình ảnh toàn bộ đĩa bây giờ có ích để chơi mặc dù, vì vậy những người cần có thể cần phải người đàn ông kpartx :-) –

+4

Để xé nó xuống, bạn chỉ thay thế "-a" bằng "-d"; trong ví dụ ở đây sẽ là kpartx -v -d logging-test.img – mkj

35

Nếu bạn có v2.21 util-linux hoặc cao hơn, bây giờ bạn có thể làm điều này với losetup. Sử dụng (--partscan) tùy chọn -P để đọc bảng phân vùng và tạo ra các nút thiết bị cho mỗi phân vùng:

# losetup --show -f -P test.img 
/dev/loop0 

# ls /dev/loop0* 
/dev/loop0 
/dev/loop0p1 
/dev/loop0p2 

# mount /dev/loop0p1 /mnt/tmp 
+1

không hoạt động đối với tôi. sử dụng util-linux-ng 2.22.2, tôi chỉ nhận/dev/loop0 ... –

+2

Tôi đã sử dụng losetup từ util-linux 2.22.2 thành công như mô tả ở trên (gói Mageia 3 util-linux-2.22.2-5.mga3 .src.rpm). – kbulgrien

+0

Một điều tôi nhận thấy, mặc dù, là sử dụng gốc, thay vì sudo, tạo sự khác biệt cho dù nó có hoạt động hay không. – kbulgrien

3

Ok, câu hỏi này là kiếp cũ, nhưng chỉ dành riêng cho các sako của sự hoàn chỉnh: This here dường như dễ dàng hơn rất nhiều với tôi .

Trích:

rmmod loop 
modprobe loop max_part=63 
losetup -f /path/to/your/disk/image.raw 
mount /dev/loop0p1 /mnt/path 
+1

Điều này không thành công trên Ubuntu 14.04 vì mô-đun 'loop' được tích hợp nên' rmmod' không hoạt động. Cách khắc phục điều đó: http://askubuntu.com/a/673257/52975 –

5

losetup -P tự động hóa

losetup -P là phương pháp tốt nhất bắt đầu trong Ubuntu 16.04 như đã đề cập ở https://stackoverflow.com/a/15200862/895245, đây là chức năng để tự động nếu tiếp tục. Cách 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" 
) 
0

Một số tự động hơn với câu trả lời trước đó là tuyệt vời.

Để đơn giản hơn nữa nhiệm vụ (cần thiết nếu bạn làm điều đó thường xuyên), bạn có thể sử dụng tập lệnh mountimg để làm mọi thứ cho bạn.Chỉ cần có được nó từ https://github.com/AlexanderAmelkin/mountimg và sử dụng như thế này:

mountimg disk_image.img $PARTNO /mnt/mountpoint 

Bạn cũng có thể chỉ định loại hệ thống tập tin và bất kỳ bổ sung khác tùy chọn gắn kết nếu bạn thích:

mountimg disk_image.img $PARTNO /mnt/mountpoint -t vfat -o codepage=866,iocharset=utf-8 

Khi bạn đang thực hiện với phân vùng , chỉ cần umount:

umount /mnt/mountpoint 
Các vấn đề liên quan