2016-04-05 14 views
0

У меня есть 10 байтов данных для записи в файл после того, как моя программа записывает 9-битные и 7-битные данные на жесткий диск, если электричество сокращается, сколько байтов я могу прочитать из этого файла после поступления электроэнергии? 9 байтов или 10 байтов?Принцип работы жесткого диска

+1

Вы не можете записать отдельные биты на диск. Минимальный размер блока. – Thilo

+0

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

+0

Могу ли я сказать, что если минимальный размер блока составляет 512 байт, я могу читать нулевые байты. Я прав? – codeator

ответ

0

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

Когда вы просите жесткий синхронизации по данным через что-то вроде fsync все, что вы получаете подтверждение того, что по крайней мере ваши данные не были написаны, нет гарантии, что ничего не было.

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

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

Смежные вопросы