Уточненный вопрос:
Когда ОС отправляет команду для записи сектора на диск, является ли она атомарной? т.е. запись новых данных полностью завершается или старые данные остаются нетронутыми, если сбой сразу после команды записи. Меня не волнует, что происходит во множестве секторальных записей - допустимы разорванные страницы.
Старый вопрос:
Скажем, у вас есть старые данные X на диске, вы пишете над ним новые данные Y, и дерево падает на линию электропитания во время этой записи. Не имея причудливого ИБП или контроллера с батарейным питанием, вы можете получить разорванную страницу, где данные на диске - это часть X и часть Y. Можете ли вы когда-нибудь кончиться тем, что данные на диске являются частью X, часть Y, и часть мусора?
Я пытался понять дизайн систем ACID, таких как базы данных, и к моему наивному мышлению, кажется, что firebird, который не использует журнал записи на запись, полагает, что данная запись не уничтожит старые данные ( X) - не удается полностью записать новые данные (Y). Это означает, что если часть X будет перезаписана, можно изменить только часть X, которая перезаписывается, а не часть X, которую мы намерены сохранить.
Чтобы уточнить это, это означает, что если у вас есть буфер размером с страницей, скажем, 4096 байт, заполненный половиной Y, половина X, которую мы хотим сохранить, - и мы говорим ОС, чтобы написать этот буфер по X, нет ситуации короткой серьезного отказа диска, когда половина X, которую мы хотим сохранить, повреждена во время записи.