Tutoriel Linux

Skorzystaj z xz do kompresji pliku w systemie Linux bez utraty oryginału

Débutant6 min de lecture

Musisz skompresować obraz dysku, zrzut SQL, eksport CSV lub surową kopię zapasową przed transferem. xz zazwyczaj zmniejsza rozmiar lepiej niż gzip, ale zużywa więcej procesora i może wymagać dużo pamięci przy wysokich poziomach.

Użyj xz do pojedynczego pliku, dużego i słabo skompresowanego. Unikaj go w przypadku zdjęcia JPEG, wideo MP4, archiwum .zip, paczki .deb lub pliku, którego nazwa już kończy się na .gz, .xz lub .zst.

Kroki poniżej obejmują tworzenie archiwum .xz, zachowanie pliku źródłowego, testowanie integralności, wybór poziomu kompresji i weryfikację zdalnej kopii.

Skondensowane archiwum Linux z xz z Tuxem przed serwerem
Kompresja archiwum Linux z xz przed transferem lub przechowywaniem.

Sprawdź, czy xz jest dostępne

Większość dystrybucji instaluję xz domyślnie za pomocą pakietu xz-utils lub xz. Sprawdź polecenie zanim dodasz je do procedury tworzenia kopii zapasowej.

xz --version

Na Debianie, Ubuntu i Linux Mint, zainstaluj pakiet, jeśli polecenie jest niedostępne.

sudo apt update
sudo apt install xz-utils

Na Fedorze, AlmaLinux lub Rocky Linux zainstaluj pakiet za pomocą dnf.

sudo dnf install xz

Wybierz xz, gzip lub zip

xz kompresuje pojedynczy plik za pomocą LZMA2. Nadaje się do zrzutu SQL, eksportu tekstu, niekompresowanego obrazu dysku, skonsolidowanego pliku dziennika lub już utworzonego archiwum .tar.

  • Wybierz xz gdy oszczędność wielkości ma większe znaczenie niż prędkość.
  • Wybierz gzip gdy chcesz szybkiej kompresji w skrypcie, potoku lub rotacji dzienników.
  • Wybierz zip gdy musisz połączyć wiele plików w formacie łatwym do otwarcia w systemie Windows.
  • Wybierz tar przed xz gdy musisz zachować strukturę katalogów Linuxa z jej katalogami, nazwami i uprawnieniami.

xz sam w sobie nie łączy wielu plików. Aby skompresować folder, najpierw utwórz archiwum tar, a następnie skompresuj je za pomocą xz.

tar -cf projekt.tar projekt/
xz -k projekt.tar

Polecenie tar może także bezpośrednio utworzyć projekt.tar.xz.

tar -cJf projekt.tar.xz projekt/

Sprawdź plik przed kompresją

Sprawdź typ i rozmiar pliku przed długą kompresją. Już skompresowany plik może zająć procesor przy niemal zerowym przyroście.

file kopia_zapasowa.sql
ls -lh kopia_zapasowa.sql

Jeśli file wskazuje gzip compressed data, XZ compressed data, Zip archive data, JPEG image data lub ISO Media, przetestuj najpierw na małej próbce.

Kompresuj zachowując oryginalny plik

Bez opcji, xz kopia_zapasowa.sql zastępuje kopia_zapasowa.sql przez kopia_zapasowa.sql.xz. Dodaj -k aby zachować oryginał podczas kontroli.

xz -k kopia_zapasowa.sql

Dodaj -v aby wyświetlić postęp, stosunek i przydatne informacje podczas wykonywania.

xz -k -v kopia_zapasowa.sql

Następnie sprawdź, czy oba pliki istnieją i porównaj ich rozmiar.

ls -lh kopia_zapasowa.sql kopia_zapasowa.sql.xz

Nie usuwaj oryginału ponieważ plik .xz istnieje. Przetestuj archiwum i potwierdź przywrócenie przed usunięciem.

Wybierz poziom kompresji

Domyślny poziom xz to -6. Często daje dobry stosunek, ale nie zawsze jest odpowiedni dla mało wydajnej maszyny lub nagłej restauracji.

  • Użyj -1 do -3 gdy prędkość ma znaczenie i maksymalne oszczędności nie są priorytetowe.
  • Trzymaj -6 dla ogólnego użytku na komfortowej maszynie.
  • Zarezerwuj -7 do -9 dla dużych plików, które archiwizujesz rzadko i które również możesz dekompresować na odpowiednio wyposażonej maszynie.
xz -3 -k eksport.csv
xz -6 -k kopia_zapasowa.sql
xz -9 -k archiwum.img

Wysokie poziomy mogą zwiększać pamięć potrzebną do kompresji i dekompresji. Unikaj -9 dla archiwum, które będzie musiało być otwarte na małym VPS, starej maszynie lub minimalnym systemie zapasowym.

Ogranicz użycie CPU na serwerze

Opcja -T ustawia liczbę wątków. -T0 wykorzystuje wszystkie dostępne rdzenie, co może spowolnić bazę danych, serwer www lub aktywne kontenery.

xz -6 -T2 -k kopia_zapasowa.sql

