Clonezilla - sprawniejsze wykonywanie kopii bezpieczeństwa

Wstęp

Jest wiele dobrych aplikacji uruchamianych w trybie USB Live do robienia pełnych kopii zapasowych partycji (offline) lub całych dysków.
Jedną z tych bardziej kompleksowych i zupełnie darmowych jest Clonezilla.

Osoby, które miały z tą aplikacją do czynienia mogły dojść do wniosku, że nawet tak prosta czynność jak wskazanie partycji źródłowej i miejsca docelowego dla obrazu partycji jest dosyć czasochłonna w stosunku do aplikacji, gdzie "wyklikujemy wszystko". Powodów takiego stanu rzeczy jest kilka m. in. konieczność wyboru języka, układu klawiatury, trybu pracy (początkujący/zaawansowany), wskazania rodzaju operacji do wykonania, zamontowania partycji lub zdalnej lokalizacji na kopię, wprowadzenia nazwy katalogu kopii i potwierdzania wielu pomniejszych rzeczy. Zaczyna być to uciążliwe szczególnie w momencie jeżeli wykonujemy kopię zapasową tych samych partycji częściej i z tymi samymi opcjami.

Istnieją dużo mniej złożone alternatywy np. Rescuezilla, problem jednak zaczyna się, gdy chcemy pogodzić wysoką funkcjonalność z szybkością wykonywania kopii zapasowych. Na szczęście jest na to sposób, aby bez przebudowy "filesystem.squashfs" dodać odpowiednie wpisy do menu startowego GRUB Clonezilli, które spowodują o wiele szybsze rozpoczęcie przygotowywania kopii konkretnych partycji, bez "przebijania się" za każdym razem przez te same opcje.

Przygotowanie bootowalnego pendrive z Clonezillą.

(UEFI - GPT)

  1. Pobieramy paczkę ZIP z Clonezillą:
    alternative stable (Ubuntu-based)
  2. Zmieniamy system plików na pendrive na FAT32 i go formatujemy (szybkie formatowanie)
  3. Upewniamy się, że schemat partycji na pendrive jest GPT, a nie MBR. W tym celu wciskamy Ctrl+R i wpisujemy „diskpart”, a następnie „list disk”. Na liście dysków znajdujemy naszego pendrive i sprawdzamy, czy tam gdzie jest kolumna GPT ma znak „gwiazdki - * ”. Jeżeli nie to konwersji na GPT możemy dokonać w menadżerze dysków Windows (diskmgmt.msc). Niektóre implementacje UEFI będą jeszcze wymagać, aby partycja była aktywna, to również możemy zmienić w menadżerze dysków Windows.
  4. Rozpakowujemy pobrany plik ZIP bezpośrednio na swojego pendrive.

Jeżeli wszystko wykonaliśmy poprawnie Clonezillę będzie można uruchomić np. z poziomu menu szybkiego bootownia naszego UEFI wybierając nasz pendrive z listy.

Przygotowanie skryptu BASH w celu automatyzacji procesu kopii zapasowej

UWAGA! Skrypt jest przykładowy i każdy powinien dostosować go do własnych potrzeb i rozkładu partycji w swoim komputerze.

Szczegóły dostępnych opcji znajdziecie tutaj:
https://gist.github.com/gotbletu/630478ddf5b4e6ad6abd1a8b23918830 (Goo...

Clonezilla po interaktywnym etapie konfiguracji pokazuje wszystkie parametry, które wcześniej wybraliśmy. (w rezultacie pełne polecenie)
Możemy w ten sposób spisać je sobie i zaoszczędzić czasu na sprawdzaniu jakich parametrów używaliśmy przy ręcznym robieniu kopii zapasowych.

Przykładowy pacjent:

  • DYSK PIERWSZY - Windows (/dev/sda):
    /dev/sda1 - System EFI (partycja ESP od Windows)
    /dev/sda2 - Microsoft - zarezerwowana
    /dev/sda3 - Microsoft - dane podstawowe (partycja C:)
    /dev/sda4 - Środowisko odtworzeniowe Windows
  • DYSK DRUGI - Linux (/dev/sdb):
    /dev/sdb1 - System EFI (partycja ESP od Linux)
    /dev/sdb2 - Linux - system plików (partycja ROOT od Linux)
  • DYSK TRZECI - obrazy kopii zapasowych (/dev/sdc):
    /dev/sdc1 - Linux - system plików (partycja na KOPIE ZAPASOWE)

