Czy mogę użyć dd, aby sklonować większą kartę SD na mniejszą kartę SD, jeśli rzeczywiste partycje będą pasować?

9

Mam kartę SD 16 GB, która ma kilka partycji (tak naprawdę jest to karta dla Raspberry Pi). Mam kilka innych kart 4 GB, na które chcę sklonować kartę podstawową. 3 partycje na karcie podstawowej to:

  • Partycja rozruchowa Rasp, FAT, 60 MB
  • Partycja Linux, ext2, 1 GB
  • Dodatkowa partycja „Storage”, FAT, 1 GB

Jeśli ddutworzę obraz karty za pomocą:

dd if=/dev/sdb of=~/sd-card.bin

wynikowy .bin ma rozmiar 16 GB. Czy istnieje sposób na ddskopiowanie tylko tego, co faktycznie jest używane, tj. <4 GB, aby móc to zrobić ddna nowej karcie 4 GB? Czy jest lepsze rozwiązanie, którego powinienem użyć?

Charlie Schliesser
źródło
Ostatecznie stworzyłem dokładną zawartość na nowej karcie 4 GB i sklonowałem ją dddo wielu innych kart. Chciałbym jednak wiedzieć, czy możliwe jest rozwiązanie początkowego problemu.

Odpowiedzi:

9

Zakładam, że używasz komputera PC z systemem Linux lub Mac do wykonania kopii, a nie samego Raspberry Pi. Prawdopodobnie będziesz musiał dodać rozmiar bloku.

Widziałem jeden i cztery megabajty używane na dyskach Raspberry pi, podając bs = 1M lub bs = 4M. Myślę, że rozmiar bloku jest ważniejszy przy zapisywaniu dysku, ponieważ duże transfery są szybsze niż mniejsze. Nie ustawia to rozmiaru bloku dla dysku, tylko wpływa na rozmiar transferów, których używa dd. Jednym z powodów ustawienia dużego rozmiaru bloku jest konieczność usunięcia lampy błyskowej przed jej zapisaniem. Odbywa się to automatycznie, ale szybciej w przypadku przelewów większych niż minimalny rozmiar wymazywania.

Możesz ograniczyć całkowitą ilość danych kopiowanych przez dd używając „count”. „count” jest w jednostkach bloków. Jeśli koniec ostatniej partycji na dysku źródłowym jest wcześniejszy niż rozmiar miejsca docelowego, możesz zrobić, co chcesz.

Coś takiego dd if=/dev/sdb of=~/sd-card.bin bs=1M count=4000utworzy obraz o wielkości 4000 MB.

Więcej informacji na stronie http://en.wikipedia.org/wiki/Dd_(Unix) i http://elinux.org/RPi_Easy_SD_Card_Setup . Nie wiesz, jak znaleźć koniec ostatniej partycji lub całkowity rozmiar kart. Jednak jeśli sformatowałeś dyski, prawdopodobnie będziesz wiedział, jak to zrobić.

William J. Bagshaw
źródło
Dzięki za informację. Nie wiedziałem o opcji zliczania. Spróbuję.
@charlie byłoby fascynujące, jeśli możesz spróbować z opcją liczenia i bez niej, i zgłoś się. koniecznie sprawdź, w jaki sposób raportowany jest rozmiar dysku, i czy możesz do niego dodać pliki, a rozmiar się zmieni. bo gdy dd zawiedzie związane z dyskami o różnych rozmiarach, masz tego rodzaju problemy. Oto przykład, w którym popsułem dd z dwoma dyskami o różnych rozmiarach. superuser.com/questions/538583/difficulty-resizing-a-partition Ostatecznie nie użyłem dd do wykonania klonowania.
barlop
3

Rozwijając odpowiedź Williama , można obliczyć koniec ostatniej partycji za pomocą fdiski kalkulatora:

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 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: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

Łącznie zużyte miejsce w bajtach = końcowy sektor wielkości sektora ostatniej partycji X (tutaj 3667967 x 512).

Całkowite wykorzystane miejsce w GB = całkowite wykorzystane miejsce w bajtach / 1024 3 (tutaj to 1,749023 GB).

Zwykle nie jest konieczne tworzenie obrazu, który jest sprowadzany do ostatniego użytecznego bitu danych, więc w powyższym przykładzie utworzę obraz o wielkości 2 GB przy użyciu metody opisanej przez Williama w tej samej wcześniejszej odpowiedzi :

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

Na końcu obrazu pojawi się niewielka część bezużytecznego guffa po twoich ostatnich przydatnych danych, ale zasadniczo nie różni się to od bezużytecznego guffa, który zostanie nadpisany, gdy ponownie zapiszesz obraz na nośniku.

Ta metoda działa dla mnie na kilkunastu klonach. Jeśli w tej metodzie są jakieś fatalne wady, jeszcze się nie ujawniły.

Crumeniferus
źródło