Na maszynie produkcyjnej zacznij od -T1 lub -T2. Monitoruj obciążenie, a następnie zwiększaj tylko jeśli serwer pozostaje responsywny.

uptime
top

Dla zaplanowanej kompresji wykonaj ją poza godzinami szczytu i sprawdź wolne miejsce przed uruchomieniem. Opcja -k utrzymuje dwa pliki i wymaga więcej miejsca na dysku.

df -h .

Testuj integralność archiwum

Zawsze testuj archiwum za pomocą xz -t przed usunięciem oryginału lub zatwierdzeniem kopii zapasowej. Polecenie czyta i dekompresuje dane w pamięci bez tworzenia pliku wyjściowego.

xz -t kopia_zapasowa.sql.xz
echo $?

Kod powrotu 0 oznacza, że test xz zakończył się sukcesem. Inny kod sygnalizuje błąd i wymaga zachowania pliku źródłowego.

Następnie wyświetl metadane archiwum, aby sprawdzić nieskompresowany rozmiar, rozmiar skompresowany, stosunek i typ kontroli integralności.

xz -l kopia_zapasowa.sql.xz

xz -t sprawdza, czy archiwum może być odczytane. Nie dowodzi jednak, że zdalna kopia jest identyczna z plikiem lokalnym.

Sprawdź transfer z SHA-256

Oblicz odcisk SHA-256 przed transferem, skopiuj archiwum, a następnie ponownie oblicz odcisk na miejscu docelowym. Obie linie powinny pokazywać tę samą wartość.

sha256sum kopia_zapasowa.sql.xz
scp kopia_zapasowa.sql.xz admin@serwer:/srv/archives/
ssh admin@serwer 'sha256sum /srv/archives/kopia_zapasowa.sql.xz'

Zachowaj odcisk razem z archiwum, jeśli wysyłasz go na zewnętrzny dysk, pamięć obiektową lub inny serwer.

sha256sum kopia_zapasowa.sql.xz > kopia_zapasowa.sql.xz.sha256

Aby sprawdzić później z tego samego folderu, użyj pliku .sha256.

sha256sum -c kopia_zapasowa.sql.xz.sha256

Rozpakuj bez utraty archiwum

unxz kopia_zapasowa.sql.xz usuwa archiwum po ekstrakcji. Dodaj -k, aby zachować plik .xz, dopóki nie sprawdzisz przywróconej zawartości.

unxz -k kopia_zapasowa.sql.xz
ls -lh kopia_zapasowa.sql kopia_zapasowa.sql.xz

Ekwiwalentne polecenie z xz jest przydatne w skryptach, które już wywołują ten binarny plik.

xz -d -k kopia_zapasowa.sql.xz

Jeśli plik wyjściowy już istnieje, xz odmawia jego nadpisania bez -f. Nie wymuszaj ekstrakcji, zanim nie porównasz ścieżki, daty, rozmiaru i rzeczywistej potrzeby wymiany.

ls -lh kopia_zapasowa.sql kopia_zapasowa.sql.xz
stat kopia_zapasowa.sql

Aby zachować ostrożność, decomprymuj do osobnego folderu i porównaj uzyskany plik przed zastąpieniem pliku produkcyjnego.

mkdir -p /tmp/test-xz
cp kopia_zapasowa.sql.xz /tmp/test-xz/
cd /tmp/test-xz
unxz -k kopia_zapasowa.sql.xz
ls -lh kopia_zapasowa.sql

Odczytaj archiwum bez tworzenia pliku

Aby szybko sprawdzić skompresowany plik tekstowy, przekaż dekompresowaną zawartość do standardowego wyjścia za pomocą xzcat. Ta metoda unika pisania dużego pliku tymczasowego.

xzcat kopia_zapasowa.sql.xz | head -20

Aby szukać ciągu w skompresowanym pliku tekstowym, użyj xzgrep zamiast dekompresować całe archiwum.

xzgrep -n "CREATE TABLE" kopia_zapasowa.sql.xz

Nie używaj tych poleceń w przypadku poufnego zrzutu, jeśli Twój terminal rejestruje wyjście lub pracujesz w sesji współdzielonej.

Zalecana procedura tworzenia kopii zapasowej

  • Sprawdź typ pliku za pomocą file i jego rozmiar za pomocą ls -lh.
  • Sprawdź dostępne miejsce za pomocą df -h . przed użyciem -k.
  • Kompresuj z xz -k -v i poziomem odpowiednim dla maszyny.
  • Ogranicz wątki za pomocą -T1 lub -T2 na aktywnym serwerze.
  • Testuj archiwum za pomocą xz -t i wymagaj kodu powrotu 0.
  • Oblicz odcisk sha256sum przed i po każdym transferze.
  • Testuj ekstrakcję w osobnym folderze przed zastąpieniem ważnego pliku.

xz jest przydatne, gdy przestrzeń dyskowa lub przepustowość kosztują więcej niż czas CPU. Nie zastępuje strategii tworzenia kopii zapasowych, odcisku zachowanego z archiwum i testu przywrócenia przed incydentem.

sudo apt update && sudo apt upgrade