まず使うコマンド:作成・中身の確認・解凍

project/というフォルダーを、同じ場所にあるbackup.tar.zstへ圧縮する例です。作成・一覧表示・解凍のいずれも、対応するGNU tarとzstdコマンドが必要です。

# 作成:project/は実在するフォルダー名に置き換える
tar --zstd -cf backup.tar.zst project/

# 収録ファイルの一覧を表示(展開はしない)
tar --zstd -tf backup.tar.zst

# 圧縮データの整合性を検査
zstd -t backup.tar.zst

# 新しいフォルダーへ展開
mkdir restore-check
tar --zstd -xf backup.tar.zst -C restore-check/

-cは作成、-tは一覧、-xは展開です。-fの直後にはアーカイブ名、-Cの直後には移動先のディレクトリを指定します。出力先のbackup.tar.zstは既存ファイルと重ならない名前にしてください。tarで作成すると同名のファイルは上書きされます。

tar.zstとzstの違い

tarは複数のファイルやフォルダーを一つのアーカイブにまとめます。zstdはそのデータを圧縮します。両方を組み合わせた形式が.tar.zstです。

拡張子内容展開時の考え方
.tartarアーカイブtarで収録ファイルを取り出す
.zstzstdで圧縮したデータzstdで元のデータへ戻す
.tar.zsttarアーカイブをzstdで圧縮したものzstdで展開し、tarでファイルを取り出す。対応するtarなら一つのコマンドで実行できる

単にzstd -d backup.tar.zstを実行すると、通常はbackup.tarができます。その段階ではフォルダーの取り出しは終わっていません。一方、ログを直接圧縮したapplication.log.zstなどは、tarを使わずzstdだけで展開します。拡張子を変更してもデータ形式は変わりません。

GNU tarとzstdを確認する

tar --version
zstd --version
tar --help | grep -F -- --zstd

この記事の基本操作はGNU tar 1.35・zstd 1.5.7で確認しています。macOS標準のtarやBusyBoxのtarなどは実装が異なるため、同じオプションが使えるとは限りません。--zstdが使えない場合は、後述のパイプで組み合わせる方法を検討してください。

zstdが未導入の場合は、使用しているディストリビューションのパッケージを導入します。以下は環境に合う方だけを実行する例です。

# Debian・Ubuntu系
sudo apt install zstd

# Fedora系など、dnfを使う環境
sudo dnf install zstd

フォルダーをtar.zstに圧縮する

基本はtar --zstd -cf

tar --zstd -cf backup.tar.zst project/

この例のアーカイブ内のパスはproject/から始まります。展開先ではその下にproject/が復元されます。元のフォルダーは残ります。アーカイブ自体を入力に含めないよう、出力先は圧縮対象のフォルダーの外に置きます。

絶対パスを直接指定せず、-Cで親ディレクトリへ移動してから対象を選ぶ方法もあります。次の例では/srv/project/をまとめつつ、収録パスをproject/から始めます。/srv/project/は実際の配置に置き換えてください。

tar --zstd -cf backup.tar.zst -C /srv project/

圧縮レベルとスレッド数を指定する

tar -I 'zstd -T2 -3' -cf backup-level3.tar.zst project/

GNU tarの-Iは外部の圧縮プログラムを指定します。-T2は圧縮用のワーカースレッドを2本、-3は圧縮レベル3の指定です。-T0では利用するコア数を自動判定しますが、CPUとメモリの使用量が増えるため、開発作業と併用するときは本数を絞って試します。

圧縮レベルを上げても、データによってはサイズがほとんど変わりません。まず標準設定で確認し、必要な場合に時間とサイズを比較してください。

解凍前に中身と整合性を確認する

# 収録されているパスを確認
tar --zstd -tf backup.tar.zst

# 権限・サイズなども表示
tar --zstd -tvf backup.tar.zst

# zstd圧縮データの整合性を検査
zstd -t backup.tar.zst

