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


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 байти на кожен), а блок IO стосується розміру блоку, визначеного при створенні FS?

Відповіді:


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, але сучасне використання просто довільне. Традиційні уніфіковані програми та інтерфейси все ще використовують блоки 512B іноді, хоча блоки частотою 1 КБ часто віддають перевагу . Вам потрібно перевірити документацію кожної утиліти, щоб знати, який розмір блоку він використовує (деякі мають комутатор, наприклад, du -Bабо df -Bв Linux).

У statутиліті GNU / Linux blocksцифра - це кількість 512B блоків, які використовує файл. IO BlockЦифра бажаний розмір для файлу вводу-виводу, який в принципі не пов'язані , але , як правило , вказує на розмір блоку основної файлової системи (або розмір кластера , якщо це те, що ви хочете назвати його). Тут у вас є 13-байтний файл, який займає один блок у файловій системі ext3 розміром блоку 2048; тому файл займає 4 512-байтові одиниці (їх називають "блоками" stat).

Диски

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

Розмір дискового сектору безпосередньо не пов’язаний з розміром блоку файлової системи, але краще, щоб мати цілу кількість секторів, краще для продуктивності.

¹ Виняток: розріджені файли економлять місце.


2
Дякуємо за ваше роз’яснення. Я приїхав сюди через таку плутанину, спричинену інструментом ext2fsd для Windows. Їх параметри командного рядка починаються: 'Використання: mke2fs [-c | -l ім'я файлу] [-b блок-розмір] [-C розмір кластера] ...' Ну, бачите, і розмір блоку, і кластер ...
Бернхард Гіллер

Мені також цікаво знати, в чому різниця між розміром блоку mke2fs і розміром кластера. Хтось знає?
X.LINK

1
@ X.LINK Це пояснено на сторінці man. Розмір кластера використовується функцією bigalloc , яка, якщо я правильно зрозумів, робить швидший доступ до великих файлів за рахунок більшого витрачання часу.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.