Гарантия согласованности файловой системы относительно последовательной записи

Моя программа (только 1 процесс и 1 поток) последовательно записывает n последовательных фрагментов данных в файл на жестком диске (обычный тип жесткого диска), используя старый системный вызов записи. Это похоже на какой-то файл журнала только для добавления.

После сбоя системы (сбой питания, а не сбой жесткого диска) я перечитал и убедился, что куски [i] (0 ‹ i ‹ n) были полностью записаны на диск (путем проверки длины). Может быть, содержимое чанка не соответствует контрольной сумме, но все же целые чанки[i] устойчиво сидят на поверхности магнитного диска.

Безопасно ли для меня предполагать, что все остальные фрагменты до того, как куски [i] тоже будут полностью записаны? Или существует (или много) chunks[j] (0 ‹ j ‹ i), который частично (или вообще не записан) на диск? Я знаю, что можно переупорядочить случайную запись для повышения пропускной способности диска, но можно ли переупорядочить и последовательную запись?


person enormouspenguin    schedule 07.03.2015    source источник


Ответы (1)


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

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

person Jerry Coffin    schedule 07.03.2015