tarの-tはアーカイブの一覧表示、zstdの-tは圧縮データの検査です。目的が異なります。zstd -tが成功しても、必要なファイルをすべて収録できたことや、アプリケーションを復元できることまでは保証しません。

バックアップに使う場合は、新しいフォルダーへ試験復元し、必要なファイルを開けることまで確認してください。稼働中のデータベースなどは、tarでまとめるだけでは整合性のあるバックアップにならない場合があります。

指定したフォルダーへ解凍する

mkdir restore-check
tar --zstd -xf backup.tar.zst -C restore-check/

-Cで指定する展開先は、先に作成しておきます。mkdirで「File exists」と表示されたら、その場所をそのまま使わず、新しい空のフォルダー名を選んでください。同じパスのファイルがある場所へ展開すると、上書きする可能性があります。

GNU tarは通常、ファイルから読み込む場合に圧縮形式を自動認識するため、次のようにも展開できます。この記事ではzstdを使うことを明示するため、基本例に--zstdを付けています。

tar -xf backup.tar.zst -C restore-check/

必要なファイルだけを取り出す

一覧にproject/README.mdがある場合の例です。指定するのは元の環境の絶対パスではなく、tar --zstd -tfで表示されたアーカイブ内のパスです。

mkdir restore-selected
tar --zstd -xf backup.tar.zst -C restore-selected/ project/README.md
展開先を分ける:受け取ったアーカイブは内容を確認し、一般ユーザーで新しい空のフォルダーへ展開します。信頼できないアーカイブをsudoで重要なディレクトリへ直接展開しないでください。

tarが--zstdに対応しない場合

tarとzstdをパイプで接続すると、tar側の--zstdを使わずに操作できます。以下はBashの例です。pipefailを有効にすると、パイプの途中で失敗した場合も終了ステータスに反映できます。

set -o pipefail

# 作成:標準出力のtarデータをzstdへ渡す
tar -cf - project/ | zstd -T2 -3 -o backup-pipe.tar.zst

# 中身の一覧
zstd -dc backup-pipe.tar.zst | tar -tf -

# 新しい空のフォルダーへ展開
mkdir restore-pipe
zstd -dc backup-pipe.tar.zst | tar -xf - -C restore-pipe/

zstd -dcは展開したデータを標準出力へ送り、tarの-f -は標準入力から読み込みます。途中に大きな.tarファイルを作る必要がありません。シェルやtarの実装による違いは、利用環境のマニュアルで確認してください。

よくあるエラーと確認箇所

エラーの例確認すること対処
zstd: Cannot exec: No such file or directory/zstd: command not foundzstdが未導入、またはPATHにないcommand -v zstdで確認し、必要ならパッケージを導入する
unrecognized option '--zstd'tarの実装・対応オプションtar --versionとヘルプを確認し、対応版かパイプ方式を使う
Cannot open: No such file or directory入力ファイル、圧縮対象、展開先のパスpwdとlsで配置を確認。展開先は先に作成する
Not found in archive部分展開で指定したパス一覧表示で確認し、収録されている名前を指定する
unsupported format/Unexpected end of file別形式、ダウンロードの中断、破損などfile backup.tar.zstとzstd -t backup.tar.zstで確認し、配布元のチェックサムと照合・再取得する
No space left on device展開先の空き容量とinodedf -h restore-check/とdf -i restore-check/で確認する

エラーの表現はバージョンや言語設定で変わります。失敗した作成物や途中まで展開されたファイルを、正常なバックアップとして扱わないでください。原因を確認してから、新しい出力名・展開先でやり直します。

容量不足の調査は、df・du・lsblkでLinuxのディスク容量を確認する方法で説明しています。

xzとzstdのサイズや処理時間の違いは、圧縮率・速度・メモリ使用量の実測比較も参考にしてください。

参考資料

著者について

intrajp。Linux、クラウドインフラ、Kubernetesなどの技術情報を発信しています。この記事では、tar.zstの作成だけでなく、内容確認と試験復元までを一連の手順として整理しています。

運営者情報と記事の方針を見る