Разница между размером блока и размером кластера

У меня вопрос о размере блока и размере кластера. Что касается того, что я прочитал, я предполагаю следующее:

  • Размер блока – это физический размер блока, в основном 512 байт. Невозможно изменить это.
  • Размер кластера – это минимальный размер блока, который считывается и записывается ОС. Если я создаю новую файловую систему, например ext3, я могу указать этот минимальный размер блока с помощью переключателя -b. Почти все программы, такие как dumpe2fs, mke2fs используют размер блока как имя для размера кластера.

Если у меня есть следующий результат:

$ stat test File: `test' Size: 13 Blocks: 4 IO Block: 2048 regular file Device: 700h/1792d Inode: 15 Links: 1 

Правильно ли, что размер является фактическим пространством в байтах, блоки – физически используемые блоки (по 512 байт для каждого), а блок ввода-вывода относится к размеру блока, указанному при создании FS?

Я думаю, вы в замешательстве, возможно, потому, что вы прочитали несколько документов, которые используют другую терминологию. Такие термины, как «размер блока» и «размер кластера», не имеют универсального значения даже в контексте литературы файловой системы.

Файловые

Для ext2 или ext3 ситуация относительно проста: каждый файл занимает определенное количество блоков . Все блоки в данной файловой системе имеют одинаковый размер, обычно один из 1024, 2048 или 4096 байт. Файл №, размер которого находится между N блоками плюс один байт и блоки N + 1, занимает N + 1 блоков. Этот размер блока – это то, что вы указываете с помощью mke2fs -b . Отдельного понятия кластеров нет.

Файловая система FAT, используемая, в частности, MS-DOS и ранними версиями Windows, имеет аналогичное простое распределение пространства. Какие блоки вызовов ext2 блокируют, кластеры FAT вызовов; концепция такая же.

Некоторые файловые системы имеют более сложную схему распределения: они имеют блоки фиксированного размера, но могут использовать один и тот же блок для хранения последних нескольких байтов из более чем одного файла. Это называется блокировкой блока ; Reiserfs и Btrfs делают это, но не ext3 или даже ext4.

коммунальные услуги

Утилиты Unix часто используют слово «блок» для обозначения единицы произвольного размера, обычно 512 байт или 1 КБ. Это использование не связано с какой-либо конкретной файловой системой или дисковым оборудованием. Исторически, блок 512B действительно приходил, потому что диски и файловые системы в то время часто работали на блоках 512B, но современное использование просто произвольно. Традиционные утилиты и интерфейсы unix по-прежнему используют блоки 512B, хотя сейчас предпочтительнее блоки 1kB. Вам нужно проверить документацию каждой утилиты, чтобы узнать, какой размер используемого блока (некоторые из них имеют переключатель, например du -B или df -B в Linux).

В утилите stat GNU / Linux фигурой blocks является число блоков 512B, используемых файлом. Показатель IO Block является предпочтительным размером для ввода-вывода файлов, который в принципе не связан, но обычно указывает размер блока базовой файловой системы (или размер кластера, если это то, что вы хотите назвать). Здесь у вас есть 13-байтовый файл, который занимает один блок файловой системы ext3 с размером блока 2048; поэтому файл занимает 4 512-байтовые единицы (называемые «блоки» по stat ).

Диски

На большинстве дисков представлен интерфейс, который показывает диск как кучу секторов . Диск может записывать или читать только целый сектор, а не отдельные биты или байты. Большинство жестких дисков имеют 512-байтовые сектора, хотя диски с 4 КБ-сектора начали появляться пару лет назад.

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

¹ Исключение: разреженные файлы экономят место.