Dekompresja i montowanie obrazów Clonezilli

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