Làm cách nào để gắn một `img` được tạo bằng / bin / dd của ổ cứng?


19

Tôi đã sử dụng ddđể sao lưu đĩa 80 GB

dd if=/dev/sdb of=~/sdb.img

Bây giờ tôi cần truy cập một số tệp trên ổ đĩa đó, nhưng tôi không muốn sao chép ".img" trở lại ổ đĩa.

mount ~/sdb.img /mnt/sdbcũng không hoạt động. Nó trở lại :

mount: you must specify the filesystem type

Tôi đã cố gắng tìm loại hệ thống tập tin với file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

Có thể gắn kết sdb.img, hoặc tôi phải sử dụng ddđể khôi phục ổ đĩa?

Câu trả lời:


27

Khi bạn sử dụng ddtrên /dev/sdbthay vì /dev/sdb1hay /dev/sdb2, bạn sao chép tất cả các phân vùng từ nói ổ đĩa vào một tập tin.

Bạn phải gắn kết từng phân vùng riêng biệt.


Để gắn kết một phân vùng từ một tệp , trước tiên bạn phải tìm ra vị trí của tệp trong phân vùng đó.

Sử dụng đầu ra của bạn từ file -s sdb.imgchúng tôi tìm thấy startsectorscho mỗi phân vùng:

sdb.img: x86 khu vực khởi động; phân vùng 1 : ID = 0x12, starthead 1, startector 63 , 10233342 sector; phân vùng 2 : ID = 0xc, đang hoạt động, starthead 0, startector 10233405 , 72517410 sector; phân vùng 3 : ID = 0xc, starthead 0, startector 82750815 , 73545570 sector, code offset 0xc0

Phân vùng      Startsector
1 63
2 10.233.405
3 82750815

Để gắn kết một phân vùng duy nhất, nơi Xstartsector của là phân vùng, chạy:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

Vì vậy, để gắn kết phân vùng thứ hai , bạn sẽ phải chạy:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

sidenote: đảm bảo rằng /mnt/sdb2tồn tại trước khi bạn chạy này.

Chúc vui vẻ!


cập nhật: Trong câu trả lời, tôi giả sử rằng kích thước cung cấp cho hình ảnh của bạn là 512, vui lòng xem câu hỏi này về cách tính toán đó.


Bạn cũng có thể nhận các phần khởi động ở định dạng bảng bằng cách sử dụng file -l sdb.imgnhư được đăng trong câu trả lời cho câu hỏi của bạn: unix.stackexchange.com/questions/2668/ Lỗi
sinh viên

@student: Chỉ một sự điều chỉnh cho độc giả trong tương lai: Điều đó sẽ fdisk -lkhông xảy ra file -l.
Runium

Làm rõ thêm - bạn có thể nhận được số lượng 512 byte bằng cách thêm tùy chọn -u vào lệnh đó - vì vậyfdisk -u -l sdb.img
Aaron Mason

Nếu phiên bản của bạn fileít nói hơn theo mặc định, hãy thử thêm công -ktắc để có được loại đầu ra được hiển thị trong câu trả lời - như thế này : file -k FILENAME.img.
Christian Pietsch

7

Trên các lệnh gắn kết Linux trong câu trả lời được chấp nhận sẽ tạo ra một thiết bị lặp. Giả sử hình ảnh đĩa đầy đủ có một bảng phân vùng chính xác (mà hạt nhân của bạn có thể hiểu được), bạn có thể thích sử dụng losetup(8)trực tiếp để tiết kiệm cho bạn những rắc rối khi tính toán bù đắp. Ngoài ra, không cần thêm các công cụ như kpartxgợi ý trong một câu trả lời khác . Về cơ bản, nó sẽ làm tương tự như sau:

losetup -Prf sdb.imgsẽ liên kết thiết bị vòng lặp miễn phí đầu tiên ( -f) là readonly ( -r) với tệp hình ảnh sdb.img. Các -Plực lượng tùy chọn hạt nhân để quét các bảng phân vùng của thiết bị lặp này và sẽ tạo ra các thiết bị vòng lặp cho mỗi phân vùng.

Vì vậy, bạn có thể nhận được một cái gì đó như:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

Bây giờ bạn có thể gắn kết từng phân vùng, tất nhiên chỉ đọc, tại một điểm gắn kết mong muốn.

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

Giữ mọi thứ chỉ đọc là tùy chọn, nhưng có thể là một điều tốt để làm cho một hình ảnh sao lưu.

update: -Ptùy chọn đã được thêm vào với produc-linux-2.21 vào năm 2012. Vì vậy, nó không có sẵn tại thời điểm câu trả lời được chấp nhận được viết. Cũng lưu ý điều này và các câu trả lời khác là cụ thể cho linux. OpenBSD và NetBSD có các đĩa vnode được quản lý vnconfig(8)và FreeBSD có các đĩa bộ nhớ được quản lý bởi mdconfig(8).


2

Ngoài ra, bạn có thể sử dụng một công cụ tốt đẹp được gọi là kpartx. Từ trang người đàn ông:

kpartx - Tạo bản đồ thiết bị từ các bảng phân vùng

Điều này có nghĩa là bạn có thể tạo một "thiết bị giả", với các phân vùng thiết bị, ngay từ tệp img:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

Sau đó, bạn có thể gắn kết /dev/mapper/loop0p2, ví dụ, nếu bạn muốn phân vùng thứ hai trên hình ảnh.

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.