Klonowanie karty SD za pomocą polecenia dd

48

Próbuję sklonować kartę SD, która może zawierać wiele partycji, z których część nie może rozpoznać Ubuntu. Zasadniczo chcę sklonować cały wolumin, a nie tylko partycję. Dlatego podłączam kartę SD i widzę coś takiego w przeglądarce dziennika:

kernel: [  262.025221]  sdc: sdc1 sdc2

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

Ponieważ chcę skopiować cały dysk, wykonuję:

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

Plik sdimage.img, 7,9 GB (7,944,011,776 bajtów) jest tworzony (karta SD to 8 GB). Teraz podłączam inną kartę SD i wykonuję:

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

Problem polega na tym, że drugie polecenie dd zawiesza się na pewnym etapie i nigdy się nie udaje. Po tym nie mogę ponownie uruchomić lub wyłączyć komputera i muszę tylko wyłączyć zasilanie.

Czy to jest właściwe podejście? Może istnieje inny sposób klonowania karty SD?

System operacyjny: Ubuntu 12.04 (Precise Pangolin), 32-bit.

Alex F.
źródło
Czy możesz zamontować utworzony plik IMG i sprawdzić, czy został poprawnie utworzony?
Milan Todorovic,
@MilanTodorovic - jak mogę to zrobić?
Alex F
Jeśli dobrze pamiętam: mount -o loop sdimage.img / path / to / mount. Następnie sprawdź, czy możesz poprawnie przeglądać plik IMG.
Milan Todorovic,
@MilanTodorovic: Próbowałem sudo mount -o sdimage.img / dev / mydisk i dostałem: mount: nie mogę znaleźć / dev / mydisk w / etc / fstab lub / etc / mtab Możliwe, że muszę wcześniej utworzyć wpis dev. Czy możesz to opublikować jako odpowiedź z pewnymi szczegółami? Dzięki.
Alex F,
1
nie powinieneś używać dd na zamontowanych urządzeniach. najpierw odłącz wszystkie partycje, a następnie twoje polecenie powinno działać.
ubfan1,

Odpowiedzi:

29

Nie powinieneś używać dd na zamontowanych urządzeniach. najpierw odłącz wszystkie partycje, a następnie twoje polecenie powinno działać.

ubfan1
źródło
2
dlaczego jest dla mnie odwrotnie? Mam Ubuntu 12.10, a polecenie działa tylko z
zamontowanymi
1
@Velthune Czy jesteś tego pewien? Jeśli tak, proponuję zadać własne pytanie.
Vreality
25

Włóż oryginalną kartę SD i sprawdź nazwę urządzenia (zwykle mmcblkXlub sdcX):

sudo fdisk -l

Możesz zobaczyć:

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

W moim przypadku karta SD to /dev/mmcblk0( *p1i *p2są partycjami).

Teraz musisz odmontować urządzenie:

sudo umount /dev/mmcblk0

Teraz, aby utworzyć obraz urządzenia:

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

To chwilę potrwa.

Po zakończeniu włóż pustą kartę SD. Jeśli urządzenie jest inne (USB lub inny typ czytnika kart SD), sprawdź jego nazwę i pamiętaj o odmontowaniu:

sudo fdisk -l
sudo umount /dev/mmcblk0

Zapisz obraz na urządzeniu:

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

Operacja zapisu jest znacznie wolniejsza niż wcześniej.

Alon Fleider
źródło
4
podczas kopiowania dużych ilości danych należy ustawić większy niż domyślny rozmiar bloku, w przeciwnym razie może być konieczne bardzo długie oczekiwanie. sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img bs=4M
xaedes
13

Używam narzędzia dd do klonowania pamięci USB z wieloma partycjami, oto moje polecenie:

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

notrunc - nie
obcinaj pliku wyjściowego noerror - kontynuuj po błędach odczytu

Tommyk
źródło
Czy to nie wymaga dwóch czytników kart SD?
Peter Mortensen
1
@PeterMortensen tak, tak, wielu z nas korzysta z adapterów typu 4 w 1.
Teque5,
9

dd jest w porządku, ale wolę cat /dev/sdc/ > ~/backup.iso Jeśli chcesz ponownie umieścić go na karcie SD, po prostu uruchomcat ~/backup.iso > /dev/sdc

Rzeczywistość
źródło
Oba SD mają 8 GB. cat może być użyty do zrobienia obrazu SD, ale aby zrobić kolejne SD, powinienem użyć dd, prawda?
Alex F
0

Oto kroki, które działały dla mnie w systemie Ubuntu, aby przywrócić plik obrazu ( ~/raspberrypi2.imgw moim przypadku) z powrotem na nową kartę SD (zainspirowany w dużej mierze odpowiedzią Alona powyżej):

  1. Włóż kartę micro SD przez czytnik kart.
  2. Otwórz aplikację Dyski.
  3. Szybkie formatowanie całej karty (nie określonej partycji).
  4. Zamknij dyski.
  5. Otwórz terminal i wykonaj:

    sudo fdisk -l
    

Odpowiednie wyjście (które pokazało, że nie było partycji ze względu na szybki format całej karty):

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

Ten krok zajmuje kilka dobrych minut (nawet na USB3). Pamiętaj, aby nie przerywać jej żadną operacją, która wywoła montowanie (otwieranie aplikacji Pliki lub Dyski).

Dzięki za odpowiedzi wszystkich.

BoazC
źródło