Повреждение файла в режиме добавления - PullRequest
1 голос
/ 26 августа 2011

Основной вопрос: можно ли повредить данные, добавив новые данные в конец файла (учитывая размер сектора жесткого диска, например, 512)?

Что если, например, у меня есть файл с 1023байты, добавьте 1 байт, и у меня возникла ошибка (потеря питания, проблемы с буфером диска и т. д.)?

В каком состоянии будет второй сектор в этом сценарии?

1 Ответ

0 голосов
/ 26 августа 2011

Невозможно сказать. Существует несколько уровней абстракции, кэширования и даже простых задержек распространения электричества.

Ваш код мог записать байт. Но ОС не собирается сразу записывать этот байт. Нажатие на диск - это одна из самых медленных операций, которую компьютер может выполнять в наши дни, поэтому он собирается буферизовать этот байт и посмотреть, не застряли ли еще какие-нибудь байты в выходном буфере.

Если в течение тайм-аута кеша ничего не происходит, байты будут отправлены на диск для фиксации на носителе. Но сам накопитель также может выполнять некоторое кеширование и т. Д. При этом учитывается задержка вращения (фактический сектор, в который должен входить байт, должен фактически находиться под записывающей головкой записи, что может составлять несколько миллисекунд).

Другими словами, для записи байта на диск может потребоваться произвольное количество времени, которое фактически будет записано на диск. Если сбой питания произошел в течение этого интервала, ваши данные будут потеряны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...