400GiBを超えるデータを含むディレクトリがあります。すべてのファイルをエラーなく読み取ることができるかどうかを確認したいので、私が考えた簡単な方法はtar
これです/dev/null
。
$ time tar cf /dev/null .
real 0m4.387s
user 0m3.462s
sys 0m0.185s
$ time tar cf - . > /dev/null
real 0m3.130s
user 0m3.091s
sys 0m0.035s
$ time tar cf - . | cat > /dev/null
^C
real 10m32.985s
user 0m1.942s
sys 0m33.764s
上記の3番目のコマンドは、Ctrl長時間実行した後に強制的に停止しました。Cさらに、最初の2つのコマンドが機能しているときに含まれるストレージデバイスのアクティビティインジケータは、ほとんど.
常にアイドル状態です。 3番目のコマンドが実行されると、インジケータが点灯し続けていて、非常に忙しいという意味です。
この観点から見ると、tar
出力ファイルが見つかると、/dev/null
つまり/dev/null
書き込み用のファイルハンドルを直接開くと、tar
ファイル本文がスキップされます。 (v
オプションを追加すると、tar
ディレクトリ内のすべてのファイルがtar
「赤」で印刷されます。)
だから知りたいです。なぜこのようなことが起こるのでしょうか?一種の最適化ですか?それでは、なぜtar
この特定の事例に対してそんなに疑わしい最適化がなされたのでしょうか。
私はLinux 4.14.105 amd64でGNU tar 1.26とglibc 2.27を使用しています。
ベストアンサー1
それはい 記録された最適化:
アーカイブが作成されると、
/dev/null
GNU tar は入出力操作を最小化しようとします。 GNU tarでAmandaバックアップシステムを使用するときにこの機能を使用する初期サイズ変更プロセスがあります。