Суперблок в Лінуксі

Що таке суперблок в Лінуксі. Спробуємо розібратися на прикладі файлової системи ext (2 | 3 | 4), яка використовується в Лінуксі за замовчуванням. Але для початку розглянемо кілька простих понять

Блок файлової системи

Після форматування диска або розділу сектора на диску розділені на невеликі групи. Така група секторів називається блоком. Розмір блоку може бути різним і задається як параметр ключа команди форматування. наприклад

ключ -b задає розмір блоку в байтах, в даному випадку розмір блоку буде 4096 байт

Розмір блоку може бути різним. Це залежить від типу файлової системи

  • Ext2 - 1Кб, 2Кб, 4Кб, 8Кб
  • Ext3 - 1Кб, 2Кб, 4Кб, 8Кб
  • Ext4 - від 1Кб до 64Кб

При виборі розміру блоку потрібно врахувати ряд моментів

  • Максимальний розмір файлу
  • Максимальний розмір файлової системи
  • продуктивність

Розмір блоку впливає на швидкість читання / запису з диска. Уявімо собі файл розмірів в кілька сот мегабайт, який зчитується з диска блоками по 1Кб. Той же файл буде зчитуватися швидше якщо розмір блоку файлової системи буде 4Кб або 8Кб. Це зрозуміло. Тому при форматуванні має сенс поставити блок більшого розміру, якщо планується використовувати файли великого розміру

Також вірно і зворотне твердження. У разі зберігання невеликих файлів краще використовувати блоки мінімального розміру

Ядро Linux працює з розміром блоку файлової системи, а не з розміром сектора диска (зазвичай 512 байт). Важливо розуміти, що розмір блоку файлової системи не може бути меншою за розмір сектора диска і завжди буде кратним йому. Також ядро ​​очікує, що розмір блоку файлової системи буде менше або дорівнює розміру системної сторінки

Розмір системної сторінки можна побачити виконавши команду

Групи блоків файлової системи

Блоки, про які ми говорили раніше обьеденяйтесь в групи блоків, що позитивно відбивається на операціях читання / запису так як зменшується час читання / запису великих обсягів даних

Файлова система EXT розбиває всі доспупних простір на групи блоків рівного розміру. Ці групи розташовуються послідовно, одна за одною

Кількість блоків в групі незмінно і може бути розраховано за формулою

Погляньмо на висновок команди mke2fs

Відзначимо те, про що говорили вище

  • Розмір блоку 4096 байт
  • 800 блокових груп
  • 32768 блоків в групі (8 * 4096)

Також видно блоки в яких зберігаються резервні копії суперблоку

Так що ж таке суперблоки?

Найпростішим визначенням суперблоку могло б бути таке твердження

Суперблок - це блок в якому зберігаються метадані файлової системи

Аналогічно тому, як i-ноди зберігають метадані про файли, суперблок зберігає метадані про файлову ситеме. Якщо раптом суперблок пошкоджений, то неможливо буде примонтировать файлову систему. Зазвичай при завантаженні система перевіряє суперблок і при необхідності виправляє його, що в результаті призводить до коректного монтування файлових систем

Деякі дані, які зберігаються в суперблоці. наприклад

  • Кількість блоків в файлової системі
  • Кількість вільних блоків в файлової системі
  • Кількість i-нод в блокової групі
  • Блоки в блокової групі
  • Кількість запусків файлової системи з часу останньої перевірки fsck
  • UUID файлової системи
  • Стан файлової системи (чи була коректно демонтувати, виявленої помилки і т.д.)
  • Тип файлової системи
  • Операційна система в якій була відформатована дана файлова система
  • Час останнього монтування
  • Час останнього запису

Основна копія суперблоку зберігається в найпершій групі блоків. Вона названа основною, тому що зчитується системою в процесі монтування файлової системи. Так як відлік блокових груп починається з 0 то можна говорити про те, що суперблоки зберігається на початку блокової групи 0

Суперблок вельми критичний для файлової системи. Тому в кожній блокової групі є копії суперблоку. Це дає нам право думати, що пошкоджений суперблок буде відновлений щоразу, коли це буде необхідно

Може здатися, що наявність в кожній блокової групи резервних копій суперблоку призводить до споживання великої дискового простору. Для цього в останніх версіях систем була реалізована функція «sparse_super» метою якої було створення резервних копій в групі блоків 0, 1, 3, 5, 7

Як побачити, що зберігається в суперблоці?

Для цього скористаємося командою dumpe2fs

Ще один висновок команди показує інформацію про суперблоці

Як відновити пошкоджений суперблок?

Для початку потрібно перевірити файлову систему утилітою fsck

У разі якщо fsck виявила помилку читання суперблоку можна спробувати зробити наступне:

Для початку визначимо де розташовані резервні копії суперблоку. Для цього виконуємо

ключ -n говорить команді не створювати файлову систему, але показати висновок який міг би бути при реальному створенні файлової системи

Далі відновлювати суперблок з бекапу за допомогою e2fsck

В даному випадку в блоці 819200 зберігається резервна копія суперблоку. Після застосування команди пробуємо знову монтувати файлову систему. Або як варіант використовувати ключ sb команди mount. який вказує на розташування копії суперблоку

В даному випадку зчитуємо копію суперблоку з блоку 819200

переклад Олександр Черних