Jawaban ini adalah kombinasi dari @ lechlukasz dan @ db48x , juga menggabungkan beberapa poin yang dibuat dalam komentar serta beberapa pemikiran saya sendiri.
Jalur sederhana ke depan adalah sistem file gabungan dan pendekatan metadata terpisah.
Dengan menggunakan sistem file yang melakukan hash dan validasi data sambil jalan, seperti ZFS atau Btrfs (harap dicatat bahwa meskipun kemajuan besar telah dibuat, Btrfs tidak dianggap siap untuk penggunaan produksi saat ini), Anda dapat yakin bahwa jika data dapat dibaca dari disk tanpa kesalahan sistem operasi, maka pembacaan data ditulis ke disk dengan cara yang dimaksudkan oleh sistem file. Dengan menjalankan operasi "scrub" secara berkala, semua data dibaca dan diverifikasi berdasarkan ide sistem file tentang apa yang seharusnya.
Namun, itu hanya melindungi terhadap kerusakan pada disk (blok yang tidak dapat dibaca, kesalahan penulisan perangkat keras secara langsung, penulisan yang tidak valid yang merusak bagian data secara langsung pada perangkat blok, dll.). Itu tidak melindungi terhadap bug perangkat lunak, operasi pengguna yang salah, atau perangkat lunak berbahaya yang bekerja melalui fasilitas sistem operasi yang dimaksudkan untuk bekerja dengan file, dengan asumsi bahwa fasilitas itu bebas dari bug tersebut.
Untuk melindungi dari yang terakhir, Anda membutuhkan lapisan perlindungan lain. Checksumming atau hashing data dari perspektif aplikasi pengguna akan membantu melindungi terhadap banyak risiko yang disebutkan di atas, tetapi perlu dilakukan secara terpisah (baik sebagai tindakan proses bawaan dalam perangkat lunak, atau sebagai proses yang sepenuhnya terpisah).
Dengan perangkat keras masa kini dan apa yang praktis untuk menyimpan data dalam jumlah besar (hard disk piringan berputar sebagai lawan disk solid-state / SSD), bahkan algoritma hashing kompleks seperti SHA1 akan sebagian besar terikat I / O - yaitu, kecepatan di mana data hash akan menjadi fungsi dari kecepatan baca sistem penyimpanan, daripada kemampuan prosesor komputer untuk menghitung hash. Saya melakukan percobaan dengan menjalankan proses hashing MD5 ruang-pengguna lebih dari sekitar 150 GB data pada apa pada tahun 2012 adalah PC konsumen tingkat menengah, dan selesai setelah menjalankan disk pada dasarnya tanpa gangguan selama sekitar 40 menit. Menambah angka-angka itu hingga 100 kali lipat, Anda akan mendapatkan hash MD5 koleksi 15 TB dalam waktu sekitar tiga hari pada perangkat keras yang sama. Dengan menambahkan tingkat transfer baca (yang dapat dengan mudah dicapai misalnyaRAID 0 misalnya adalah striping tanpa redundansi, biasanya digunakan untuk mencapai kinerja baca / tulis yang lebih tinggi mungkin dalam kombinasi dengan RAID 1 membentuk RAID 10 ), waktu penyelesaian dapat diturunkan untuk jumlah data yang sama.
Dengan menggabungkan keduanya, Anda mendapatkan yang terbaik dari kedua dunia: sistem file memberi Anda jaminan bahwa apa yang Anda terima saat membaca file adalah apa yang sebenarnya ditulis, dan proses pengecekan fixity terpisah dapat berjalan di seluruh koleksi memastikan bahwa data disimpan masih cocok dengan apa yang dicerna ke dalam arsip. Setiap ketidakkonsistenan antara keduanya (sistem file mengatakan file tersebut OK, pengecekan fixity mengatakan tidak) akan menunjukkan file yang telah dimodifikasi di luar mode operasi arsip yang dimaksudkan tetapi dari dalam fasilitas sistem operasi, meminta pengembalian dari sekunder salin (cadangan). Dengan demikian pemeriksaan fixity dapat berjalan pada interval waktu yang lebih lama, yang menjadi penting untuk arsip yang sangat besar, tetapi setiap akses online masih dijamin tidak rusak pada perangkat keras jika pembacaan berhasil. Pada prinsipnya, perangkat lunak arsip dapat mengandalkan sistem file untuk melaporkan ketidakkonsistenan sebagai kesalahan baca, dan melakukan pemeriksaan fixity terpisah di latar belakang saat pengguna bekerja dengan file dan menampilkan pesan yang sesuai seandainya menunjukkan bahwa file tidak cocok dengan apa yang dicerna ke dalam arsip. Menggunakan sistem file blok-hashing, skema seperti itu akan memiliki dampak minimal pada kinerja yang dirasakan sambil tetap memberikan jaminan bahwa konten sudah benar.