что такое суперблок в ext4
Что такое суперблок в ext4
Информация, хранимая в суперблоке, используется для организации доступа к остальным данным на диске. В суперблоке определяется размер файловой системы, максимальное число файлов в разделе, объем свободного пространства и содержится информация о том, где искать незанятые участки. При запуске ОС суперблок считывается в память и все изменения файловой системы вначале находят отображение в копии суперблока, находящейся в ОП, и записываются на диск только периодически. Это позволяет повысить производительность системы, так как многие пользователи и процессы постоянно обновляют файлы. С другой стороны, при выключении системы суперблок обязательно должен быть записан на диск, что не позволяет выключать компьютер простым выключением питания. В противном случае, при следующей загрузке информация, записанная в суперблоке, окажется не соответствующей реальному состоянию файловой системы.
Суперблок имеет следующую структуру.
Название поля | Тип | Комментарий |
1.2em s_inodes_count | ULONG | Число индексных дескрипторов в файловой системе |
s_blocks_count | ULONG | Число блоков в файловой системе |
s_r_blocks_count | ULONG | Число блоков, зарезервированных для суперпользователя |
s_free_blocks_count | ULONG | Счетчик числа свободных блоков |
s_free_inodes_count | ULONG | Счетчик числа свободных индексных дескрипторов |
s_first_data_block | ULONG | Первый блок, который содержит данные. В зависимости от размера блока, это поле может быть равно 0 или 1 |
s_log_block_size | ULONG | Индикатор размера логического блока: 0 = 1 Кб; 1 = 2 Кб; 2 = 4 Кб |
s_log_frag_size | LONG | Индикатор размера фрагментов (кажется, понятие фрагмента в настоящее время не используется) |
s_blocks_per_group | ULONG | Число блоков в каждой группе блоков |
s_frags_per_group | ULONG | Число фрагментов в каждой группе блоков |
s_inodes_per_group | ULONG | Число индексных дескрипторов (inodes) в каждой группе блоков |
s_mtime | ULONG | Время, когда в последний раз была смонтирована файловая система |
s_wtime | ULONG | Время, когда в последний раз производилась запись в файловую систему s_mnt_count USHORT Счетчик числа монтирований файловой системы. Если этот счетчик достигает значения, указанного в следующем поле ( s_max_mnt_count ), файловая система должна быть проверена (это делается при перезапуске), а счетчик обнуляется |
s_max_mnt_count | SHORT | Число, определяющее, сколько раз может быть смонтирована файловая система |
s_magic | USHORT | «Магическое число» ( 0xEF53 ), указывающее, что файловая система принадлежит к типу ex2fs |
s_state | USHORT | Флаги, указывающее текущее состояние файловой системы (является ли она чистой ( clean ) и т.п.) |
s_errors | USHORT | Флаги, задающие процедуры обработки сообщений об ошибках (что делать, если найдены ошибки) |
s_pad | USHORT | Заполнение s_lastcheck ULONG Время последней проверки файловой системы |
s_checkinterval | ULONG | Максимальный период времени между проверками файловой системы |
s_creator_os | ULONG | Указание на тип ОС, в которой создана файловая система |
s_rev_level | ULONG | Версия (revision level) файловой системы |
s_reserved | ULONG[235] | Заполнение до 1024 байт |
Суперблок в линуксе
Что такое суперблок в Линуксе. Попробуем разобраться на примере файловой системы ext(2|3|4), которая используется в линуксе по-умолчанию. Но для начала рассмотрим несколько простых понятий
Блок файловой системы
После форматирования диска или раздела сектора на диске разделены на небольшие группы. Такая группа секторов называется блоком. Размер блока может быть разным и задается как параметр ключа команды форматирования. Например
Размер блока может быть разным. Это зависит от типа файловой системы
При выборе размера блока нужно учесть ряд моментов
Размер блока влияет на скорость чтения/записи с диска. Представим себе файл размеров в несколько сот мегабайт, который считывается с диска блоками по 1Кб. Тот же файл будет считываться быстрее если размер блока файловой системы будет 4Кб или 8Кб. Это ясно. Поэтому при форматировании имеет смысл задать блок большего размера, если планируется использовать файлы большого размера
Также верно и обратное утверждение. В случае хранения небольших файлов лучше использовать блоки минимального размера
Ядро Linux работает с размером блока файловой системы, а не с размером сектора диска (обычно 512 байт). Важно понимать, что размер блока файловой системы не может быть меньше размера сектора диска и всегда будет кратным ему. Также ядро ожидает, что размер блока файловой системы будет меньше или равно размеру системной страницы
Размер системной страницы можно увидеть выполнив команду
Группы блоков файловой системы
Блоки, о которых мы говорили ранее обьеденяются в группы блоков, что позитивно отражается на операциях чтения/записи так как уменьшается время чтения/записи больших обьемов данных
Файловая система EXT разбивает все доспупное пространство на группы блоков равного размера. Эти группы располагаются последовательно, одна за другой
Загрузочный блок | Группа блоков 1 | Группа блоков 2 | Группа блоков 2 | Группа блоков 3 |
Количество блоков в группе неизменно и может быть расчитано по формуле
Взглянем на вывод команды mke2fs
Отметим то, о чем говорили выше
Также видны блоки в которых хранятся резервные копии суперблока
Так что же такое суперблок?
Самым простым определением суперблока могло бы быть следующее утверждение
Суперблок — это блок в котором хранятся метаданные файловой системы
Аналогично тому, как i-ноды хранят метаданные о файлах, суперблок хранит метаданные о файловой ситеме. Если вдруг суперблок поврежден, то не возможно будет примонтировать файловую систему. Обычно при загрузке система проверяет суперблок и при необходимости исправляет его, что в результате приводит к корректному монтированию файловых систем
Некоторые данные, которые хранятся в суперблоке. Например
Основная копия суперблока хранится в самой первой группе блоков. Она названа основной, потому что считывается системой в процессе монтирования файловой системы. Так как отсчет блоковых групп начинается с 0 то можно говорить о том, что суперблок хранится в начале блоковой группы 0
Суперблок весьма критичен для файловой системы. Поэтому в каждой блоковой группе есть копии суперблока. Это дает нам право думать, что поврежденный суперблок будет восстановлен всякий раз, когда это будет необходимо
Может показаться, что наличие в каждой блоковой группе резервных копий суперблока приводит к потреблению большого дискового пространства. Для этого в последних версиях систем была реализована функция «sparse_super» целью которой было создание резервных копий в группе блоков 0, 1, 3, 5, 7
Как увидеть, что хранится в суперблоке?
Для этого воспользуемся командой dumpe2fs
Еще один вывод команды показывает информацию о суперблоке
Как восстановить поврежденный суперблок?
Для начала нужно проверить файловую систему утилитой fsck
В случае если fsck обнаружила ошибку чтения суперблока можно попробовать сделать следующее:
Для начала определим где расположены резервные копии суперблока. Для этого выполняем
Далее восстановливаем суперблок из бекапа при помощи e2fsck
В данном случае в блоке 819200 хранится резервная копия суперблока. После применения команды пробуем снова монтировать файловую систему. Либо как вариант использовать ключ sb команды mount, который указывает на расположение копии суперблока
В данном случае считываем копию суперблока из блока 819200
Системный администратор. В сисадминстве с 2000 года. Участник Хабр Q&A и cyberforum
Что такое суперблок в ext4
Суперблок содержит информацию, необходимую для монтирования и управления работой файловой системы в целом (например, для размещения новых файлов).
Блок файловой системы
После форматирования диска или раздела сектора на диске разделены на небольшие группы. Такая группа секторов называется блоком. Размер блока может быть разным и задается как параметр ключа команды форматирования. Например
Размер блока может быть разным. Это зависит от типа файловой системы
При выборе размера блока нужно учесть ряд моментов
Размер блока влияет на скорость чтения/записи с диска. Представим себе файл размеров в несколько сот мегабайт, который считывается с диска блоками по 1Кб. Тот же файл будет считываться быстрее если размер блока файловой системы будет 4Кб или 8Кб. Это ясно. Поэтому при форматировании имеет смысл задать блок большего размера, если планируется использовать файлы большого размера
Также верно и обратное утверждение. В случае хранения небольших файлов лучше использовать блоки минимального размера
Ядро Linux работает с размером блока файловой системы, а не с размером сектора диска (обычно 512 байт). Важно понимать, что размер блока файловой системы не может быть меньше размера сектора диска и всегда будет кратным ему. Также ядро ожидает, что размер блока файловой системы будет меньше или равно размеру системной страницы
Размер системной страницы можно увидеть выполнив команду
Группы блоков файловой системы
Блоки, о которых мы говорили ранее обьеденяются в группы блоков, что позитивно отражается на операциях чтения/записи так как уменьшается время чтения/записи больших обьемов данных
Файловая система EXT разбивает все доспупное пространство на группы блоков равного размера. Эти группы располагаются последовательно, одна за другой
Загрузочный блок | Группа блоков 1 | Группа блоков 2 | Группа блоков 2 | Группа блоков 3 |
Количество блоков в группе неизменно и может быть расчитано по формуле
Взглянем на вывод команды mke2fs
Отметим то, о чем говорили выше
Также видны блоки в которых хранятся резервные копии суперблока
Так что же такое суперблок?
Самым простым определением суперблока могло бы быть следующее утверждение
Суперблок — это блок в котором хранятся метаданные файловой системы
Аналогично тому, как i-ноды хранят метаданные о файлах, суперблок хранит метаданные о файловой ситеме. Если вдруг суперблок поврежден, то не возможно будет примонтировать файловую систему. Обычно при загрузке система проверяет суперблок и при необходимости исправляет его, что в результате приводит к корректному монтированию файловых систем
Некоторые данные, которые хранятся в суперблоке. Например
Основная копия суперблока хранится в самой первой группе блоков. Она названа основной, потому что считывается системой в процессе монтирования файловой системы. Так как отсчет блоковых групп начинается с 0 то можно говорить о том, что суперблок хранится в начале блоковой группы 0
Суперблок весьма критичен для файловой системы. Поэтому в каждой блоковой группе есть копии суперблока. Это дает нам право думать, что поврежденный суперблок будет восстановлен всякий раз, когда это будет необходимо
Может показаться, что наличие в каждой блоковой группе резервных копий суперблока приводит к потреблению большого дискового пространства. Для этого в последних версиях систем была реализована функция «sparse_super» целью которой было создание резервных копий в группе блоков 0, 1, 3, 5, 7
Как увидеть, что хранится в суперблоке?
Для этого воспользуемся командой dumpe2fs
Еще один вывод команды показывает информацию о суперблоке
Как восстановить поврежденный суперблок?
Для начала нужно проверить файловую систему утилитой fsck
В случае если fsck обнаружила ошибку чтения суперблока можно попробовать сделать следующее:
Для начала определим где расположены резервные копии суперблока. Для этого выполняем
Далее восстановливаем суперблок из бекапа при помощи e2fsck
В данном случае в блоке 819200 хранится резервная копия суперблока. После применения команды пробуем снова монтировать файловую систему. Либо как вариант использовать ключ sb команды mount, который указывает на расположение копии суперблока
В данном случае считываем копию суперблока из блока 819200
Экстенты, файлы, суперблоки. Как работают файловые системы ext3 и ext4 и как в них восстанавливать данные
Содержание статьи
В 2006 году вышла в свет книга Криса Касперски «Восстановление данных», которая быстро стала бестселлером. Сейчас эта книга готовится к переизданию. Мы публикуем отрывок из этой книги, посвященный восстановлению данных в файловых системах ext.
Ошибочное удаление файлов в *NIX — это достаточно распространенное явление, наверное, даже более частое, чем в мире Microsoft. Под Windows большинство файловых операций выполняется вручную с помощью проводника или других интерактивных средств типа FAR или Total Commander. Интерактивные среды есть и в Linux (KDE, GNOME, XFCE…), но немалая часть фанатов Linux — поклонники командной строки. Командная же строка — это регулярные выражения и скрипты, то есть автоматизированные средства управления — мощные, удобные и, при неправильном использовании, разрушительные. Малейшая небрежность — и можешь навсегда попрощаться со своими файлами!
Перефразируя Булгакова, можно сказать: мало того что файл смертен, так он еще и внезапно смертен! Беда никогда не предупреждает о своем приходе, и администратору приходится быть постоянно начеку. Несколько секунд назад все было хорошо: цвела весна, винчестер оживленно стрекотал всеми своими головками, администратор отхлебывал кофе из черной кружки с надписью root, как вдруг сотни гигабайт ценнейших данных внезапно разлетелись на мелкие осколки. Все силы брошены на разгребание завалов и спасение всех, кого еще можно спасти.
Доступность исходных текстов драйвера файловой системы значительно упрощает исследование ее внутренней структуры, которая, кстати говоря, очень проста. Поэтому восстановление данных на разделах ext2/3/4 — задача тривиальная.
Знакомьтесь! Семейство расширенных файловых систем
Изначально Linux был чем‑то вроде вольного пересказа ОС Minix, разработка велась под ней же, и работали первые версии Linux на файловой системе Minix. Называлась та незамысловато — MINIX file system — и, в свою очередь, была вдохновлена файловой системой UNIX — UFS. Но, поскольку сама Minix разрабатывалась скорее в учебных целях, ее файловая система не обладала широкими возможностями. Например, размер раздела не мог превышать 64 Мбайт, а максимальная длина имени файла — 14 или 30 символов в зависимости от версии. Чтобы преодолеть такие ограничения, начали разрабатывать собственную ФС для Linux.
Немного об истоках
Новая файловая система расширяла возможности MINIXfs, за что, видимо, и получила название extended filesystem. Первая реализация расширенной файловой системы, ext fs, увидела свет в 1992 году в ядре Linux версии 0.96c. Теперь приверженцы Linux были ограничены двумя гигабайтами для раздела, а файлы могли иметь имя длиной до 255 символов. Тем не менее эта ФС была все еще сравнительно проста, поэтому дальнейшее ее развитие не заставило себя долго ждать. Примерно в это же время, кстати, в Linux появился такой уровень абстракции, как виртуальная файловая система (VFS), облегчающий добавление поддержки новых ФС в ядро.
С появлением через пару лет ext2 максимальные размеры файла и файловой системы возросли до 16 Гбайт и 2 Тбайт соответственно (при размере блока 1 Кбайт). Часть блоков (обычно 5%) теперь резервировалась под рут, не позволяя обычным пользователям заполнить весь раздел без остатка. Тогда эта ФС стала практически стандартом де‑факто на линуксах, а ее реализации, говорят, были и под NT.
Поколение ext3
Третья расширенная файловая система (Third extended file system, ext3) появилась почти двадцать лет назад в одной из версий Linux 2.4.14. Она во многом напоминает свою предшественницу, ext2, но отличается поддержкой журналирования (в терминологии NTFS — транзакций). В отличие от ext2fs, она намного бережнее относится к массиву каталогов, хотя, как мы увидим чуть далее, нам это не сильно поможет.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Экстенты, файлы, суперблоки. Как работают файловые системы ext3 и ext4 и как в них восстанавливать данные
В 2006 году вышла в свет книга Криса Касперски «Восстановление данных», которая быстро стала бестселлером. Сейчас эта книга готовится к переизданию. Мы публикуем отрывок из этой книги, посвященный восстановлению данных в файловых системах ext.
Ошибочное удаление файлов в *NIX — это достаточно распространенное явление, наверное, даже более частое, чем в мире Microsoft. Под Windows большинство файловых операций выполняется вручную с помощью проводника или других интерактивных средств типа FAR или Total Commander. Интерактивные среды есть и в Linux (KDE, GNOME, XFCE…), но немалая часть фанатов Linux — поклонники командной строки. Командная же строка — это регулярные выражения и скрипты, то есть автоматизированные средства управления — мощные, удобные и, при неправильном использовании, разрушительные. Малейшая небрежность — и можешь навсегда попрощаться со своими файлами!
Перефразируя Булгакова, можно сказать: мало того что файл смертен, так он еще и внезапно смертен! Беда никогда не предупреждает о своем приходе, и администратору приходится быть постоянно начеку. Несколько секунд назад все было хорошо: цвела весна, винчестер оживленно стрекотал всеми своими головками, администратор отхлебывал кофе из черной кружки с надписью root, как вдруг сотни гигабайт ценнейших данных внезапно разлетелись на мелкие осколки. Все силы брошены на разгребание завалов и спасение всех, кого еще можно спасти.
Доступность исходных текстов драйвера файловой системы значительно упрощает исследование ее внутренней структуры, которая, кстати говоря, очень проста. Поэтому восстановление данных на разделах ext2/3/4 — задача тривиальная.
ЗНАКОМЬТЕСЬ! СЕМЕЙСТВО РАСШИРЕННЫХ ФАЙЛОВЫХ СИСТЕМ
Изначально Linux был чем‑то вроде вольного пересказа ОС Minix, разработка велась под ней же, и работали первые версии Linux на файловой системе Minix. Называлась та незамысловато — MINIX file system — и, в свою очередь, была вдохновлена файловой системой UNIX — UFS. Но, поскольку сама Minix разрабатывалась скорее в учебных целях, ее файловая система не обладала широкими возможностями. Например, размер раздела не мог превышать 64 Мбайт, а максимальная длина имени файла — 14 или 30 символов в зависимости от версии. Чтобы преодолеть такие ограничения, начали разрабатывать собственную ФС для Linux.
Немного об истоках
Новая файловая система расширяла возможности MINIXfs, за что, видимо, и получила название extended filesystem. Первая реализация расширенной файловой системы, ext fs, увидела свет в 1992 году в ядре Linux версии 0.96c. Теперь приверженцы Linux были ограничены двумя гигабайтами для раздела, а файлы могли иметь имя длиной до 255 символов. Тем не менее эта ФС была все еще сравнительно проста, поэтому дальнейшее ее развитие не заставило себя долго ждать. Примерно в это же время, кстати, в Linux появился такой уровень абстракции, как виртуальная файловая система (VFS), облегчающий добавление поддержки новых ФС в ядро.
С появлением через пару лет ext2 максимальные размеры файла и файловой системы возросли до 16 Гбайт и 2 Тбайт соответственно (при размере блока 1 Кбайт). Часть блоков (обычно 5%) теперь резервировалась под рут, не позволяя обычным пользователям заполнить весь раздел без остатка. Тогда эта ФС стала практически стандартом де‑факто на линуксах, а ее реализации, говорят, были и под NT.
Поколение ext3
Третья расширенная файловая система (Third extended file system, ext3) появилась почти двадцать лет назад в одной из версий Linux 2.4.14. Она во многом напоминает свою предшественницу, ext2, но отличается поддержкой журналирования (в терминологии NTFS — транзакций). В отличие от ext2fs, она намного бережнее относится к массиву каталогов, хотя, как мы увидим чуть далее, нам это не сильно поможет.
Смещение Размер Описание
0 1 boot record ; Загрузочный сектор
(1024 bytes) 1 superblock ; Суперблок
2 1 group descriptors ; Дескриптор группы
3 1 block bitmap ; Карта свободных блоков
4 1 inode bitmap ; Карта свободных inode
5 214 inode table ; Массив inode (сведения о файлах)
219 7974 data blocks ; Блоки данных (файлы, каталоги)
819 1 superblock backup ; Копия суперблока
819 1 group descriptors backup ; Копия дескриптора группы
819 1 block bitmap ; Карта свободных блоков
819 1 inode bitmap ; Карта свободных inode
819 214 inode table ; Массив inode (сведения о файлах)
840 7974 data blocks ; Блоки данных (файлы, каталоги)
16385 1 block bitmap ; Карта свободных блоков
16386 1 inode bitmap ; Карта свободных inode
16387 214 inode table ; Массив inode (сведения о файлах)
16601 3879 data blocks ; Блоки данных (файлы, каталоги)
Вслед за суперблоком идут дескрипторы групп ( group descriptors ) и карты свободного пространства, они же битовые карты ( block bitmap / inode bitmap ), которые не имеют большого практического значения для наших целей. Что же касается таблицы инод, расположенной за ними, то она заслуживает более подробного рассмотрения. В ext3fs (как и многих других файловых системах из мира UNIX) так называемый индексный дескриптор (inode, он же инода) играет ту же самую роль, что и файловая запись в NTFS. Здесь сосредоточена вся информация о файле, кроме его имени: тип файла (обычный файл, каталог, символьная ссылка и так далее), его логический и физический размер, схема размещения на диске, время создания, модификации, последнего доступа или удаления, права доступа, а также ссылки на файл. Формат представления иноды в ext3 выглядит так:
Смещение Размер Описание
0 2 i_mode ; Формат представления
2 2 i_uid ; UID пользователя
4 4 i_size ; Размер файла в байтах
8 4 i_atime ; Время последнего доступа к файлу
12 4 i_ctime ; Время создания файла
16 4 i_mtime ; Время модификации файла
20 4 i_dtime ; Время удаления файла
24 2 i_gid ; GID группы
26 2 i_links_count ; Количество ссылок на файл (0 — файл удален)
28 4 i_blocks ; Количество блоков, принадлежащих файлу
32 4 i_flags ; Различные флаги
36 4 i_osd1 ; Значение, зависящее от ОС
40 12×4 i_block ; Ссылки на первые 12 блоков файла
88 4 i_iblock ; 1x INDIRECT BLOCK
92 4 i_2iblock ; 2x INDIRECT BLOCK
96 4 i_3iblock ; 3x INDIRECT BLOCK
100 4 i_generation ; Поколение файла (используется NFS)
104 4 i_file_acl ; ACL файла
108 4 i_dir_acl ; ACL директории
112 4 i_faddr ; Положение последнего фрагмента
116 12 i_osd2 ; Структура, зависящая от ОС
По сравнению с NTFS такая схема хранения информации о размещении устроена намного проще. Вместе с тем она и гораздо «прожорливее». С другой стороны, ее несомненное достоинство по сравнению с NTFS состоит в том, что, поскольку все ссылки хранятся в неупакованном виде, для каждого блока файла можно быстро найти соответствующий ему косвенный блок, даже если inode полностью разрушен!
Имя файла, как уже сказано, в inode не хранится. Ищи его внутри каталогов, представляющих собой массив записей, формат которого выглядит так:
Смещение Размер Описание
0 4 inode ; Ссылка на inode
4 2 rec_len ; Длина данной записи
6 1 name_len ; Длина имени файла
7 1 file_type ; Тип файла
При удалении файла операционная система находит соответствующую запись в каталоге, обнуляет поле inode и увеличивает размер предшествующей записи (поле rec_len ) на величину удаляемой записи. Таким образом, предшествующая запись «поглощает» удаленную. Хотя имя файла в течение некоторого времени остается нетронутым, ссылка на соответствующий ему индексный дескриптор ( inode ) оказывается уничтоженной. Это создает проблему, так как теперь придется разбираться, какому файлу принадлежит обнаруженное имя.
Отдельно стоит поговорить о журнале файловой системы. Он гарантирует целостность файловой системы в случае непредвиденных сбоев. При этом важно понимать, что целостность файловой системы совсем не означает сохранность файлов!
Тем не менее наличие журнала играет важную роль при восстановлении данных в ext3/4, поскольку информация в нем зачастую помогает восстанавливать взаимосвязи элементов каталогов, инод и содержимого файлов (если она, конечно, еще не была затерта новыми событиями файловой системы). Вот одна из причин, почему важно как можно скорее отмонтировать раздел со случайно удаленными файлами!
Журнал файловой системы ext3 (да и ext4) может работать в трех режимах, и от выбора будет зависеть как надежность, так и производительность:
В самом индексном дескрипторе при удалении файла тоже происходят большие изменения. Количество ссылок ( i_links_count ) обнуляется и обновляется поле, хранящее время последнего удаления ( i_dtime ). Все блоки, принадлежащие файлу, в карте свободного пространства ( block bitmap ) помечаются как неиспользуемые, после чего данный inode также освобождается (обновляется inode bitmap ).
Что принесла нам ext4?
Потолок разделов ext3 составляет 16 Тбайт. И если обычным пользователям это ограничение до лампочки, то в корпоративных сегментах оно приносит неудобства. К тому же использование битовых карт на больших разделах (начиная примерно с 1 Тбайт) заметно нагружает ЦП. В результате примерно в ядре версии 2.6.19 появилась ext4fs. Она не так совместима с ext3, как та совместима с ext2, хотя ext3-раздел можно примонтировать как ext4 и наоборот (но тогда теряется смысл нововведений в последней ФС). Более того, разработчики предусмотрели возможность перехода с ext3 на ext4 без переформатирования раздела.
Одно из главных улучшений четвертой расширенной файловой системы — использование дерева экстентов вместо карты свободных и занятых блоков, благодаря чему она намного эффективнее управляется с большими файлами. Это улучшает масштабируемость на разделы больших объемов. В то же время механизм экстентов позволяет уменьшать фрагментацию файлов, копируя фрагментированные части в непрерывные экстенты.
Также в ext4 появился механизм контрольных сумм журнала, гарантирующий, что в файловую систему будут внесены корректные изменения. Но, как и предшественница, ext4 может работать вообще без журнала, что немного улучшает ее производительность, но неизбежно ухудшает надежность файловой системы. Тем не менее данный режим можно назвать более предпочтительным для устройств на основе флеш‑памяти, поскольку очень частые изменения файла журнала расходуют ресурс ячеек памяти.
В общем, казалось бы, с такими новшествами наши данные должны зажить новой жизнью, не зная горестей! Но они по‑прежнему могут пропасть по многочисленным причинам. Что же на это скажет нам ext4?
Структура блоков ext4 не сильно отличается от имеющейся в ext3. Немного бо́льшие изменения ожидали структуру индексных дескрипторов. Во‑первых, она приобрела новые поля, стала вдвое объемнее и занимает минимум 256 байт. Это позволяет ей хранить, например, метки времени с наносекундной точностью (раньше была точность до секунды), счетчик изменений файла (он дает клиенту NFS возможность понять, изменился ли файл на стороне сервера), а также версию inode и ее контрольную сумму.
Получить содержимое служебных данных файловой системы в удобочитаемом виде ты можешь с помощью команды fsstat :
FILE SYSTEM INFORMATION
File System Type: Ext4
Compat Features: Journal, Ext Attributes, Resize Inode, Dir Index
InCompat Features: Filetype, Needs Recovery, Extents, Flexible Block Groups,
Read Only Compat Features: Sparse Super, Large File, Huge File, Extra Inode Size
Free Inodes: 1313879
Orphan Inodes: 1456398, 1456397, 1456396, 1456395, 1456394,
Block Groups Per Flex Group: 16
Free Blocks: 4295049
Удаление файла в ext4 происходит в целом так же, как и в ext3: в записи каталога обнуляется поле inode и предшествующая запись поглощает удаляемую. В журнал при этом вносятся соответствующие записи. Также, благодаря использованию экстентов, удаление больших файлов в ext4 быстрее, чем в ext3.
В ПОИСКАХ УТРАЧЕННЫХ ДАННЫХ
В первую очередь обязательно размонтируй дисковый раздел или, на худой конец, перемонтируй его в режим «только чтение». Лечение активных разделов зачастую лишь увеличивает масштабы разрушений. Если восстанавливаемые файлы находятся на основном системном разделе, у нас два пути — загрузиться с Live CD или подключить восстанавливаемый жесткий диск на Linux-машину вторым.
Особенности восстановления файлов в ext3
В ext3fs полное восстановление файлов невозможно, даже если эти файлы были только что удалены. В этом отношении данная файловая система проигрывает как FAT, так и NTFS. Как минимум — теряется имя файла. Точнее говоря, как минимум теряется связь имен файлов с их содержимым. При удалении небольшого количества хорошо известных файлов эта проблема остается решаемой. Однако ситуация серьезно осложняется, если ты удалил несколько служебных подкаталогов, в которых никогда раньше не заглядывали.
В целом стратегия восстановления выглядит приблизительно так: сканируем таблицу индексных дескрипторов ( inode table ) и отбираем все записи, чье поле i_links_count равно нулю. Сортируем их по дате удаления, чтобы файлы, удаленные последними, оказались в верхних позициях списка. Как вариант, если ты помнишь примерное время удаления файла, можно просто наложить фильтр.
А что с ext4?
По сути, процесс восстановления файлов (вернее, проблемы, препятствующие этому) тот же, что и в ext3. Однако лет этак десять назад появилась утилита с замечательным названием ext4magic (которая, впрочем, умеет работать и с разделами ext3). Она уже несколько лет не обновлялась, но и сами структуры ФС тоже по большей части сформировались давно.
Эта программа в отдельных случаях способна спасти не только файлы, но и их названия вместе со всеми атрибутами! Важную роль при восстановлении играет состояние журнала, которое и позволяет реконструировать взаимосвязь файлов с описывающей их служебной информацией — элементами каталогов и индексными дескрипторами. Естественно, чем меньше прошло времени и сделано изменений в файловой системе с момента удаления файлов, тем больше вероятность их успешно восстановить. После случайного удаления файла следует как можно быстрее отмонтировать ФС и по возможности создать образ восстанавливаемого раздела и работать уже с ним. Что ж, в этом деле без магии (и бубна) никак!
Следующая команда возвращает из небытия файлы, которые утилита сочла удаленными за последние 24 часа. По умолчанию они сохраняются в папку RECOVERDIR в рабочем каталоге.
WARNING
Не забывай, что восстанавливать файлы на сам восстанавливаемый раздел — очень плохая затея!
Более того, сейчас, когда Linux далеко не только «конструктор для гиков», ext4magic уже не единственная тулза, умеющая восстанавливать файлы на ext-разделах. Вообще говоря, таким утилитам можно посвятить отдельную статью, но на всякий случай твои драгоценные данные могут спасти: DMDE, PhotoRec (от создателей утилиты testdisk ), The Sleuth Kit, foremost.
Также существует утилита R-Studio, поддерживающая и восстановление с разделов ext2/3/4. Есть версия и под Linux, а еще — бесплатный продукт под названием R-linux, работающий исключительно с семейством расширенных файловых систем. Вообще говоря, часть из перечисленных программ восстанавливает файлы по их сигнатурам из сырых образов разделов. Они, считай, не зависят от используемой ФС, но в то же время не помогут восстановить имена файлов и структуру каталогов и малополезны при фрагментации файлов.
ОН ВЫЖИВЕТ?
Файлам — жить! Даже если им случилось попасть под горячую руку не на разделе NTFS. И чем меньше времени прошло с момента неудачного удаления, тем больше шансов на успешное восстановление. Особенно если вовремя размонтировать разделы, внимательно проверять вводимые команды и вовремя делать резервные копии. Ты ведь сделал бэкап?