tạo hình ảnh của ổ USB mà không cần phân vùng


13

Tôi có ổ USB 8GB được gắn vào hệ thống của mình, trông như thế này:

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

Vì vậy, về cơ bản phân vùng FAT của tôi là khoảng 70 MB, phân vùng ext2 khoảng 740 MB và phần còn lại của không gian (~ 7 GB) không được phân bổ. Bây giờ khi tôi gửi ổ cứng USB qua:

dd if=/dev/sdb of=myimage.img bs=1M

tệp đầu ra (myimage.img) khoảng 8GB, đây là hoạt động bình thường của dd.

Câu hỏi: Điều tôi đang tìm kiếm là cách sao chép trực tiếp ổ cứng USB của tôi mà không có dung lượng chưa phân bổ để tệp kết quả của tôi có dung lượng khoảng 1 GB không nén thay vì 8 GB. Lý do tôi hỏi là vì tệp đầu ra (myimage.img) đang được sử dụng bởi một chương trình giả lập để khởi động hình ảnh. Trình giả lập có thể xử lý các tệp 8 GB nhưng tôi không muốn lãng phí dung lượng ổ đĩa của mình.


1
Đây là một vấn đề tương tự với giải pháp thú vị: serverfault.com/q/281628/141604
tuần

Câu trả lời:


15

Nếu tôi hiểu chính xác, bạn muốn tạo một hình ảnh từ đầu đĩa đến cuối phân vùng cuối cùng.

Tham số cho ddviệc này là count=. Phân vùng cuối cùng của bạn kết thúc vào 103 và số lượng sẽ cần thêm 1 (104) và kích thước đơn vị của bạn là 8225280 byte (theo fdisk -lđầu ra). Vì vậy, bạn có thể chỉ cần sửa đổi lệnh của bạn theo cách này:

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

Tôi sẽ, tuy nhiên, đề nghị bạn chạy fdisk -u -l /dev/sdbthay thế. Các xi lanh không thực sự phù hợp trong thời đại này nữa, vì vậy bạn sẽ tốt hơn nếu bạn thấy số ngành để tránh bất kỳ lỗi làm tròn nào. Sau đó, bạn sẽ phải chạy:

dd if=/dev/sdb of=myimage.img count=...

trong đó số đếm sẽ được đặt thành số bạn nhận được fdisk -u -lở cuối phân vùng cuối cùng cộng với một , thay vì số được sử dụng là 104. Kích thước khối mặc định cho ddlà 512 byte, cũng là đơn vị fdisk -u -lsẽ sử dụng trong đầu ra.

Bảng phân vùng sao lưu của phân vùng GPT được lưu trữ ở cuối đĩa, nhưng vì bạn không sử dụng GPT nên bạn sẽ ổn.


2

Bạn chỉ cần nói với dd chỉ đọc phần ổ đĩa bạn quan tâm. Tham số bạn đang tìm kiếm là count.

Vì vậy, lấy kích thước hình trụ của bạn là 8.225.280 và nhân số lần số lượng hình trụ đang sử dụng là 103 và bạn nhận được 847.203.840 byte. Vì bạn đang sử dụng kích thước khối một megabyte, hãy chuyển đổi byte đó thành megabyte là 808.

Vì vậy, lệnh của bạn là dd if=... of=... bs=1M count=808

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.