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

20

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

  • Размер блока - это физический размер блока, в основном 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?

pluckyDuck
источник

Ответы:

26

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

Файловые

Для 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цифра равна числу блоков в 512 Б, используемых файлом. IO BlockЦифра предпочтительный размер для файла ввода-вывода, который в принципе не связаны , но , как правило , указывает на размер блока основной файловой системе (или размер кластера , если это то, что вы хотите назвать его). Здесь у вас есть 13-байтовый файл, который занимает один блок в файловой системе ext3 с размером блока 2048; поэтому файл занимает 4 512-байтовых блоков (называемых «блоками» stat).

Диски

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

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

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

Жиль "ТАК - перестань быть злым"
источник
2
Спасибо за ваше разъяснение. Я прибыл сюда из-за такой путаницы, вызванной инструментом ext2fsd для Windows. Их параметры командной строки начинаются: «Использование: mke2fs [-c | -l имя файла] [-b размер блока] [-C размер кластера] ...» Ну, вы видите, размер блока и кластера ...
Бернхард Хиллер
Мне также интересно узнать, в чем разница между размером блока mke2fs и размером кластера. Кто-нибудь знает ?
X.LINK
1
@ X.LINK Это объяснено на странице руководства. Размер кластера используется функцией bigalloc , которая, если я правильно понимаю, ускоряет доступ к большим файлам за счет расточительства.
Жиль "ТАК - перестань быть злым"