24 мая 2011 г.

Реанимация ext4.

Так случилось, что поимел сразу две напасти с ext4 после некорректного выключения компьютера. Напасть первая:
The superblock could not be read or does not describe a correct ext2 filesystem. If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193
И конечно, никакого успешного монтирования и доступа к данным. Поломатый superblock можно выцепить из многочисленных резервных копий, разбросанных по диску. Поглядеть номера можно, набрав mke2fs -n и поглядев в соответствующем поле "Superblock backups stored on blocks". Взяв любой адрес блока, нужно отдать его fsck'у (опция -b): e2fsck -b alt_superblock
Напасть вторая - при монтировании раздела имеем ошибку:

EXT4-fs (sda1): bad geometry: block count 19537408 exceeds size of device (19537166 blocks)

Вообще, подобного рода проблемы возникают в случае некорректного изменения размера тома. Однако в моем случае, хоть подобная операция и имела место быть (перенос с помощью clonezilla раздела на раздел), но проявилась не сразу, а после некоторого времени использования. Так или иначе, но в результате информация о размере файловой системы и размере диска стали различаться. Лечением в данном случае будет ручная корректировка оных.
Записываем таблицу разделов в файл:

sfdisk -d /dev/sda > PT.txt
 В полученном файле имеется строчка вида:

/dev/sda1 : start= 2048, size=156297328, Id=7
Так вот размер size= нужно заменить на значение block count (из сообщения об ошибке), увеличенное в 8 раз (блоки -> байты). То есть получится:
/dev/sda1 : start= 2048, size=156299264, Id=7
Далее, модифицируем таблицу разделов непосредственно на HDD:
sfdisk -f /dev/sda -O PT.save < PT.txt
Теперь монтирование  должно пройти успешно. Если есть сомнения в состоянии файловой системы, то смонтировать лучше с опцией -o ro, дабы вытащить требуемые данные, а затем проверив файловую систему fsck'ом.