[HOWTO] Klonowanie karty SD - z systemem ! / test zapis - odczyt

Awatar użytkownika
kobrawerde
Gibki Gibbon
Gibki Gibbon
Posty: 2030
Rejestracja: 10 wrz 2006, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 22.04
Środowisko graficzne: Cinnamon
Architektura: x86_64
Kontakt:

[HOWTO] Klonowanie karty SD - z systemem ! / test zapis - odczyt

Post autor: kobrawerde »

Jeśli chcemy wykonać poprawną kopię zapasową / klona karty SD/HC (mini) .... zwłaszcza z zainstalowanym na w/w jakimś systemem np. Armbian / Rasbian itp. Przydatne posiadaczom: Raspberry Pi / Orange Pi / Odroid-a itd mini PC opartych na architekturze ARM.
Podaję małe HOWTO dotyczące poprawnego klonowania karty SD na systemie Linux ( Linux Mint / Debian / Ubuntu itp). Ja niestety popełnilem prozaiczny błąd co kosztowało mnie ponowną instalacją całego systemu opartego na Ubuntu.
Do klonowania korzystamy z programu dd. Po włożeniu karty mini SDHC do np. laptopa korzystając z adaptera sprawdzamy z pozycji root-a (administratora) jak system rozpoznał w/w kartę:
Moje karty :
ObrazekObrazek

Kod: Zaznacz cały

fdisk -l
np.

Kod: Zaznacz cały

Dysk /dev/sdb: 29,8 GiB, bajtów: 32010928128, sektorów: 62521344
Jednostki: sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x970f36a3

Urządzenie Rozruch Początek   Koniec  Sektory Rozmiar Id Typ
/dev/sdb1              2048 62521343 62519296   29,8G  c W95 FAT32 (LBA)
W naszym przypadku najważniejsza informacja to : /dev/sdb .... a nie /dev/sdb1 !!! jeśli się pomylimy system
niestety się nie uruchomi ( wykonamy jedynie kopię danych zawartych na karcie SD).
Klonowanie karty miniSD z systemem w moim przypadku : Armbian / Odroid-HC1:

Kod: Zaznacz cały

dd if=/dev/sdb of=/home/kris/Pulpit/odroid-HC1-ok.img status=progress
Oczywiście ścieżkę do pliku i nazwę do pliku .img podajemy własne :-)
Można także wypróbować program ddrescue

Kod: Zaznacz cały

sudo apt-get install gddrescue

Kod: Zaznacz cały

ddrescue /dev/sdb SD-card.img SD-card.log
Przywracanie obrazu na inną kartę mini SDHC ( o tej samej pojemności ... lub większej !!! ).

Kod: Zaznacz cały

dd bs=4M if=/home/kris/Pulpit/odroid-HC1-ok.img of=/dev/sdb status=progress
Oczywiście sprawdzając wcześniej jak system rozpoznał naszą kartę patrz wyżej : fdisk -l
Lub prościej np. graficzny program Etcher
Etcher - homepage
Klonowanie karty mini SDHC z zainstalowanym systemem na inną kartę ale o mniejszej pojemności ! w moim przypadku 32GB na 8GB jest nieco inne. ( musimy mieć też w systemie program gparted ) ...w skrócie polega to na zmniejszeniu wcześniej wykonanego pliku obrazu : odroid-HC1-ok.img do ( fizycznej / faktycznej ! ) wielkości naszej mniejszej karty SD. Faktyczną wielkość danej karty określimy komendą jw. : fdisk -l
np. Samsung 32 EVO nie ma 32 GB ...ale : 29,8 GiB ! a np. karta mini SDHC SanDisc Industrial 8GB class 10 ma : 7.4GiB ! a nie 8GB jak by się wydawało :-)
Instalujemy sklonowany obraz w systemie i wykonujemy następujące polecenia ( terminal / root ):

Kod: Zaznacz cały

losetup /dev/loop0 /home/kris/Pulpit/odroid-HC1-ok.img

Kod: Zaznacz cały

partprobe /dev/loop0

Kod: Zaznacz cały

gparted /dev/loop0
Uruchomi się program gparted z edycją naszego pliku obrazu :
Obrazek
Klikamy na przestrzeni : /dev/loop0p1 (prawy klik myszy) i z menu kontekstowego wybieramy : zmień rozmiar/przenieś. Za pomocą suwaka ( lub wpisując ręcznie w oknie) zmniejszmy partycję do wymaganego : 7.4GB .... jednak dla pewności zapisu (na mniejszą kartę SD) podajemy troszkę mniej np. 7.1GB zatwierdzamy bieżące okno :
Obrazek
i ponownie zatwierdzamy działania klikając na zieloną strzałkę w programie gparted (zastosuj wszystkie działania) po tym zamykamy program gparted.
Obrazek
Po tym zabiegu sprawdzamy dokonane zmiany na naszym sklonowanym obrazie komenda:

Kod: Zaznacz cały

sudo fdisk -l /home/kris/Pulpit/odroid-HC1-ok.img
wynik :

Kod: Zaznacz cały

