Próbowałem:
sudo dd bs=4k if=/dev/mmcblk0 of=/media/1BAB47551C66A42B/raspbian_migs2.gz
Tworzy plik .img z 7,6 GB (rozmiar karty, ALE to, co jest na karcie, ma 700 MB).
I:
sudo dd bs=4k if=/dev/mmcblk0 | gzip > /media/1BAB47551C66A42B/raspbian_migs2.gz
tworzy plik .gz o 2,7 GB.
Oryginalny Raspbian ( Debian 7 (Wheezy)) z http://www.raspberrypi.org/downloads ma 494,44 MiB.
Z tego, co jest na karcie SD, jak mogę zrobić obraz o podobnym rozmiarze?
(Jestem na Ubuntu.)
Odpowiedzi:
W komentarzu do RooTer wspominasz, że A) zmniejszyłeś początkowy rozmiar partycji
gparted
, aledd
nadal kopiujesz całą kartę, i B), że chcesz dołączyć obie partycje do obrazu.Zagadnienie „A” jest łatwe do wyjaśnienia: nadal kopiujesz całą kartę, ponieważ właśnie o to chodzi
/dev/mmcblk0
. Poszczególne partycje są oczywiście/dev/mmcblk0p1
i/dev/mmcblk0p2
. Jest to komplikacja w numerze „B”, ale nie można po prostudd
każdej partycji i połączyć dwóch plików razem, ponieważ tabela partycji na początku/dev/mmcblk0
indeksuje początek i długość każdej partycji. Bez tego obraz będzie bezużyteczny.Możesz jednak pobrać długość każdej partycji
fdisk -l
i użyć jej do określenia niektórych parametrówdd
. Na przykład:Jednostki „Start” i „Koniec” są sektorami i zauważają, że podany jest rozmiar sektora, 512 bajtów. Dla
/dev/mmcblk0p2
, 26746879 (ostatni sektor) - 122880 (pierwszy sektor) = 26623999/2 (dla 2 sektorów na kB) / 1024 (kB na MB) / 1024 (MB na GB) = 12,69, które powiększyłem partycję używając gparted do 12 GB, więc wygląda to poprawnie (naprawdę powinienem używać 1000, a nie 1024 jako dzielnika z pamięcią, który działa do 13,31 GB, ale podejrzewam, że gpart i niektóre inne narzędzia również używają 1024).Pierwszą rzeczą, którą chcesz sprawdzić, jest to, że twoja druga partycja ma naprawdę mniejszy rozmiar, na jaki ją ustawiłeś. Następnie użyj tych liczb z
dd
; dla mnie byłoby to:Mam tam dodatkowy sektor, aby uniknąć jakiegokolwiek nieporozumienia przez jedno nieporozumienie dotyczące sposobu
dd
działania. Istnieje prosty sposób sprawdzenia, czy to zadziałało:Zauważ, że jest tu trochę rozbieżności: sektory „Start” i „End” pasują do oryginalnej tabeli partycji, ale całkowity rozmiar w górnej części statystyk to tylko 102 MB! To dlatego, że faktycznie użyłem
count=200000
jako parametru,dd
ponieważ tak naprawdę nie chciałem zawracać sobie głowy kopią 12 GB (zauważ także „ogółem 200 000 sektorów”). Tabela u dołu tego nie odzwierciedla, ponieważ fdisk pobiera swoje informacje z danych partycji skopiowanych dosłownie na początku obrazu od początku karty SD, co, jak wspomniałem w drugim akapicie, jest niezbędne utrzymać. Gdybym (właściwie) skopiował resztę, liczby byłyby kopacetyczne, a obraz byłby wykonalny.Spróbuj. :)
źródło
fdisk -l <device>
i to powinno wydrukować tabelę bez przechodzenia w tryb interaktywny.Domyślam się, że problem tkwi w kiedyś używanych sektorach, które wciąż mają w sobie brud. Po usunięciu pliku z systemu plików usuwane są tylko metadane, a nie same dane, pozostawiając w ten sposób losowe cyfry zera zamiast łatwych do kompresji bloków zera.
Proste rozwiązanie, ale wymaga przepisania całej wolnej przestrzeni na karcie. Pamiętaj, że żywotność karty SD jest ograniczona liczbą przeróbek, więc nie jest to preferowana metoda.
Bardziej zaangażowane rozwiązanie, ponieważ musisz zainstalować zeroofree na innym komputerze, który nie będzie korzystał z tej karty SD w tym czasie.
Więcej informacji można znaleźć na stronie http://intgat.tigress.co.uk/rmy/uml/index.html
Musisz pamiętać, że robiąc dd z / dev / mmcblk0 kopiujesz całe urządzenie, nawet jeśli partycje są mniejsze. Jeśli użyłeś raspi-config do rozszerzenia partycji głównej przed wykonaniem jednej z powyższych metod, wszystko będzie dobrze.
PS Jeśli nie masz nic przeciwko zmianie formatu pliku obrazu, możesz użyć partimage, który dla znanych systemów plików pomija zwolnione bloki, nawet jeśli nadal mają w sobie trochę brudu. Ponownie najlepiej jest używać partimage, gdy system plików nie jest zamontowany, aby uniknąć uszkodzenia kopii zapasowej. Prawdopodobnie mógłbyś uniknąć ponownego zamontowania go tylko do odczytu, ale pozostawiam to do uznania.
źródło
dd bs=4M if=/dev/zero of=/root/junk
Krótka odpowiedź - użyj karty SD 2 GB.
Długa odpowiedź,
dd
nie ma pojęcia, gdzie kończą się „dobre” dane, trzeba to jakoś powiedzieć.Są dwa sposoby, najłatwiejsze jest użycie karty SD o pojemności 2 GB, która automatycznie przerwie kopiowanie powyżej 2 GB i spowoduje skompresowanie 500 MB pliku, jak chcesz.
Drugi sposób, bardziej skomplikowany, dotyczy obliczenia prawidłowego rozmiaru danych z tabeli partycji i określenia tego prawidłowego rozmiaru jako parametrów do
dd
polecenia. W tym celu można użyć parametrówbs=XXX
(rozmiar bloku) icount=XXX
(liczba bloków). Na przykład możesz określićbs=10M
rozmiar bloku 10 MB (co zdecydowanie przyspieszyłoby kopiowanie znacznie szybciej niż rozmiar bloku 4k używany w poleceniach) icount=200
skopiować 10 MB * 200 = 2000 MB (2 GB). Konieczne może być dostosowanie rozmiaru i liczby bloków zgodnie ze schematem partycji karty SD .źródło
dd
określonego rozmiaru NIGDY NIGDY nie zadziała. Zakłada się, że wszystkie rzeczywiste dane w systemie plików są uporządkowane na początku urządzenia, więc jeśli masz 2 GB na partycji 8 GB, wystarczy skopiować pierwsze 2 GB. To nieprawda. Te 2 GB danych zostaną rozrzucone po całej przestrzeni, szczególnie na nowoczesnych kartach SD, które nie wykorzystują bloków dwa razy, dopóki wszystkie dostępne bloki nie zostaną użyte co najmniej raz (jest to nazywane wyrównywaniem zużycia i wydłuża żywotność karty).dd - copy and convert
nie jest odpowiednim narzędziem do wykonania żądanej pracy. Jest to narzędzie do kopiowania (i konwertowania) sektor po sektorze, które doskonale kopiuje sektory rozruchowe, formatuje urządzenia i wszelkiego rodzaju zadania niskiego poziomu. Podczas korzystaniadd
kopiujesz sektor po sektorze do obrazu, nawet jeśli nie jest on uwzględniony w strukturze systemu plików.Obrazy dostarczone przez fundację Raspberry Pi to specjalnie skompilowane obrazy ze skryptami instalacyjnymi, rozpakowywaniem plików binarnych i wstępną konfiguracją, po których i tak musisz otrzymywać aktualizacje z Internetu - co jest celowe, ale dość trudne, aby działało w ten sposób.
Jednym z popularnych rozwiązań pozwalających uniknąć kopiowania pustych sektorów jest użycie systemu kopiowania na poziomie plików - a CloneZilla jest samodzielna, można ją uruchomić z płyty CD, podobnie jak
ye olde Norton Ghost
clonezilla obsługuje systemy plików Linux (i więcej). Dlatego kopiuje tylko używane pliki i tworzy kontener tylko z tych plików. Znacząco zmniejsza rozmiar!źródło
Miałem to samo dokładne pytanie i chciałem łatwego w użyciu narzędzia. Po przeszukaniu i nie znalezieniu jednego napisałem mkimg.sh . Zarysuję proces, którego użyłem na: /raspberrypi//a/37899/32585
źródło