LINUX.ORG.RU

История изменений

Исправление shkolnick-kun, (текущая версия) :

В звисимости от выбранной ФС у тебя может случиться всякое, начиная от битого файла, заканчивая разрушением ФС.

Я бы сделал файл фиксированной длины, который пишется по кольцу блоками одинаковой длины(одна запись может занимать несколько блоков но не меньше одного) + 4(четыре) файла с картами (фиксированной длины, пишем по кольцу).

Алгоритм добавления записи такой:

1.Запись пишем поблочно:
  а) Обновляем карту в первом индексном файле, делаем fsync/close
  б) Обновляем карту во втором индексном файле, делаем fsync/close
  в) Пишем блок в архивный файл, делаем fsync/close.
  г) Обновляем карту в третьем индексном файле, делаем fsync/close
  д) Обновляем карту в четвертом индексном файле, делаем fsync/close

При таком раскладе вне зависимости от ФС и фазы луны в момент отключения питания у тебя всегда будет достаточно информации для того, чтобы отличить битые записи от не битых и восстановить поврежденные индексные файлы.

Исходная версия shkolnick-kun, :

В звисимости от выбранной ФС у тебя может случиться всякое, начиная от битого файла, заканчивая разрушением ФС.

Я бы сделал файл фиксированной длины, который пишется по кольцу блоками одинаковой длины(одна запись может занимать несколько блоков но не меньше одного) + 4(четыре) файла с картами (фиксированной длины, пишем по кольцу).

Алгоритм добавления записи такой:

1.Запись пишем поблочно:
  а) Обновляем карту в первом индексном файле, делаем fsync/close
  б) Обновляем карту во втором индексном файле, делаем fsync/close
  в) Пишем блок в архивный файл, делаем fsync/close.
  г)Обновляем карту в третьем индексном файле, делаем fsync/close
  д)Обновляем карту в четвертом индексном файле, делаем fsync/close

При таком раскладе вне зависимости от ФС и фазы луны в момент отключения питания у тебя всегда будет достаточно информации для того, чтобы отличить битые записи от не битых и восстановить поврежденные индексные файлы.