Tutoriel Linux

Linuxで原本を失わずにxzでファイルを圧縮する

Débutant2 min de lecture

ディスクイメージ、SQLダンプ、CSVエクスポート、または生のバックアップを転送する前に、圧縮する必要があります。 xz はgzipよりもサイズをよく削減しますが、CPUを多く消費し、高レベルの圧縮では多くのメモリを必要とする場合があります。

単一で大きく圧縮されていないファイルにはxzを使用します。JPEG画像、MP4動画、.zipアーカイブ、.debパッケージ、または既に.gz.xz、または.zstで終わるファイルには避けてください。

以下の手順では、.xzアーカイブの作成、ソースファイルの保持、整合性テスト、圧縮レベルの選択、リモートコピーの確認をカバーします。

サーバーの前に立つTuxとxzで圧縮されたLinuxアーカイブ
転送または保存の前にxzでLinuxアーカイブを圧縮する。

xzが利用可能か確認する

ほとんどのディストリビューションは、xz-utilsまたはxzパッケージを通じてxzをデフォルトでインストールします。バックアップ手順に統合する前に、コマンドを確認してください。

xz --version

Debian、Ubuntu、Linux Mintでは、コマンドが欠けている場合はパッケージをインストールしてください。

sudo apt update
sudo apt install xz-utils

Fedora、AlmaLinux、またはRocky Linuxでは、dnfを使用してパッケージをインストールします。

sudo dnf install xz

xz、gzip、またはzipを選択する

xzはLZMA2を使用して単一のファイルを圧縮します。SQLダンプ、テキストエクスポート、圧縮されていないディスクイメージ、統合ログファイル、またはすでに作成された.tarアーカイブに適しています。

  • xzはサイズの削減が速度よりも重要な場合に選択してください。
  • gzipはスクリプト、パイプライン、またはログの回転で迅速な圧縮を必要とする場合に選択してください。
  • zipは、複数のファイルをWindowsで簡単に開ける形式でまとめる必要がある場合に選択してください。
  • tarは、Linuxのディレクトリ構造、名前、およびパーミッションを保持する必要がある場合にxzの前に選択してください。

xzだけでは複数のファイルをまとめることはできません。フォルダーを圧縮するには、最初にtarアーカイブを作成し、それをxzで圧縮してください。

tar -cf projet.tar projet/
xz -k projet.tar

tarコマンドは、直接projet.tar.xzを作成することもできます。

tar -cJf projet.tar.xz projet/

圧縮前にファイルを確認する

長い圧縮作業の前に、ファイルのタイプとサイズを確認してください。すでに圧縮されたファイルは、わずかな利益のためにCPUを独占する可能性があります。

file sauvegarde.sql
ls -lh sauvegarde.sql

filegzip compressed dataXZ compressed dataZip archive dataJPEG image data、またはISO Mediaを示す場合は、最初に小さなサンプルでテストしてください。

ソースファイルを保持して圧縮する

オプションなしで、xz sauvegarde.sqlsauvegarde.sqlsauvegarde.sql.xzに置き換えます。チェックの間に元のファイルを保持するには-kを追加します。

xz -k sauvegarde.sql

-vを追加して、進行状況、比率、実行中の便利な情報を表示します。

xz -k -v sauvegarde.sql

その後、両方のファイルが存在することを確認し、サイズを比較します。

ls -lh sauvegarde.sql sauvegarde.sql.xz

.xzファイルが存在するからといって、元のファイルを削除しないでください。アーカイブをテストし、削除する前に復元を確認してください。

圧縮レベルを選択する

xzのデフォルトレベルは-6です。これは多くの場合良好な比率を提供しますが、必ずしも低性能のマシンや緊急復元に適しているわけではありません。

  • 速度が重要で、最大の利益が優先でない場合は-1から-3を使用してください。
  • 快適なマシンで一般的に使用するには-6を保持してください。
  • -7から-9は、めったにアーカイブしない大きなファイルで、十分に装備されたマシンでも解凍できるものに予約してください。
xz -3 -k export.csv
xz -6 -k sauvegarde.sql
xz -9 -k archive.img

高レベルは圧縮や解凍に必要なメモリを増やす可能性があります。小さなVPS、古いマシン、または最小限のバックアップシステムで開く必要があるアーカイブには-9を避けてください。

