Несколько лет назад я был разработчиком файловых систем.
Используя материал, указанный в ссылке ...
Доступ к любому смещению файла в диапазоне 0 .. (80 кБ - 1) включительно можно получить с помощью прямых блоков, хранящихся в inode. Это связано с тем, что имеется десять блоков по 8 кБ.
Поскольку блок диска занимает 8 кБ (8192 байта), а адреса диска - 32 бита (4 байта), каждый блок диска может содержать до 2048 (8192/4) записей адресов диска. Это означает, что одиночный косвенный блок может ссылаться до 2048 * 8 КБ байтов данных файла (16 МБ). Расширяя это, мы обнаруживаем, что дважды косвенный блок может ссылаться до 2048 *2048* 8 КБ файловых данных (32 ГБ).
С помощью прямых блоков можно получить доступ к данным файла до 80 КБ. Это приводит к смещению файлов от 0 до (80 кБ - 1) включительно.
До 16 МБ файловых данных можно получить с помощью единственного косвенного блока, хранящегося в inode. Это приводит к смещению файлов от 80 кБ до (16 МБ + 80 кБ - 1) включительно.
До 32 ГБ файловых данных можно получить с помощью дважды косвенного блока, хранящегося в inode. Это приводит к смещению файлов (16 МБ + 80 КБ) через (32 ГБ + 16 МБ + 80 КБ - 1) включительно.
До 64 ТБ файловых данных можно получить с помощью трехкратного косвенного блока, хранящегося в inode. Это приводит к смещению файлов (32 ГБ + 16 МБ + 80 КБ) до (64 ТБ + 32 ГБ + 16 МБ + 80 КБ - 1) включительно.
Следовательно, теоретический максимальный размер файла составляет 64 ТБ + 32 ГБ + 16 МБ + 80 КБ.
Практический максимальный размер - это другое дело. Это может быть ограничено любым из них или комбинацией следующего:
- Размер диска.
- Размер раздела.
- Внутренние ограничения метаданных файловой системы. Некоторые файловые системы не предназначены для адресации, превышающей размер X, даже если X меньше теоретического максимального размера файла.
- Относится к пункту 3, но заслуживает отдельного числа битов, зарезервированных в inode для хранения размера файла. Если память служит, оригинальный Ext2 ограничил размер файла до 32 бит. Это создало ограничение (2 ГБ - 1) для размера файла.
Некоторые из практических ограничений можно «обойти», если файловая система поддерживает разреженные файлы (описанная в ссылке, вероятно, делает, так как использует косвенные блоки). Разреженные файлы допускают такие ситуации, как «подгонка» файла объемом 2 ТБ на диске объемом 1 ГБ без использования фактического места на диске 2 ТБ. Кстати, это одна из причин, по которой индекс может часто содержать информацию о количестве блоков, фактически используемых файлом.
Надеюсь, это поможет.