Dekompresja i montowanie obrazów Clonezilli
16.10.2018 | aktual.: 20.10.2018 02:47
Clonezilla jest otwarto źródłową, darmową i jedną z najlepszych (jeśli nie najlepszą) alternatywą dla płatnych programów do wykonywania i przywracania kopii całych pamięci masowych lub tylko ich partycji. Jest to tak naprawdę dystrybucja Linuksowa, która wykorzystuje zestaw skryptów i narzędzi takich jak np. partclone czy znany wszystkim dd. A skoro tak, to w przeciwieństwie do komercyjnych odpowiedników, sam format obrazów nie jest własnościowy i można go zamontować na dowolnej innej dystrybucji. I tegoż właśnie dotyczy ten wpis – dla większości możliwych wariantów jednak z pominięciem obrazów szyfrowanych i wieloczęściowych. Pozostaje tylko pytanie po co? Ano po to by uzyskać dostęp do danych w obrazie bez jego przywracania; zrobić łaty różnicowe; ewentualnie by taką partycję edytować, ponownie poddać obróbce i rozsiać po wszystkich stanowiskach. I choć to raczej przypadki rzadkie to budowę i składnię warto przećwiczyć w ramach kolejnej ciekawostki informatycznej i samorozwoju. ;)
Clonezilla tworzy obrazy w wybranych przez użytkownika folderach. Wewnątrz znaleźć można mnóstwo plików, z czego obrazami są tylko te zakończone na "aa" (np. "sda1.ntfs-ptcl-img.xz.aa"). Celowo unikam tutaj określenia rozszerzenie ponieważ cała nazwa pliku składa się z identyfikatorów, które determinują użyte programy.
- Na początku jest urządzenie i numer partycji (np. sda1, sdb2, sdc5 itp.). Nie ma to żadnego przełożenia na stan faktyczny w danym środowisku (poza przypadkiem przywracania, ale nie o tym jest poradnik).
- Następnie użyty program, którym wykonany został obraz. "ntfs-img" dla ntfsclone, "dd-img" dla dd, "<fs>-ptcl-img.<kompresor>" dla partclone i brak dla partimage.
- Ostatni zaś to numer wolumenu (w omawianych przypadkach będzie to zawsze pierwszy i jedyny, czyli aa).
Poradnik rozbiłem na kilka części, dla każdego programu z osobna, ponieważ każdy wymaga trochę innego podejścia. Oczywiście trzeba doinstalować niżej wymienione oprogramowanie jeśli nie masz tego w systemie (adekwatnie do potrzeb, naturalnie wszystkich nie musisz):
sudo apt install ntfsclone partclone partimage kpartx bzip2 gzip lrzip lz4 lzip lzop xz zstd
Poniżej zamieszczam składnię do wszystkich programów służących dekompresji. Jeśli gdziekolwiek dalej w tekście pojawi się magiczna fraza dekompresja, to znaczy że trzeba sobie wybrać z tabelki, adekwatnie do algorytmu którym skompresowany został obraz:
dd
Pierwszym przypadkiem jest aplikacja dd. Warto jej używać tylko w przypadku kiedy system plików jest nieznany (czyli de facto nieobsługiwany przez żaden z opisanych w dalszej części programów), zaszyfrowany nieznanym kluczem (np. na dysku twardym PS4) lub kiedy nie ma żadnego systemu plików (np. jedna z ukrytych partycji, którą tworzy Windows 10 i używa do mrocznych celów ;)).
Jeśli nie wybrałeś kompresji to już możesz montować obraz. Zamiast biczować się z mnt, wystarczy użyć kpartx, który sam rozpozna system plików i zamontuje z wymaganymi parametrami:
sudo kpartx -a *.aa
Analogicznie wygląda demontaż:
sudo kpartx -d *.aa
Jeśli skompresowałeś to można bardzo łatwo uzyskać posektorowy obraz za pomocą narzędzia cat:
cat *.aa | dekompresja > gotowe.bin
Jeśli z jakiegoś powodu chcesz zamontować partycję, która była w stanie surowym (bez systemu plików) lub żaden program go z różnych względów nie obsługuje, to możesz zamontować jako urządzenie, posługując się losetup. Rzecz jasna wówczas nie pojawi się w managerze plików, a dostęp będzie spod "/dev/loop0" (przełącznik -f odpowiada za podpięcie pod pierwszy wolny slot, więc niekoniecznie będzie to akurat loop0).
sudo losetup -f gotowe.bin
I demontaż:
sudo losetup -d /dev/loop0
partclone
Moim zdaniem najlepszy ze wszystkich choć nie bez wad (np. nie weryfikuje obrazu z NTFS).
Dla starszych wersji programu wystarczy użyć:
cat *.aa | dekompresja | partclone.restore -C -s - -o gotowe.bin
Ale powyższe na nowszych, zwróci błąd:
Starting to restore image (-) to device (gotowe.bin) device (gotowe.bin) is mounted at error exit
Dlatego dla aktualnych wersji wpisz:
cat *.aa | dekompresja | sudo partclone.restore -C -W -s - -o gotowe.bin
Podwyższone uprawnienia są obowiązkowe, inaczej wypisze takie same kalumnie jak w starszej.
Teoretycznie partclone.restore jest już przestarzałe i zastąpiło je partclone.ntfs, partclone.extfs itd.
Jeśli wykonałeś obraz za pomocą partclone, ale nie kompresowałeś to posektorowy obraz uzyskasz poprzez:
sudo partclone.restore -s *.aa -C --restore_raw_file -o gotowe.bin
Montowanie/Odmontowywanie oczywiście jak wcześniej, za pomocą kpartx:
sudo kpartx -a gotowe.bin sudo kpartx -d gotowe.bin
ntfsclone
Jeśli klonujesz partycje z systemem plików NTFS, warto rozważyć jego użycie, bowiem pozwala na weryfikację, ewentualną naprawę fs w locie, a do tego nie wymaga podwyższonych praw pracując na obrazie.
Składnia jest równie prosta (zwróć uwagę na obowiązkowy myślnik na końcu):
cat *.aa | dekompresja | ntfsclone -r -o gotowe.bin -
Jeśli wykonałeś obraz, ale go nie kompresowałeś to posektorowy uzyskasz poprzez:
ntfsclone -r *.aa -o gotowe.bin
Montowanie/Odmontowywanie również za pomocą kpartx:
sudo kpartx -a gotowe.bin sudo kpartx -d gotowe.bin
partimage
Czwartą aplikacją jest partimage. Przestarzały, zarobaczony i niewygodny. Jeśli posiadasz obraz wykonany tym programem to niestety czeka cię niemała gimnastyka.
Najpierw stwórz pusty plik o rozmiarze odpowiadającym rozmiarowi prawdziwej partycji, której jest kopią. Na przykład za pomocą dd. W moim przypadku to partycja EFS Windowsa 7, więc rozmiar jest równy 100MiB.
sudo dd if=/dev/zero of=/home/mint/gotowe.bin bs=100M count=1
Jeśli nie jesteś pewien rozmiaru, wpisz:
sudo partimage imginfo *.aa
"Partition size" wskaże wymaganą wielkość.
Następnie zamontuj ten pusty plik jako urządzenie i sprawdź który dostał slot:
sudo losetup -f gotowe.bin && lsblk
W moim przypadku będzie to loop1, ponieważ bawię się na dystrybucji typu live i loop0 okupuje SquashFS.
Kolejnym krokiem jest dekompresja obrazu (inaczej zaprotestuje przez segmentation fault lub exception bla bla bla):
cat *.aa | dekompresja > tmp.bin
Można już wklepać „przywracanie” obrazu na podpięty loop:
sudo partimage restore /dev/loop1 tmp.bin
Wciśnij F5.
Jeśli systemem plików w obrazie jest NTFS to program ostrzeże, że obsługa jest eksperymentalna. Prawdopodobnie to relikt z czasów, kiedy ntfs-3g nie był jeszcze dopracowany.
Potwierdzaj enterem.
Na koniec odepnij loop, a plik "gotowy.bin" powinien zamienić się w posektorowy obraz.
sudo losetup -d /dev/loop1