Saya memiliki direktori dengan lebih dari 400 GiB data di dalamnya. Aku ingin memeriksa bahwa semua file dapat dibaca tanpa kesalahan, sehingga cara sederhana saya pikir adalah untuk tar
menjadi /dev/null
. Tetapi sebaliknya saya melihat perilaku berikut:
$ 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
Perintah ketiga di atas secara paksa dihentikan oleh Ctrl+ Csetelah berjalan cukup lama. Selain itu, sementara dua perintah pertama bekerja, indikator aktivitas perangkat penyimpanan yang berisi .
hampir selalu tidak digunakan. Dengan perintah ketiga indikator terus menyala, yang berarti kesibukan ekstrem.
Jadi sepertinya, ketika tar
dapat mengetahui bahwa file outputnya /dev/null
, yaitu ketika /dev/null
dibuka secara langsung untuk memiliki file handle yang tar
ditulis, file body muncul dilewati. (Menambahkan v
opsi untuk tar
tidak mencetak semua file dalam direktori menjadi tar
'merah.)
Jadi saya bertanya-tanya, mengapa demikian? Apakah ini semacam optimasi? Jika ya, lalu mengapa tar
bahkan ingin melakukan optimasi yang meragukan untuk kasus khusus seperti itu?
Saya menggunakan GNU tar 1.26 dengan glibc 2.27 di Linux 4.14.105 amd64.
pv
: tar -cf - | pv >/dev/null
. Itu menghindari masalah dan memberi Anda informasi kemajuan (berbagai pv
opsi)
gtar -cf /dev/zero ...
untuk mendapatkan apa yang Anda suka.
find . -type f -exec shasum -a256 -b '{}' +
. Tidak hanya itu benar - benar membaca dan memeriksa semua data, tetapi jika Anda menyimpan hasilnya, Anda dapat menjalankannya lagi nanti untuk memeriksa bahwa konten file tidak berubah.