Многие широко используемые файловые системы, такие как FAT, NTFS, ext2/3/4, не гарантируют целостность данных файла (например, с помощью контрольных сумм)... это в сочетании с реальной угрозой разорения может привести к ситуации, которую вы найдете себя в ... Данные возвращаются с жесткого диска без ошибок, но это не правильно.
Существует полезный вики страница сравнения особенностей файловой системы здесь - для потребительной случае, мы заинтересованы в колонке "Checksums данных" таблицы "Capabilities File", здесь.
На момент написания, список файловых систем, которые проверяют контрольную сумму данных (и к которым у вас может быть правдоподобный доступ): ZFS, Brtfs, ReFS.
Использование более современной файловой системы, такой как эта, обеспечивает лучшую устойчивость к бит-гнили. Я не могу комментировать остальные, но сам использую ZFS, так что на этом будет сосредоточена остальная часть моего ответа (в частности, на гарантии данных, игнорируя многие другие полезные функции).
Один диск / полоса
Использование ZFS с single disk
или striped
пулом (многие диски без выделенного диска четности) дает вам уверенность в том, что если данные возвращаются, это правильно. Если данные не могут быть прочитаны правильно, вы увидите ошибку. Это достигается путем хранения контрольной суммы данных, а также самих данных.
Обратите внимание, что даже с таким пулом свойство copies
ZFS может помочь просто обеспечить целостность данных - однако оно не дает никаких преимуществ в отношении сбоя устройства, поэтому я бы рекомендовал не использовать его.
copies=1 | 2 | 3
Controls the number of copies of data stored for this dataset. These copies are in
addition to any redundancy provided by the pool, for example, mirroring or RAID-Z.
The copies are stored on different disks, if possible. The space used by multiple
copies is charged to the associated file and dataset, changing the used property
and counting against quotas and reservations.
Зеркало или RAIDZ
Использование ZFS с mirror
или raidz1
или raidz2
бассейном (1 или 2 диска четности) повышает выше способность обнаружения ошибок, а также позволяет файловая система попытается автоматически восстановления поврежденных данных. В случае сбоя чтения (из-за несоответствующей контрольной суммы) запрос на чтение будет отправлен на один из зеркальных дисков или дисков четности. В очень маловероятном случае, когда все источники имеют неверные контрольные суммы, вы увидите ошибку, как указано выше. Но в типичном случае зеркальный или четный диск будет прочитан успешно, правильные данные будут возвращены вам, а поврежденные данные будут записаны заново.
К сожалению, в настоящее время я не знаю о потребительском продукте NAS, который обеспечивает поддержку ZFS или Btrfs, но если вы работаете с ним на ПК, то такие дистрибутивы, как FreeNAS (использует ZFS), могут быть вам очень интересны.
Конечно, вы можете рассчитать контрольную сумму для всех файлов, как вы упомянули, но это приводит к проблемам при попытке сохранить и проверить контрольные суммы.