Можно ли проверить данные нескольких последовательных записей, просто проверив последние n записанных байтов?

Просто чтобы прояснить, мои вопросы не зависят от языка / ОС (независимы).

Я работаю над программой (поддерживающей множество ОС, в настоящее время написанной на Golang), которая получает много фрагментов данных (например, поток фрагментов данных) и последовательно записывает все это в заранее заданную позицию (pos >= 0) в файл. Только 1 процесс с 1 потоком, обращающимся к файлу. Я использую обычную функцию записи, которая использует системный вызов write (который зависит от операционной системы, в которой она работает), а не буферизованный ввод-вывод.

Предполагается, что во время записи моей программы внезапно произошел сбой системы (наиболее серьезный вид сбоя: сбой питания).

Когда система снова включается, мне нужно проверить, сколько чанков полностью записано на жесткий диск. (*)

Жесткий диск, на который пишет моя программа, сегодня является обычным жестким диском для настольного компьютера или ноутбука (не какой-нибудь необычный (с батарейным питанием), который можно найти на некоторых высокопроизводительных серверах).

Предполагается, что повреждение битов при переносе и чтении с жесткого диска очень маловероятно и незначительно.

Мои вопросы:

  1. Нужно ли делать контрольную сумму для всех записанных кусков, чтобы проверить (*)?
  2. Или мне просто нужно проверить и подтвердить, что n-ный блок корректен, и предположить, что все фрагменты перед ним (0 -> n-1) тоже верны?

    2.1 Если 2. достаточно, значит ли это, что порядок последовательной записи гарантированно будет сохраняться ФС любой ОС (хотя произвольные записи все же можно переупорядочить)?

  3. Использует ли мой способ восстановления тот же принцип, что и для файла журнала, доступного только для добавления, который используется во многих защищенных от сбоев базах данных?

1 ответ

Я подозреваю, что вам лучше всего изучать циклические проверки на избыточность (CRC).
Насколько я понимаю, CRC позволит вам проверить, что на самом деле было написано.

Я также предполагаю, что беспокоиться о причине каких-либо ошибок не очень стоит (ошибки передачи по сравнению с ошибками по любой другой причине, такой как сбой питания).

Надеюсь это поможет.

Другие вопросы по тегам