Рис. 2.10. Sector Inspector за работой
Программ, пригодных для восстановления данных, под Linux совсем немного. Фактически их намного меньше, чем под Windows NT, да и тем, что имеются, до совершенства далеко, как до Луны. Но ведь не разрабатывать же весь необходимый инструментарий самостоятельно?! Будем использовать то, что дают, утешая себя тем, что программистам первых поколений, работавшим на "большом железе" (динозаврах машинной эры), приходилось намного сложнее.
Чаще всего под Linux для редактирования дисков используется программа lde (Linux Disk Editor). Конечно, этой программе еще далеко до Norton Disk Editor, однако это уже и не Microsoft Disk Probe. Linux disk editor — это профессионально-ориентированный редактор консольного типа, снабженный разумным набором функциональных возможностей (рис. 2.11). Список поддерживаемых файловых систем включает ext2fs, minix, xiafs и, отчасти, FAT. В перспективе разработчики обещают реализовать поддержку NTFS.
Рис. 2.11. Дисковый редактор LDE (Linux Disk Editor)
Примечание
Честно говоря, поддержка NTFS в Linux нужна не так уж и сильно, а вот отсутствие в этом списке таких файловых систем, как UFS и FFS, очень огорчает.
Lde обеспечивает следующие возможности:
□ просмотр и редактирование содержимого секторов в HEX-формате;
□ просмотр супер-блока (super-block), файловых записей (inode) и каталогов в удобочитаемом виде;
□ контекстный поиск;
□ поиск файловых записей, ссылающихся на данный блок (полезная возможность, но, к сожалению, реализованная кое-как и срабатывающая далеко не всегда);
□ режим восстановления с ручным редактированием списка прямых/косвенных блоков;
□ сброс дампа на диск;
□ некоторые другие второстепенные операции.
Редактор может работать как в пакетном, так и в интерактивном режимах. В пакетном режиме все управление осуществляется посредством командной строки, что позволяет полностью или частично автоматизировать некоторые рутинные операции.
Распространяется в исходных текстах (http://lde.sourceforge.net/), работает практически под любой UNIX-совместимой операционной системой (включая FreeBSD). Наконец, этот редактор входит во все "правильные" дистрибутивы (например, в KNOPPIX).
Работа с lde на первых порах производит довольно странное впечатление. По крайней мере, я чувствовал себя так, как если бы пересел с IBM PC на УКНЦИ/ZX Spectrum или из современного человека превратился в неандертальца, вынужденного добывать огонь трением. Впрочем, со временем это проходит (программист, как известно, существо неприхотливое и ко всему привыкающее). Как вариант, можно загрузиться со "спасательной дискеты" и использовать знакомый Norton Disk Editor или Runtime NT Explorer, запущенной из-под Windows РЕ. С одной стороны это удобно (привычный интерфейс и все такое), с другой — ни Disk Editor, ни NT Explorer не поддерживают ext2fs/ext3fs, и все структуры данных приходится декодировать вручную.
Шестнадцатеричные редакторы
UNIX — это вам не Windows! Без дисковых редакторов здесь, в принципе, можно и обойтись. Берем любой hex-редактор, открываем соответствующее дисковое устройство (например, /dev/sdb1) и редактируем его в свое удовольствие.
Программисты старшего поколения, должно быть, помнят, как во времена первой молодости MS-DOS, когда еще не существовало таких средств, как HIEW или QVIEW, правка исполняемых файлов на предмет "отлома" ненужного 7xh обычно осуществлялась редактором DiskEdit. Иными словами, дисковый редактор использовался как hex-редактор. В UNIX, наоборот, hex-редакторы используются для редактирования диска.
Какой редактор выбрать? В общем-то, это дела вкуса (причем, не только вашего, но еще и составителя дистрибутива). Одни предпочитают консольный редактор hexedit (рис. 2.12), другие тяготеют к графическому редактору khexdedit (рис. 2.13), а третьи выбирают BIEW (урезанная версия всем известного редактора HIEW).
Рис. 2.12. Внешний вид редактора hexedit
Рис. 2.13. Внешний вид редактора khexedit
Автоматизированные дисковые утилиты
Более убогой утилиты, чем chkdsk (рис. 2.14) — стандартный дисковый "доктор", входящий в штатный комплект поставки Windows, — по-видимому, не придумать даже сценаристам из Голливуда. Система диагностики ошибок упрощена до минимума — доктор лишь информирует о факте их наличия, но отказывается говорить, что именно, по его мнению, повреждено и что он собирается лечить, поэтому последствия такого "врачевания" могут носить фатальный характер.
Рис. 2.14. Утилита chkdsk за работой
Известно много случаев, когда chkdsk залечивал до смерти полностью исправные разделы. Например, в листинге 2.1 приведен протокол лечения практически здорового диска с одной-единственной поверженной файловой записью (FILE RECORD). После этого "лечения" я не досчитался многих файлов. С другой стороны, успешно проведенных операций восстановления на его счету намного больше. Обычно он используется неквалифицированными пользователями (и администраторами) для периодической проверки разделов и исправления мелких искажений файловой системы.
В мире UNIX проверка целостности файловой системы обычно осуществляется программой fsck (аналог chkdsk под Windows NT), представляющей собой консольную утилиту, практически лишенную пользовательского интерфейса и входящую в штатный комплект поставки любого дистрибутива. Как и любое другое полностью автоматизированное средство, она не только лечит, но, случается, что и калечит, так что пользоваться ею следует с большой осторожностью.
Листинг. 2.1. Протокол лечения практически здорового диска с одной-единственной поверженной FILE RECORD
One of your disks needs to be checked for consistency. You
may cancel the disk check, but it is strongly recommended that you continue.
Windows will now check the disk.
The VCN 0x9 of index $130 in file 0x1a is inconsistence with
the VCN 0x0 stored inside the index buffer.
Correcting error in index $I30 for file 26.
The index bitmap $I30 in file 0x1a is incorrect.
Correcting error in index $I30 for file 26.
The down pointer of current index entry with length 0x70 is invalid.
0b 01 00 00 00 00 01 00 70 00 58 00 01 00 00 00 ........p.X.....
1a 00 00 00 00 00 01 00 00 c0 4c bb 5a 94 bf 01 ..........L.Z...
00 c0 4c bb 5a 94 bf 01 c0 3a 15 55 97 ea c4 01 ..L.Z....:.U....
f0 54 e1 71 7a ea c4 01 00 10 01 00 00 00 00 00 .T.qz...........
22 02 01 00 00 00 00 00 20 00 00 00 00 00 00 00 "........ ......
0b 03 63 00 5f 00 32 00 30 00 38 00 36 00 36 00 ..с._.2.0.8.6.6.
2e 00 6e 00 6c 00 73 00 ff ff ff ff ff ff ff ff ..n.l.s.........
1f 01 00 00 00 00 01 00 70 00 54 00 01 00 00 00 ........p.T.....
Sorting index $I30 in file 26.
Cleaning up minor inconsistencies on the drive.
CHKDSK is recovering lost files.
Recovering orphaned file c_037.nls (253) into directory file 26.
Recovering orphaned file c_10000.nls (254) into directory file 26.
Recovering orphaned file c_10079.nls (255) into directory file 26.
Recovering orphaned file c_1026.nls (256) into directory file 26.
Recovering orphaned file c_1250.nls (257) into directory file 26.
Recovering orphaned file c_1251.nls (258) into directory file 26.
Recovering orphaned file c_1252.nls (259) into directory file 26.
Recovering orphaned file c_1253.nls (260) into directory file 26.
Recovering orphaned file c_1254.nls (261) into directory file 26.
Recovering orphaned file c_1255.nls (262) into directory file 26.
Recovering orphaned file c_1256.nls (263) into directory file 26.
Recovering orphaned file c_1257.nls (264) into directory file 26.
Recovering orphaned file c_1258.nls (265) into directory file 26.
Recovering orphaned file c_20261.nls (266) into directory file 26.
Recovering orphaned file cryptext.dll (412) into directory file 26.
Recovering orphaned file ctl3dv2.dll (422) into directory file 26.
Recovering orphaned file ctype.nls (423) into directory file 26.
Recovering orphaned file CSRSRV.DLL (880) into directory file 26.
Recovering orphaned file cryptdll.dll (2206) into directory file 26.
Recovering orphaned file ctl3d32.dll (2441) into directory file 26.
Recovering orphaned file c_10007.nls (2882) into directory file 26.
Recovering orphaned file c_10017.nls (2883) into directory file 26.
Recovering orphaned file c_20127.nls (2916) into directory file 26.
Recovering orphaned file csseqchk.dll (4019) into directory file 26.
Recovering orphaned file cscript.exe (4335) into directory file 26.
Recovering orphaned file cscdll.dll (4661) into directory file 26.
Recovering orphaned file CRYPTDLG.DLL (5125) into directory file 26.
Recovering orphaned file cryptsvc.dll (5127) into directory file 26.
Recovering orphaned file cscui.dll (5136) into directory file 26.
Recovering orphaned file CSRSS.EXE (5144) into directory file 26.
Recovering orphaned file CVID32.QTC (17408) into directory file 26.
Recovering orphaned file c_10001.nls (19801) into directory file 26.
Recovering orphaned file c_20290.nls (19805) into directory file 26.
Recovering orphaned file c_20000.nls (19811) into directory file 26.
Recovering orphaned file CSH.DLL (21395) into directory file 26.
Recovering orphaned file CRYPT32.DLL (38161) into directory file 26.
Recovering orphaned file CRYPTNET.DLL (38162) into directory file 26.
Recovering orphaned file CRYPTUI.DLL (38260) into directory file 26.
Cleaning up 48 unused index entries from index $SII of file 0x9.
Cleaning up 48 unused index entries from index $SDH of file 0x9.
Cleaning up 48 unused security descriptors.