Секторы пишутся при перезаписи файла? - PullRequest
1 голос
/ 08 января 2012

Представьте, что есть файл размером 5 МБ.Я открываю его в режиме записи на С, а затем заполняю его ненужными данными ровно 5 МБ.Будут ли перезаписаны те же самые сектора диска, которые использовались ранее, или ОС выберет новые сектора диска для новых данных?

Ответы [ 2 ]

4 голосов
/ 08 января 2012

Это зависит от файловой системы.

Классически ответом будет «да, те же сектора будут перезаписаны новыми данными».

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

3 голосов
/ 08 января 2012

Файловая система может делать все, что пожелает. Но любая реальная файловая система записывает данные обратно в те же сектора.

Изображение, если это не так. Каждый раз, когда вы записываете в файл, файловая система должна находить новый свободный сектор, записывать в этот сектор, а затем обновлять метаданные файловой системы, чтобы файл указывал на новый сектор. Это также может привести к ужасной фрагментации файла, поскольку запись одного сектора в середине непрерывного файла размером 5 МБ приведет к его фрагментации. Так что гораздо проще просто написать обратно в тот же сектор.

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

Теперь файловая система будет записывать в тот же сектор, но оборудование диска может записывать в любое место. На самом деле на SSD / флэш-накопителях аппаратное обеспечение для обработки выравнивания износа почти гарантированно записывает данные в другой сектор. Но это прозрачно для ОС / файловой системы. (Это возможно и на жестких дисках из-за экономии секторов )

...