Ако използвате Linux, рано или късно ще видите ужасното съобщение за грешка, свързано с суперблок (суперблок)Неща като „Не мога да прочета суперблока“, „лош суперблок“ или грешки в fsck Те говорят за алтернативни суперблокове. И разбира се, в този момент настъпва паника, защото дялът ви не се монтира, системата влиза в BusyBox или външният ви USB диск изглежда неработещ.
Добрата новина е това Файловите системи ext2, ext3 и ext4 са проектирани точно за да преживея тези страховеТе съхраняват резервни копия на суперблока на различни места на диска и има редица инструменти (fsck, e2fsck, dumpe2fs, debugfs, badblocks и др.), които ви позволяват да проверявате, поправяте и дори възстановявате данни в много лоши ситуации. В тази статия ще научите спокойно какво представлява суперблокът, как се поврежда, как да използвате резервните му копия и какво да правите във всеки реалистичен сценарий, от лаптоп, който се стартира в BusyBox, до USB устройство, което изобщо не се монтира.
Какво е суперблок в Linux и защо е толкова важен?
Във файлова система ext2/ext3/ext4, Суперблокът е „мозъкът“ на тома. Това е структура от данни, която се съхранява на диска и съдържа практически всички „технически спецификации“ на файловата система: колко блока има, колко inode-а, какъв размер на блока използва, колко свободни блока остават, състояние на системата, активирани функции, време за монтиране и проверка и т.н.
Основният суперблок Съхранява се в началото на файловата система (в блок 0 или след boot блока, в зависимост от размера на блока), но дизайнът ext2/3/4 е разумен: той също така съхранява резервни копия на суперблока, разпределени в няколко групи блокове. Тези резервни копия ни позволяват да „възкресим“ файлова система, когато основният суперблок е повреден.
Вътрешно, суперблокът е огромна структура с десетки полета: общ брояч на индексни възли (s_inodes_count), общ брой блокове (s_blocks_count_lo и горната част s_blocks_count_hi (в ext4 64 бита), блокове, резервирани за root, свободни блокове и inodes, първи блок данни, размер на блока, започващ от s_log_block_size, блокове на група, inodes на група, магически печат 0xEF53 който идентифицира ext2/3/4, флагове за съвместими, несъвместими и само за четене функции, UUID, етикет на том, път, където е бил монтиран за последно, параметри за журналиране, време за последно монтиране и проверка, максимален брой монтирания преди принудително изпълнение на fsck, информация за грешки, контролни суми, поддръжка на криптиране, RAID, моментни снимки и др.
Всичко това прави корумпирания суперблок много сериозен проблем.Това е така, защото ядрото губи представа къде започва и свършва всеки елемент във файловата система. Следователно, ако видите съобщения като „грешен тип файлова система, лоша опция, лош суперблок…“ при монтиране на дял, е много вероятно основният суперблок (или част от метаданните) да е повреден.

Къде се съхраняват копията на суперблокове и как да ги намерите
Първото нещо, което трябва да разберете е, че ext2/ext3/ext4 съхраняват копия на суперблокове на различни блокове на диска, така че ако основното копие е повредено, можем да използваме едно от тези резервни копия. Точното местоположение зависи от размера на блока и начина, по който е създадена файловата система.
Има два много често срещани начина да разберете къде се намират тези копия. използвайки стандартни инструменти:
- Четене на документацията/човекът на
e2fsck. - използване
dumpe2fsилиmke2fsв режим „симулация“ (-n), за да се изброят блоковете, които съдържат копия на суперблока.
За външни системи с класически размери на блоковете имаме някои „типични“ стойности За първото архивиране: ако размерът на блока е 1K, архивирането обикновено е в блок 8193; при 2K блокове обикновено е 16384; а при 4K блокове, блок 32768. Но за да сте сигурни, най-добре е да проверите действителния размер на блока на устройството.
За да разберете размера на блока на ext файлова система Можем да изпълним нещо подобно (винаги е по-добре с немонтиран дял):
sudo dumpe2fs /dev/sdb5 | grep "Block size"
Типичният изход на dumpe2fs включва стилна линия „Размер на блока: 4096“, което означава, че размерът на блока е 4K. С тази информация вече знаем, че първото вероятно копие на суперблок се намира в блок 32768.
Ако искаме да знаем не само едно копие, а всички копия на суперблокаНай-практичният начин е да се „симулира“ създаването на нова файлова система с mke2fs използване на опция -n (много важно), така че да не докосва действителния запис:
sudo mke2fs -b 4096 -n /dev/sdb5 | grep -A 3 "Respaldo"
Опцията -b задава размера на блока (например 4096) и опцията -n разказва mke2fs Не би трябвало да записва нищо на диска, а само да показва конфигурацията, която би използвал. В резултата ще видите раздел като „Superblock backup saved in blocks:“, последван от дълъг списък с номера на блокове: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 и т.н.
Типични грешки: „Не мога да прочета суперблок“ и грешки при асемблиране
Изключително често срещан симптом, че нещо не е наред със суперблока Среща се с грешка, подобна на тази:
mount: /dev/sdb5: Can't read superblock
Това съобщение обикновено се появява, когато се опитвате да монтирате външно USB устройство.USB устройство или дори вътрешна преграда който работеше безпроблемно доскоро. В много случаи това означава, че основният суперблок е повреден или че има сериозни несъответствия в метаданните.
Може да видите и по-дълги грешки, когато системата се опитва да монтира root-а. По време на стартиране, системата ви дава BusyBox shell (initramfs). Например, съобщения, показващи, че монтирането не може да бъде получено. /sys o /proc en /rootили че не може да се отвори /root/dev/consoleТова обикновено се случва, защото главният дял не може да бъде монтиран поради проблеми със суперблока или файловата система.
В този контекст, изпълнете fsck директно върху проблемния дял Може да върне грешки като: „fsck.ext4: Опитът за четене на блока на файловата система е довел до кратко четене… може ли това да е дял с нулева дължина?“. Това съобщение обикновено означава, че суперблокът, който се опитва да използва fsck е повредена или блоковата маса не пасва.
Преди да започнете сляпо да се опитвате да го поправите, е добре да се уверите, че проблемът е... Не е толкова просто, колкото проблем със захранването (много често срещано при Raspberry Pi, използващи USB устройства без собствено захранване). Когато захранването е недостатъчно, подсистемата за журналиране може да се повреди и системата монтира дяла като ext2 само за четене, за да избегне проблеми. На Pi например, на екрана може да се появи жълта светкавица или цветна кутия, което показва недостиг на захранване.
Ако след повторно сглобяване с sudo mount -a системата работи временноСмяната на захранването на 2,5A (в случая с Raspberry Pi) може да реши проблема. Ако обаче грешките в суперблока продължават след проверка на захранването и повторно сглобяване на системата, е време да се прибегне до плана за спасяване, използвайки резервни копия на суперблока и диагностични инструменти.
Използване на fsck и e2fsck с алтернативни суперблокове
Стандартният инструмент за проверка и поправка на ext2/ext3/ext4 системи es e2fsck, който обикновено извикваме чрез fsckВажно е винаги да се използва с немонтиран дял (или монтиран само за четене), за да се избегнат допълнителни повреди; самата документация подчертава това. Това е основният му синтаксис:
sudo fsck -b 32768 -p /dev/sdb5
С опция -b Посочваме номера на блока, където се намира копието. на суперблока, който искаме да използваме (например 32768) и с -p Заявихме автоматичен ремонт, без да се изисква взаимодействие при всяка промяна (старата опция -a Поддържа се за съвместимост, но се препоръчва да се използва -p).
В по-стари системи или ако искаме да видим целия процес стъпка по стъпкаМожем да се обадим директно e2fsck с алтернативния суперблок:
sudo e2fsck -b 32768 /dev/hda2
Проверката включва няколко фази. Кога e2fsck Завършва без критични грешки, можете опитайте се да сглобите отново разделяне на диска от Live CD или от нормалната система:
sudo mount /dev/hda2 /mnt
В много случаи, след поправка с помощта на резервно копие на суперблок, файловата система се връща в консистентно състояние и можете да получите достъп до данните си отново. От този момент нататък е разумно да архивирате всичко важно, в случай че по-късно възникнат отново проблеми.
Проверка за дефектни блокове и усъвършенствани инструменти
Когато започнат да се появяват грешки в суперблоковете, препоръчително е да се подозира както и физическото състояние на диска или устройството. Ако има лоши блокове в области, където се съхраняват критични суперблокове или метаданни, файловата система в крайна сметка ще се повреди многократно. Тези инструменти са много полезни:
лоши блокове
Инструментът badblocks Използва се за откриване на дефектни блокове на устройство (обикновено дял или цял диск). Може да работи в режим само за четене или в режим с деструктивен запис и поддържа различни опции:
-b: размер на блока в байтове (по подразбиране 1024).-e: максимален брой „възможни“ дефектни блокове преди прекъсване.-i <fichero>: прочетете списък с известни лоши блокове, за да не ги опитвате отново.-nбезразрушителен контрол (само за четене, не се комбинира с-w).-o <archivo>: запишете списъка с дефектните блокове във файл.-s: показва процента на напредъка.-w: деструктивен режим на запис (презаписва данни).
За да интегрирате тези резултати с файловата система ext често се използва e2fsck -c, което вътрешно извиква badblocks и добавя откритите дефектни блокове към списъка с „лоши блокове“ на системата, така че те да не се използват отново за нови файлове.
dumpe2fs
Друг мощен инструмент е dumpe2fsкойто показва пълен отчет на файловата система ext: размер на блока, UUID, размер на inode, време на монтиране, флагове, списък със суперблокове за архивиране, блокове, маркирани като лоши и др. Най-интересните му опции са:
-b: избройте само блоковете, маркирани като дефектни.-o superblock=<sb>: използвайте специфичен суперблок за изследване на устройството.-o blocksize=<bs>: принудително задаване на определен размер на блока (полезно при много повредени системи).-h: показва само информацията за суперблока.
tune2fs
Ако искате да регулирате работните параметри на файловата система ext (интервали на проверка, процент на блокове, резервирани за root, добавяне на журналиране към ext2 и др.), ключовият инструмент е tune2fs:
-c: максимален брой сглобки без преминаванеfsck.-C: задаване на текущия брой асемблирания.-i <tiempo>: максимален интервал между проверките (д, с, м).-j: добавя журналиране към ext2 (конвертира го в ext3/ext4).-m: процент блокове, резервирани за root (по подразбиране 5%).-rрезервиране на абсолютен брой блокове.-f: принудително изпълнение, дори ако има някои грешки.-g: резервни блокове за конкретна UNIX група.
отстраняване на грешки
За още по-ниски и хирургични операции има debugfsИнтерактивен дебъгер за ext файлови системи, който ви позволява да изследвате и променяте вътрешни структури. Някои от възможностите му включват:
-w: отваря файловата система в режим на четене/запис.-c: принудително отваряне в режим само за четене (полезно, ако има несъответствие).-f <archivo>: изпълнява списък от команди и излиза.
Веднъж вътре debugfsИмате команди като show_super_stats / stats да видите суперблокове, stat за да видите inode-а на файл, lsdel за да се изброят изтритите inode-и, undel да се опитате да възстановите изтрит файл, знаейки неговия inode, write за извличане на файлове в друга файлова система, в допълнение към еквивалентите на cd, rm, ln, mkdirи т.н. Това е швейцарско ножче, но трябва да се използва с изключително внимание.
Суперблокиране и поправка на други файлови системи (XFS, различни инструменти)
Въпреки че тук сме се фокусирали върху ext2/3/4, други файлови системи Те също имат свои собствени структури на „суперблокове“ и специфични инструменти за управлението им, както е в случая с XFS.
В XFS, най-подходящите помощни програми за проблеми с целостта И има няколко вида метаданни. Например, xfs_info Той показва техническа информация за монтираната файлова система XFS (за разлика от други инструменти, тук тя трябва да бъде монтирана).
За почистване на метаданни има xfs_metadump, което създава дъмп Метаданните на файловата система се запазват във файл за по-късен анализ. Важно е да се подчертае, че това не е инструмент за архивиране на данни, а инструмент за отстраняване на грешки.
-g: показване на напредъка на дъмпа.-e: игнорирай грешките при четене и копирай само това, което е достъпно.-f: показва, че файловата система е в обикновен файл.-w: показване на откритите грешки на екрана.
За да промените конфигурационните параметри на съществуващ XFS използвани xfs_admin, нещо като еквивалент на „ниско ниво“ на tune2fs но за XFS:
-jактивиране на журналиране версия 2.-ly-u: показване на етикета на файловата система и UUID.-L <Etiqueta>y-U <UUID>промяна на етикета и UUID.
Винаги трябва да демонтирате файловата система XFS преди да приложите промените с xfs_admin или да извършват разрушителни проверки, за да предотвратят повреди.
За да проверите съгласуваността в XFS, използвате xfs_check, който изследва съгласуваността на файловата система, и xfs_repair за да го поправите. И двете изискват файловата система да бъде демонтирана, с изключение на специалната опция на xfs_repair -d което позволява поправяне на система, монтирана в режим само за четене (напр. root) и изисква рестартиране след това:
xfs_check -f <archivo.img>: третирайте изображението като обикновен файл.xfs_check -l <log-file>външен лог.xfs_check -s: показва само сериозни грешки.xfs_repair -nНе го оправя, само показва какъв е проблемът.xfs_repair -P: деактивиране на предварителното четене на inode/директория.xfs_repair -m <maxmem>ограничаване на използването на RAM памет.xfs_repair -d: позволява поправка само за четене (специален случай).
Други инструменти като xfs_ncheck избройте inodes и идентифицирайте пътища към файлове или xfs_check Той определя дали системата е съвместима. Целият този арсенал е много полезен, когато проблемът не е файлова система ext4, а файлова система XFS, която е била повредена от прекъсване на захранването или хардуерен проблем.
Като цяло, разбирането какво представлява суперблокът и къде се съхраняват неговите копия и как да използвате инструменти като fsck, e2fsck, dumpe2fs, badblocks, debugfs Или помощните програми XFS ви поставят в много по-добра позиция да избегнете паника, когато в Linux се появят грешки за „лош суперблок“ и да вземете разумни решения между опит за възстановяване на данни, безопасно поправяне или просто възстановяване на дяла от нулата, когато няма какво повече да се запази.

