tar -cvf
深く入れ子になったフォルダ構造の簡単にダウンロード可能なコピーを作成するために937 MBのサイズのディレクトリで実行している場合は、次の出力が表示されるとディスクがいっぱいになる危険がありますかdf -h
?
/dev/xvda1 7.9G 3.6G 4.3G 46% /
tmpfs 298M 0 298M 0% /dev/shm
関連質問:
- Linux(Amazon AMI)は、なぜディスクがいっぱいになっているか、またはディスクがいっぱいになった場合、
tar
後で何をしていますか? - 何度も何度も何度もこの情報を正確に確認できますか?
答え1
tar -c data_dir | wc -c
圧縮なし
または
tar -cz data_dir | wc -c
gzip圧縮の使用
または
tar -cj data_dir | wc -c
bzip2圧縮の使用
作成されるアーカイブのサイズ(バイト単位)は、ディスクに書き込まずに印刷されます。その後、ターゲットデバイスで使用可能なスペースの量と比較できます。
サイズの誤った仮定を防ぐために、次のコマンドを使用してデータディレクトリ自体のサイズを確認できます。
du -h --max-depth=1 data_dir
すでに答えたように、tarはアーカイブの各レコードにヘッダーを追加し、各レコードのサイズを512バイトの倍数(デフォルト)に丸めます。アーカイブの終わりは、ゼロで埋められた少なくとも2つの連続したレコードで表されます。したがって、圧縮されていないtarファイルは常にファイル自体よりも大きく、ファイル数と512バイト境界の並べ替えによって使用される追加スペースが決まります。
もちろん、ファイルシステム自体で使用されるブロックサイズは単一のファイルの内容より大きくなる可能性があるため、ファイルを解凍するときは注意してください。ファイルシステムは、空き領域があっても大量の小さなファイルを収容できない場合があります。スペースがタールサイズよりも大きい!
https://en.wikipedia.org/wiki/Tar_(コンピューティング)#Format_details
答え2
tarファイルのサイズは、937MBに各ファイルまたはディレクトリに必要なメタデータサイズ(オブジェクトあたり512バイト)を加えたもので、512バイトの境界にファイルを並べ替えるためにパディングが追加されます。
非常におおよその計算によると、データを再コピーすると3.4GBの空き容量が残ります。パディングがないと仮定すると、3.4GBには約700万のメタデータレコードを格納できるスペースがあり、ファイルあたりの平均パディングが256バイトであると仮定すると、それより少なくなります。したがって、tarが必要な何百万ものファイルとディレクトリがある場合、問題が発生する可能性があります。
次の方法で問題を軽減できます。
z
またはオプションを使用したj
動的圧縮tar
- スペースが不足してもパーティションに予約されているスペースに触れないように、
tar
通常のユーザーとしてこれを実行してください。/
答え3
私はこれについて多くの研究をしました。単語数を使用してこのファイルをテストできますがdu -sb adir
。
tar -tvOf afile.tar | wc -c
du
各ディレクトリは4096バイト、tar
ディレクトリは0バイトとして計算されます。各ディレクトリに4096を追加する必要があります。
$(( $(tar -tvOf afile.tar 2>&1 | grep '^d' | wc -l) * 4096)))
その後、すべての文字を追加する必要があります。次の内容は次のとおりです。
$(( $(tar -tvOf afile.tar 2>&1 | grep '^d' | wc -l) * 4096 + $(tar -xOf afile.tar | wc -c) ))
タッチされたファイル(0バイトファイル)や1文字ファイルを試してみないので、これが完璧かどうかはわかりません。これはもっと近づくでしょう。
答え4
-cvf
圧縮は含まれていないため、〜1 GBフォルダでこれを行うと、〜1 GBのtarファイルが作成されます(Flubの回答はtarファイルの追加サイズに関する詳細を提供しますが、10,000個のファイルがある場合でもわずか5MB)。 4GB以上の空き容量があるため、パーティションを埋めません。
コピーをダウンロードするのは簡単です。
ほとんどの人はダウンロードの観点から「簡単」を「より小さい」と同義語と考えているので、ここでは少し圧縮を使用する必要があります。 bzip2
現在tarがあるすべてのシステムで動作すると思うので、j
スイッチにそれを含めることはおそらく最良の選択でしょう。 z
(gzip
)はおそらくより一般的であり、より多くの圧力を加える他の(あまり一般的ではない)可能性もあります。
つまり、tar
タスクの実行中に一時的に追加のディスク容量を使用しますが、いくつかの理由で、プライマリストレージの形式でテープドライブの時代にさかのぼるという点ではそうではありません。 2数十年にわたって開発されました(そして圧縮が含まれていても一時的な中間スペースを使用する必要はないと確信しています)。