Nhân bản thẻ SD bằng lệnh dd


48

Tôi đang cố gắng sao chép thẻ SD có thể chứa một số phân vùng, một số trong đó Ubuntu không thể nhận ra. Nói chung, tôi muốn sao chép toàn bộ âm lượng, không chỉ một số phân vùng. Vì vậy, tôi gắn thẻ SD và thấy một cái gì đó như thế này trong Trình xem nhật ký:

kernel: [  262.025221]  sdc: sdc1 sdc2

alex@u120432:~$ ls /dev/sdc*
/dev/sdc  /dev/sdc1  /dev/sdc2

Vì tôi muốn sao chép toàn bộ đĩa, tôi thực thi:

dd if=/dev/sdc of=sdimage.img bs=4M

Tệp sdimage.img, 7.9 GB (7.944.011.776 byte) được tạo (thẻ SD là 8 GB). Bây giờ tôi gắn một thẻ SD khác và thực hiện:

dd if=sdimage.img of=/dev/sdc bs=4M

Vấn đề là lệnh dd thứ hai bị treo trên một số giai đoạn và không bao giờ thành công. Sau này, tôi không thể khởi động lại hoặc tắt máy tính và tôi chỉ cần tắt nguồn.

Đây có phải là cách tiếp cận chính xác? Có lẽ có một cách khác để sao chép thẻ SD?

HĐH: Ubuntu 12.04 (Pangolin chính xác), 32 bit.


Bạn có thể gắn tập tin img đã tạo và xem nếu nó được tạo chính xác?
Milan Todorovic

@MilanTodorovic - Làm thế nào tôi có thể làm điều này?
Alex F

Nếu tôi nhớ chính xác: mount -o loop sdimage.img / path / to / mount. Sau đó kiểm tra xem bạn có thể duyệt tập tin img chính xác không.
Milan Todorovic

@MilanTodorovic: Tôi đã thử sudo mount -o sdimage.img / dev / mydisk và got: mount: could find / dev / mydisk in / etc / fstab hoặc / etc / mtab Có thể tôi cần tạo một số mục dev trước đó. Bạn có thể gửi bài này như câu trả lời với một số chi tiết? Cảm ơn.
Alex F

1
bạn không nên sử dụng dd trên các thiết bị được gắn. ngắt kết nối tất cả các phân vùng trước, sau đó lệnh của bạn sẽ hoạt động.
ubfan1

Câu trả lời:


29

Bạn không nên sử dụng dd trên các thiết bị được gắn. ngắt kết nối tất cả các phân vùng trước, sau đó lệnh của bạn sẽ hoạt động.


2
tại sao lại ngược lại với tôi Tôi đã có Ubuntu 12.10 và lệnh chỉ hoạt động với các phân vùng được tạo ra ...
Luca Davanzo

1
@Velthune Bạn có chắc về điều đó? Nếu vậy, tôi đề nghị làm cho câu hỏi của riêng bạn.
Vreality

25

Lắp thẻ SD gốc và kiểm tra tên của thiết bị (thường mmcblkXhoặc sdcX):

sudo fdisk -l

Bạn có thể thấy:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *       2048  2099199  2097152    1G  c W95 FAT32 (LBA)
/dev/mmcblk0p2      2099200 31116287 29017088 13.9G 83 Linux

Trong trường hợp của tôi, thẻ SD là /dev/mmcblk0( *p1*p2là các phân vùng).

Bây giờ bạn phải ngắt kết nối thiết bị:

sudo umount /dev/mmcblk0

Bây giờ để tạo một hình ảnh của thiết bị:

sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img

Việc này sẽ tốn một lúc.

Khi nó kết thúc, lắp thẻ SD trống. Nếu thiết bị khác (USB hoặc loại đầu đọc thẻ SD khác) hãy xác minh tên của thiết bị và đảm bảo ngắt kết nối thiết bị:

sudo fdisk -l
sudo umount /dev/mmcblk0

Viết hình ảnh vào thiết bị:

sudo dd if=~/sd-card-copy.img of=/dev/mmcblk0

Thao tác ghi chậm hơn nhiều so với trước đây.


4
khi sao chép một lượng lớn dữ liệu, bạn nên đặt lớn hơn kích thước khối mặc định, nếu không bạn có thể phải chờ rất lâu. sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img bs=4M
xaedes

13

Tôi đang sử dụng công cụ dd để sao chép các thanh usb với nhiều phân vùng, đây là lệnh của tôi:

sudo dd if=/dev/sdb of=/dev/sdc bs=4096 conv=notrunc,noerror

notrunc - không cắt bớt tập tin đầu ra
noerror - tiếp tục sau khi đọc lỗi


Điều này có cần hai đầu đọc thẻ SD không?
Peter Mortensen

1
@PeterMortensen đúng vậy, nhiều người trong chúng ta sử dụng các bộ điều hợp loại 4 trong 1 đó.
Teque5

9

dd vẫn ổn, nhưng tôi thích cat /dev/sdc/ > ~/backup.iso Nếu bạn muốn đặt lại vào thẻ SD, chỉ cần chạycat ~/backup.iso > /dev/sdc


Cả SD đều 8 GB. mèo có thể được sử dụng để tạo hình ảnh SD, nhưng để tạo một SD khác tôi nên sử dụng dd, phải không?
Alex F

0

Dưới đây là các bước làm việc với tôi trên Ubuntu để khôi phục tệp hình ảnh ( ~/raspberrypi2.imgtrong trường hợp của tôi) trở lại thẻ SD mới (lấy cảm hứng rất nhiều từ câu trả lời của Alon ở trên):

  1. Lắp thẻ micro SD qua đầu đọc thẻ.
  2. Mở ứng dụng Đĩa.
  3. Định dạng nhanh toàn bộ thẻ (không phải là một phân vùng cụ thể).
  4. Đóng đĩa.
  5. Mở terminal và thực thi:

    sudo fdisk -l
    

Đầu ra có liên quan (cho thấy không có phân vùng do định dạng nhanh của toàn bộ thẻ):

Disk /dev/sdb: 7.4 GiB, 7948206080 bytes, 15523840 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disklabel type: dos 
Disk identifier: 0x6957f2f2

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

Bước này mất một vài phút tốt (ngay cả trên USB3). Đảm bảo không làm gián đoạn nó bởi bất kỳ thao tác nào sẽ gọi gắn kết (mở ứng dụng Tệp hoặc Đĩa).

Cảm ơn câu trả lời của mọi người.

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.