почему индексный дескриптор имеет два разных поля для размера и количества блоков?

В Linux есть два отдельных поля в индексных дескрипторах, а именно размер и блоки. Почему у нас должно быть два поля. Если бы у нас было просто количество блоков, разве этого не было бы достаточно?

Я попытался создать текстовый файл и добавить в него символы. Размер менялся, но количество блоков оставалось почти таким же. (используется команда "stat filename")

Поэтому могу ли я предположить, что поле «размер» используется, чтобы убедиться, что ОС не читает несвязанные данные, хранящиеся в блоке, который не принадлежит файлу?


person DesirePRG    schedule 16.06.2013    source источник


Ответы (2)


Да, поле size используется для чтения только тех байтов, которые принадлежат файлу.

На самом деле файл может занимать больше блоков на диске, чем size / block_size + 1.

person nullptr    schedule 16.06.2013
comment
Почему файл занимает больше блоков на диске, чем это? из-за косвенных блоков? - person DesirePRG; 16.06.2013
comment
Нет, из-за алгоритмов распределения дискового пространства и из-за возможных предварительных выделений или дыр в файле (в случае дыр может быть меньше блоков, чем ожидалось). Рассмотрим следующий пример: размер блока (сообщенный stat) составляет 512 байт, но размер блока ввода-вывода составляет 4 КБ. Когда вы создаете 1-байтовый файл, он занимает весь блок ввода-вывода (поскольку было бы неэффективно выделять меньше, так как все 4 КБ передаются на/с диска), что означает, что stat сообщит 4096/512 = 8 блоков для файл. - person nullptr; 16.06.2013

В большинстве файловых систем Linux в файлах могут быть пробелы — области, заполненные нулями, которые не сопоставлены ни с одним блоком диска. Следовательно, размер файла и размер блока могут быть разными.

person Tassos Bassoukos    schedule 16.07.2013