Przejdźmy do napisania prostego skryptu, który będzie uruchamiany przez GRUBA w celu wywołania „ocs-sr” z odpowiednimi parametrami potrzebnymi do wykonania kopii zapasowej:

1. Sprawdzamy, czy skrypt jest wykonywany jako ROOT - przydatne jeżeli chcielibyśmy go wywołać wprost z poziomu shella.

#!/bin/bash

if [[ $(id -u) -ne 0 ]] ; then echo "Uruchom jako root!" ; exit 1 ; fi

2. Tworzymy instrukcję "case", która sprawdza parametr wywołania z poziomu menu GRUB uruchamiając tworzenie kopii Linux lub Windows.

opt=$1
case $opt in    
  linux)
    mount -t auto /dev/sdc1 /home/partimag && /usr/sbin/ocs-sr 
    --ocsroot "/home/partimag/LIN_KOPIA" -q2 -batch -gs -sc -z1p
    -i 1000000 -sfsck -senc -p choose saveparts 
    $(date "+%Y-%m-%d")-LIN_ARCH-img sdb1 sdb2 && 
    sudo umount /dev/sdc1
    ;;

3. Montujemy najpierw partycję na której będziemy chcieli składować obraz, w tym przypadku jest to "/dev/sdc1". Ścieżkę punktu montowania tej partycji "/home/partimag" zostawiamy bez zmian, ponieważ jest ona domyślna. Następnie wywołujemy "ocs-sr" Clonezilli z parametrem "--ocsroot", który oznacza katalog, gdzie ma być składowany obraz, w tym przypadku jest to ścieżka "/home/partimag/LIN_KOPIA".

  • Użyta lista parametrów, wyjaśnienie:
    -q2 - użycie 'partclone' do wykonania kopii (kolejność partclone>partimage>dd)
    -batch - brak konieczności potwierdzania poprzez "y", opcja odwrotna do opcji "-c"
    -gs - generowanie sumy kontrolnej SHA1 obrazu - NA KOMPUTERACH ZE SŁABYM PROCESOREM NALEŻY TEJ OPCJI UNIKAĆ!! (wydłuża znacznie proces tworzenia kopii, zależnie od wielkości obrazu)
    -sc - włącza pominięcie sprawdzania, czy obraz jest przywracalny (można ją usunąć, ale wydłuża to prawie dwukrotnie proces tworzenia kopii)
    -z1p - równoległa kompresja obrazu do formatu GZIP
    -i 1000000 - parametr OPCJONALNY podawany w megabajtach, powoduje dzielenie obrazu na mniejsze pliki po przekroczeniu zdefiniowanej wielkości pliku (jeżeli obraz jest mniejszy niż wartość podana tutaj, to ten parametr nie wpływa na nic)
    -sfsck - pomija sprawdzanie błędów partycji przez fsck (tylko systemy plików unixowe) przed zapisaniem kopii
    -senc - pomija szyfrowanie pliku/-ów kopii partycji
    -p - po zrobieniu kopii zapasowej włącza menu wyboru: wyłącz, uruchom ponownie...

Po "saveparts" można podać nazwę podkatalogu w którym będzie utworzony obraz, tutaj jest to aktualna data w formacie "rok-miesiąc-dzień-LIN_ARCH-img" Jeżeli zmieniasz nazwę na inną to musi być przynajmniej jeden zmienny składnik nazwy - tutaj jest nim data, bo w przeciwnym razie nowy obraz nadpisze starszy.

Po nazwie wyszczególnione są partycje źródłowe, których kopia ma być wykonany. Przykładowo: sdb1 sdb2
Na końcu następuje odmonowanie partycji na której była tworzona kopia.
Poniżej analogicznie, ale dla Windows:

windows)        
  mount -t auto /dev/sdc1 /home/partimag && 
  /usr/sbin/ocs-sr --ocsroot "/home/partimag/WIN10_KOPIA"
  -q2 -batch -gs -sc -z1p -i 1000000 -sfsck -senc -p 
  choose saveparts $(date "+%Y-%m-%d")-WIN10-img
  sda1 sda2 sda3 sda4 && sudo umount /dev/sdc1
   ;; 
