6 окт. 2015 г.

Почему нельзя создать файл, занимающий всё свободное место на диске?



Автор: Рэймонд Чен.

Пользователь пытался отработать некоторые предельные случаи в своём приложении, один из них моделировал ситуацию "закончилось место на диске". Это делалось очень просто: вызвать Get­Disk­Free­Space­Ex, чтобы узнать доступный объём дискового пространства, затем создать файл соответствующего размера. На одних томах это работало, на других сопровождалось ошибкой "Недостаточно места на диске." Ошибка появлялась даже в тех случаях, когда другие программы не работали с диском. Почему?

Объём дискового пространства, необходимый для создания файла заданного размера, не равен точному количеству байт в файле. Файловой системе надо хранить имя файла, атрибуты безопасности, различные метки времени, а также сведения о местонахождении всех байт файла на диске. Есть ещё менее очевидные вещи наподобие изменения записей журнала при создании файла и записей отслеживания объектов для отслеживания ссылок.
Наличие на томе X свободных байт не означает, что можно создать файл размером X, потому что для хранения метаданных нужно дополнительное место на диске. Если вы хотите заполнить диск до конца, можно сначала заполнить его почти до конца, затем увеличивать файл до получения ошибки "Недостаточно места на диске." Для разнообразия можно увеличивать файл большими кусками, а потом перейти на заполнение уменьшающимися порциями. Также можно использовать функцию Set­File­Valid­Data, чтобы не тратить время на заполнение всех секторов нулями.

Комментариев нет:

Отправить комментарий