Dysk /home/kris/Pulpit/odroid-HC1-ok.img: 29,8 GiB, bajtów: 32010928128, sektorów: 62521344
Jednostki: sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x8a28a329

Urządzenie                     Rozruch          Początek   Koniec     Sektory     Rozmiar    Id    Typ
/home/kris/Pulpit/odroid-HC1-ok.img1             8192    14888959   14880768    7,1G       83    Linux
Na razie jeszcze nasz plik obrazu dalej fizycznie na komputerze ma : 29,8 GiB musimy dokonać FIX -u aby to zmienić. Interesują nas wpisy :
jednostki sektorów - *512
i liczba Koniec : 14888959
teraz już tylko wpis :

Kod: Zaznacz cały

truncate --size=$[(14888959+1)*512] /home/kris/Pulpit/odroid-HC1-ok.img
I otrzymujemy ostatecznie zmniejszony obraz 7.1GB który teraz możemy bez problemu sklonować metodą podaną wyżej na nową kartę SDHC o mniejszej pojemności.

Dodatkowe informacje i przydatne programy :

Jeśli chcemy przetestować zakupioną kartę mini SDHC np. szybkość zapisu / odczytu / fizycznego miejsca na karcie SD ( w efekcie sprawdzić czy karta SD podaje poprawne dane z tymi przy zakupie ) można skorzystać z programu :
F3 - Fight Flash Fraud
strona domowa : https://fight-flash-fraud.readthedocs.i ... ction.html
Program posiada graficzną nakładkę F3-qt jednak ja polecam testowanie w terminalu ...bo czasami niestety graficzne gui lubi się zawiesić.
Obrazek
Instalacji nie będę opisywał bo jest na stronie domowej.
A testowanie sprowadza się do prostych wpisów w terminalu np.
test szybkości zapisu / odczytu karty SD:

Kod: Zaznacz cały

f3write /media/nazwa_użytkownika/5EBD-5C80/
f3read /media/nazwa_użytkownika/5EBD-5C80/
Oczywiście musimy podać własną ścieżkę dostępu po włożeniu karty do komputera : /media/nazwa_użytkownika/5EBD-5C80 - to tylko przykład :-)
Samsung:
odczyt
f3read /media/kris/USB
Data OK: 29.80 GB (62488704 sectors)
Data LOST: 0.00 Byte (0 sectors)
Corrupted: 0.00 Byte (0 sectors)
Slightly changed: 0.00 Byte (0 sectors)
Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 19.26 MB/s

zapis
f3write /media/kris/USB
zapis = 16.92 MB/s
Average writing speed: 16.92 MB/s

Sandisc: odczyt :19MB/s - zapis:12MB/s

Ps. dla jasności najpierw wykonujemy zapis potem odczyt :-)
..........................................
Jest jeszcze prawdziwy automat program ( skrypt ) PiShrink przeznaczony dla Raspberry Pi który wykona wszystko automatycznie. A dokładnie zmniejszy wykonany backup obrazu karty mini SDHC w postaci pliku .img do najmniejszego możliwego pliku obrazu tzn. tyle ile jest na niej zapisanych danych. Przykładowo w naszym przypadku zmniejszył plik .img o wielkości 29,8GB do 2.1GB ! .... niestety nie wiem jak się to ma do możliwości przyszłego dogrywania a co za tym idzie powiększania pojemności naszych danych ? ....np . o kolejne 2 - 3GB ?

Strona domowa programu :PiShrink

instalacja :

Kod: Zaznacz cały

wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh
chmod +x pishrink.sh
sudo mv pishrink.sh /usr/local/bin
Zmniejszenie wykonanej kopii / klonu karty mini SDHC do najmniejszego możliwego pliku obrazu.

Kod: Zaznacz cały

sudo pishrink.sh [-s] imagefile.img [newimagefile.img]
u mnie jest to :

Kod: Zaznacz cały

sudo pishrink.sh -s odroid-HC1-ok.img pomniejszony-obraz.img 
Uwaga! ...nie sprawdziłem ale wyczytałem iż jeśli użyjemy opcji -s jak w moim przypadku to plik obrazu karty SD zachowa swoją wielkość w przeciwnym razie automatycznie przy pierwszym uruchomieni dopasuje się do wielkości użytej karty SD.
...można to opcję wyłączyć w konfiguracji skryptu wpisując true:

Kod: Zaznacz cały

should_skip_autoexpand=false
W systemie Armbian wykonałem polecenia które po restarcie a dokładniej ponownym uruchomieniu systemu z opcją poweroff dopasowały automatycznie wielkość wgranego (pomniejszonego pliku obrazu) do oryginalnej wielkości danej karty miniSDHC

Ponowna inicjacja zmiany rozmiaru karty SD podczas startu systemu Armbian.
komendy wykonujemy jako zwykły user !

Kod: Zaznacz cały

sudo systemctl enable resize2fs
sudo update-rc.d resize2fs defaults
sudo poweroff
shutdown -h now
pomocna może być też komenda :

Kod: Zaznacz cały

/etc/init.d/resize2fs start
pozdro!
ODPOWIEDZ

Wróć do „Software-Inne”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 27 gości