サーバーでのCPU使用を制限する

-Tオプションはスレッドの数を設定します。-T0は利用可能なすべてのコアを使用し、これはデータベース、Webサーバー、またはアクティブなコンテナを遅くする可能性があります。

xz -6 -T2 -k sauvegarde.sql

プロダクションマシンでは、-T1または-T2で始めてください。負荷を監視してから、サーバーが応答を保つ限りのみ増加させてください。

uptime
top

計画された圧縮の場合、ピーク時間外に実行し、開始前に空きスペースを確認してください。-kオプションは2つのファイルを保持し、より多くのディスクスペースを要求します。

df -h .

アーカイブの整合性をテストする

元のファイルを削除する前またはバックアップを確認する前に、常にxz -tでアーカイブをテストしてください。このコマンドは、出力ファイルを作成せずにメモリ内のデータを読み込んで解凍します。

xz -t sauvegarde.sql.xz
echo $?

リターンコード0は、xzテストが成功したことを示します。別のコードはエラーを示し、ソースファイルを保持する義務があります。

その後、アーカイブのメタデータを表示して、非圧縮サイズ、圧縮サイズ、比率、および整合性テストのタイプを確認してください。

xz -l sauvegarde.sql.xz

xz -tはアーカイブが読み取れることを確認します。それは遠隔地のコピーがローカルファイルと同じであることを証明しません。

SHA-256で転送を確認する

転送前にSHA-256フィンガープリントを計算し、アーカイブをコピーしてから、宛先でフィンガープリントを再計算します。両方の行が同じ値を表示する必要があります。

sha256sum sauvegarde.sql.xz
scp sauvegarde.sql.xz admin@serveur:/srv/archives/
ssh admin@serveur 'sha256sum /srv/archives/sauvegarde.sql.xz'

外部ドライブ、オブジェクトストレージ、または別のサーバーに出す場合は、フィンガープリントをアーカイブとともに保存してください。

sha256sum sauvegarde.sql.xz > sauvegarde.sql.xz.sha256

同じフォルダーから後で確認するには、.sha256ファイルを使用します。

sha256sum -c sauvegarde.sql.xz.sha256

アーカイブを失わずに解凍する

unxz sauvegarde.sql.xzは抽出後にアーカイブを削除します。内容を復元するまで.xzファイルを保持するには-kを追加します。

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

xzでの同等のコマンドは、このバイナリを既に呼び出しているスクリプトで便利です。

xz -d -k sauvegarde.sql.xz

出力ファイルが既に存在する場合、xzは-fなしで上書きを拒否します。パス、日付、サイズ、実際の置き換えの必要性を比較する前に、解凍を強制しないでください。

ls -lh sauvegarde.sql sauvegarde.sql.xz
stat sauvegarde.sql

慎重な復元のために、別のフォルダーに解凍し、ファイルを比較してから、本番ファイルを置き換えてください。

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

ファイルを作成せずにアーカイブを読む

圧縮されたテキストファイルを迅速に調査するには、xzcatで復元された内容を標準出力に送信します。この方法により、大きな一時ファイルを書くことなく済みます。

xzcat sauvegarde.sql.xz | head -20

圧縮されたテキストファイル内で文字列を検索するには、アーカイブ全体を解凍する代わりにxzgrepを使用してください。

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

これらのコマンドを機密のダンプに使用しないでください。ターミナルが出力をログに記録する場合や、共有セッションで作業している場合。

バックアップの推奨手順

  • fileでファイルのタイプを確認し、ls -lhでサイズを確認します。
  • -kを使用する前にdf -h .で空き容量を確認してください。
  • xz -k -vで、マシンに適したレベルを使用して圧縮します。
  • アクティブなサーバーでは-T1または-T2でスレッドを制限します。
  • xz -tでアーカイブをテストし、0のリターンコードを要求します。
  • 各転送の前後にsha256sumフィンガープリントを計算します。
  • 重要なファイルを置き換える前に、別のフォルダーで抽出をテストします。

xzはディスクスペースまたは帯域幅がCPU時間よりも高コストの場合に便利です。バックアップ戦略、アーカイブと共に保存されたフィンガープリント、およびインシデント前に行った復元テストの代わりにはなりません。

sudo apt update && sudo apt upgrade