*)
   exit 0        
   ;;
esac

Skrypt zapisujemy sobie jako np. "backup.sh" i kopiujemy bezpośrednio na pendrive.

  • Możesz go pobrać w całości tutaj z poprawnym formatowaniem.

UWAGA!
Pamiętaj, aby podmienić przynajmniej partycje źródłowe i docelową według swojego układu partycji!! Nie odpowiadam za bezmyślne przekopiowanie skryptu i ewentualną utratę danych.

Dodanie wpisów menu GRUB w pliku "grub.cfg"

Jest to ostatni etap modyfikacji, po którym będziemy mogli szybko wykonywać pełne kopie partycji do pliku/-ów obrazu.

Na pendrive przechodzimy kolejno do katalogu "boot", potem "grub".
Otwieramy plik "grub.cfg" w np. notatniku.

Odszukujemy wpis "Clonezilla live (Default settings, VGA 800x600)" i poniżej klamry zamykającej "}" wklejamy:

menuentry "Clonezilla live - KOPIA ROOT LINUX" {
search --set -f /live/vmlinuz
$linux_cmd /live/vmlinuz boot=live union=overlay username=user hostname=focal config quiet components noswap edd=on nomodeset enforcing=0 locales="pl_PL.UTF-8" keyboard-layouts=NONE ocs_live_run="sudo bash /run/live/medium/backup.sh linux" ocs_live_batch="no" vga=788 ip= net.ifnames=0 splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
$initrd_cmd /live/initrd.img
}

menuentry "Clonezilla live - KOPIA WINDOWS 10" {
search --set -f /live/vmlinuz
$linux_cmd /live/vmlinuz boot=live union=overlay username=user hostname=focal config quiet components noswap edd=on nomodeset enforcing=0 locales="pl_PL.UTF-8" keyboard-layouts=NONE ocs_live_run="sudo bash /run/live/medium/backup.sh windows" ocs_live_batch="no" vga=788 ip= net.ifnames=0 splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
$initrd_cmd /live/initrd.img
}

menuentry "Clonezilla live - KOPIA ROOT LINUX I WINDOWS 10" {
search --set -f /live/vmlinuz
$linux_cmd /live/vmlinuz boot=live union=overlay username=user hostname=focal config quiet components noswap edd=on nomodeset enforcing=0 locales="pl_PL.UTF-8" keyboard-layouts=NONE ocs_live_run="sudo bash /run/live/medium/backup.sh linux && sudo bash /run/live/medium/backup.sh windows" ocs_live_batch="no" vga=788 ip= net.ifnames=0 splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
$initrd_cmd /live/initrd.img
}

Następnie zapisujemy zmiany i gotowe. Od teraz w menu GRUB Clonezilli będzie dostępna możliwość wykonywania kopii bez konieczności interakcji.

Powyższe wpisy "menuentry" zostały stworzone na bazie domyślnego, czyli "Clonezilla live (Default settings, VGA 800x600)" dla wersji Clonezilli opartej o Ubuntu.

To co zostało zmodyfikowane to:

  • usunięte "--id live-default" z innych niż pierwszy domyślny "menuentry"
  • uzupełnione "locales=" o "pl_PL.UTF-8", aby nie pytało o język Clonezilli
  • uzupełnione "keyboard-layouts=NONE", aby nie pytało o układ klawiatury (zostawia domyślny)
  • zmienione "ocs_live_run=", aby uruchamiało skrypt backup.sh z parametrem "linux" lub "windows", albo oba, jedno po drugim.

Opcjonalnie można dodać parametry "ocs_prerun", "ocs_prerun2" itd. z poleceniem podmontowania jakiś lokalizacji zdalnych np. w celu przechowywania obrazu partycji.

Nie należy wklejać powyższych "menuentry" jeżeli pojawiła się nowa wersja Clonezilli od momentu utworzenia tego poradnika, lecz utworzyć własne w oparciu o powyższą listę elementów zmodyfikowanych.

Mam nadzieję, że tworzenie pełnych kopii offline opisywaną aplikacją stanie się dzięki temu wpisowi znacznie szybsze i wygodniejsze. ;)