Samo dd kopiuje wejście na wyjście tak jak leci. Najprostszy sposób na wykonanie tego, co potrzebujesz, to skompresowanie obrazu dysku. Nie tylko pominie puste miejsca, ale też zmniejszy objętość reszty. Służy do tego technika Unix-pipes. Zamiast do pliku, przekierowujesz wyście dd do wejścia gzip, który zapisze na dysku skompresowany plik. Nie mam w tej chwili żadnego zainstalowanego Unixa, aby podać ci dokładną składnię polecenia, ale poczytaj o dokumentację o pipe (polecenie |).
Alternatywnie, jeśli masz odpowiednią ilość miejsca, możesz zrobić to w dwóch przebiegach. Najpierw pełne dd, potem gzip.
Cytat: microsofter w Luty 21, 2021, 12:27:41 PM
Nie mam w tej chwili żadnego zainstalowanego Unixa, aby podać ci dokładną składnię polecenia...
Ja mam.
Ale przy stosowaniu tego polecenia trzeba być ostrożnym i sprawdzać dokładnie (kilka razy) wszystkie wpisane informacje i ścieżki/adresy.
Ja do robienia kopii obrazu partycji używam:
1. Kopiowanie/wykonywanie obrazu/kompresja (sda1 to przykładowa partycja na dysku):
sudo dd status=progress if=/dev/sda1 | gzip -cv >/media/dysk/nazwa-katalogu/nazwa-spakowanego-pliku-z-obrazem.gz
Legenda:
status=progress pozwala na wyświetlanie aktualnego stanu procesu kopiowania
-cv 'c' zachowuje oryginalny plik niezmieniony, 'v' wyświetla informacje czyli tryb 'verbose'
if to jest ważne, sprawdź 3 razy czy poprawnie wpisane - 'if' czyli input file
/media/dysk/nazwa-katalogu/nazwa-spakowanego-pliku-z-obrazem.gz ścieżka/adres gdzie będzie zapisywany spakowany obraz partycji
2. Przywracanie partycji/dekompresja
gunzip -cv /media/dysk/nazwa-katalogu/nazwa-spakowanego-pliku-z-obrazem.gz | sudo dd status=progress of=/dev/sda1
Tu trzeba SZCZEGÓLNĄ ostrożność zwrócić na adres docelowy partycji, gdzie będzie rozpakowywany i kopiowany obraz. W przykładzie podaję /dev/sda1 ale wystarczy zmiana jednej cyfry i można nadpisać niewłaściwą partycję.
of czyli 'output file' - dlatego przy kopiowaniu (punkt 1. powyżej) trzeba uważać, aby zamiast 'if' nie wpisać 'of'.
Ja tak robię/staram się robić kopię partycji z głównym systemem raz na miesiąc (czasem co 2 miesiące) - uruchamiam system z Live USB i korzystam z dd.
Odkąd korzystam na stałe z Linuksa (ok. 3,5 roku), tylko raz przywracałem system z takiej kopii, ale tylko dlatego, że sobie wcześniej trochę z własnej winy namieszałem w systemie i szybciej było odtworzyć, niż czyścić ręcznie.
Natomiast kopię tak czy inaczej warto mieć. W imię zasad.
Jeszcze liczby, moja partycja wyjściowa to 53,7 G, plik po kompresji ma około 27 G. Przy czym moja partycja jest zazwyczaj w 98% zapełniona (jadę na oparach na co dzień). To wynik jeśli chodzi o gzip.
Ostatnio testowałem zstd (bardzo fajny, szybki algorytm, tzw. od Facebooka, sprawdza mi się doskonale na smartfonie w Termux do pakowania dużych rzeczy, głównie instalowanych i przechowywanych Linuksów, potrafi skompresować zainstalowaną dystrybucję o więcej niż 50% - sprawdza się lepiej niż gzip czy xz - a przy tym jest znacznie szybszy przy kompresji i dekompresji), ale wielkość po spakowaniu jest podobna (ok. 27 G), a czas i tak jest zależny od tego, jak szybko dd czyta dysk.
Tak czy inaczej, jako bonus z tego mojego posta, zachęcam do przetestowania zstd (zstandard) do kompresowania plików.