Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w wątku Administracja.
Wątki z problemami zamieszczone w dziale "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

Autor Wątek: dd wykonanie kopii dysku  (Przeczytany 312 razy)

Offline dominbdg

  • Newbie
  • *
  • Wiadomości: 20
  • Reputacja: -1
dd wykonanie kopii dysku
« dnia: Luty 20, 2021, 10:53:38 am »
Witam,

Mam taki problem, potrzebuję wykonać kopię dysku za pomocą dd ale w taki sposób żeby pomijane byłó puste miejsce na dysku.
Normalnie jak chcę wykonać obraz dysku za pomocą dd to wykonuję:
dd if=/dev/sda of=/opt/disk.img
problem polega na tym, że dysk który ma pojemność 120GB - obraz wykona się też 120GB nie ważne że na dysku jest zajęte max 30GB miejsca

Mi zależy na tym, żeby tak za pomocą dd wykonać obraz żeby plik obrazu posiadał pojemność taką jak zajęty jest dysk.
Czyli jak z dysku 120GB zajęte jest 30GB to obraz też posiada wielkość 30GB

Wyczytałem że jest od tego opcja conv=sparse ale u mnie nie za bardzo to działa

Offline microsofter

  • Full Member
  • ***
  • Wiadomości: 201
  • Reputacja: 5
Odp: dd wykonanie kopii dysku
« Odpowiedź #1 dnia: Luty 21, 2021, 12:27:41 pm »
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.

Offline Fibogacci

  • Full Member
  • ***
  • Wiadomości: 215
  • Reputacja: 9
Odp: dd wykonanie kopii dysku
« Odpowiedź #2 dnia: Luty 21, 2021, 01:26:52 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.
« Ostatnia zmiana: Luty 21, 2021, 01:56:19 pm wysłana przez Fibogacci »