- 1.8. Визначаємо "справжню" таблицю розділів. Утиліта TestDisk. Примітка: У документації програма...
- Команда меню MBRCode
- Команда меню Geometry
- Команда меню Options
- Команда меню Advanced
1.8. Визначаємо "справжню" таблицю розділів. Утиліта TestDisk.
Примітка: У документації програма називається TestDisk, а викликається вона командою testdisk, тому не дивуйтеся, що я пишу назву іноді з великими літерами, іноді без таких.
Програма TestDisk призначена для того, щоб допомогти відновити втрачені розділи і / або відновити можливість завантаження з диска, для якого така можливість була втрачена внаслідок збою в роботі програмного забезпечення, впливу вірусу або просту людську помилку (наприклад, якщо ви випадково затерли таблицю розділів). Вона дозволяє проаналізувати структуру диска і знайти втрачені розділи, а при необхідності і відновити таблицю розділів. Утиліта розроблена К. Греньє (Christophe GRENIER). У мене в системі Knoppix 3.2 виявилася версія 4.0 цієї програми, датована 3 квітня 2002 г. А на сайті http://www.cgsecurity.org я виявив версію 5.3, забезпечену досить докладною документацією (man-сторінка до програми настільки коротка, що не дозволяє зрозуміти, як цією програмою користуватися).
Програма TestDisk може бути запущена
- під DOS (як в «чистому» ДОС, так і вікні під Win9x),
- під Windows (NT 4/2000 / XP / 2003),
- під Linux або FreeBSD.
Програма може відшукати втрачені розділи з файловими системами наступних типів:
- DOS / Windows FAT12, FAT16 and FAT32
- Linux Swap (версій 1 і 2)
- Netware (тільки старих версій)
- NTFS (Windows NT / 2K / XP)
- ReiserFS (версій 1 і 2)
- UFS (FreeBSD / OpenBSD / NetBSD)
Як повідомляє коротка довідка до програми, запускається вона в одному з наступних форматів.
testdisk [/ log] [/ debug] [/ dump]
testdisk / list [/ log]
Будучи запущеної з опцією / list, команда просто виводить список існуючих розділів (точніше, мабуть, вміст таблиць розділів з MBR) на всіх жорстких дисках. У всіх інших випадках після запуску програми TestDisk виводить спочатку фразу «Please wait ...» і приступає до збору даних від BIOS або OS.
Опції (необов'язкові) / log, / dump і / debug мають таке призначення:
- / Log - створювати файл протоколу роботи програми (його ім'я testdisk.log);
- / Debug - додавати зневадження;
- / Dump - відображати на екрані і записувати в протокол зміст знайдених початкових секторів розділів.
У документації до програми рекомендується запускати її з опціями / log і / debug. У будь-якому варіанті запуску програми спочатку виводиться список дисків, виявлених в системі (рис. 9).
Мал. 9. Основне меню програми testdisk
За допомогою клавіш управління курсором «вгору / вниз» ви можете вибрати диск для аналізу. У нижній частині вікна є список доступних команд, переміщатися по якому можна за допомогою клавіш «вправо / вліво». А рядок підказки, розташована нижче цього меню, дає коротке пояснення до підсвіченого пункту. Коли натискаємо клавішу при підсвічується пункті меню Analyze спочатку, мабуть, виводиться просто вміст таблиці розділів з MBR і пропонується єдиний пункт меню Quit (рис.10), що призводить користувача в стан деякого здивування.
Мал. 10. Перший результат роботи програми testdisk
Однак повторне натискання клавіші запускає все ж процес аналізу структури розділів диска (рис.11), хід якого відображається в рядку «Analyze cylinder NNNN / MMMM». Оскільки процес аналізу, треба відзначити, триває дуже довго, цей рядок є не зайвою, вона допомагає зберегти терпіння.
Мал. 11. Процес аналізу диска
Аналіз структури диска полягає в тому, що TestDisk переглядає початкові сектора всіх циліндрів. Первинні розділи завжди розміщуються починаючи з першого сектора циліндра (head = 0, sector = 1), а логічні розділи - з другого сектора (head = 1, sector = 1). Скануючи всі можливі початкові сектора розділів TestDisk аналізує їх на наявність заголовків файлових систем (a filesystem header): для FAT або NTFS це завантажувальний сектор, для EXT2 / EXT3 - суперблок, для BSD - мітка диска (disklabel) і так далі. Виявлення такого заголовка інтерпретується як початок розділу відповідного типу. Розмір розділу визначається безпосередньо виходячи з його структури на диску. Кожен виявлений під час такого сканування розділ TestDisk додає в список знайдених розділів.
Оскільки, як уже було сказано при описі утиліти gpart, на диску можуть бути присутніми «останки» або «сліди присутності» давно видалених розділів, які просто не були затерті більш пізньої інформацією (це особливо часто трапляється в тому випадку, коли проводиться детальний пошук втрачених розділів ), користувач повинен уважно проаналізувати результати пошуку, щоб вибрати ті розділи, які дійсно були присутні на диску перед тим, як була зіпсована таблиця розділів.
По завершенні цього процесу програма пропонує (рис. 12) виправити характеристики розділів, які вказані в першому стовпці. Зміна цього параметра виявленого розділу здійснюється за допомогою клавіш-стрілок «вправо \ вліво» (ви просто перебирає циклічно значення, перераховані в нижній частині екрана, поки не знайдете потрібний). Тут же можна змінити тип розділу, натиснувши клавішу. А по клавіші
можна вивести список файлів в тому розділі, на який вказує підсвічування.
Рис.12. Вікно з результатами аналізу диска
Ще одне натискання клавіші і ми бачимо додаткове меню з трьох пунктів (рис.13). За допомогою пункту Search можна провести поглиблений пошук втрачених розділів. А команда Write служить для того, щоб записати на диск виправлену таблицю розділів.
Мал. 13. Додаткове меню
Якщо ви придивитеся до малюнка 13, ви зверніть увагу на те, що програма показує всього два розділи. Це наслідок того, що я занадто поспішно скористався командою Write. Не знаю, в чому причина, але після виконання команди Write та ж утиліта TestDisk стала бачити на моєму диску тільки 2 розділу. Можливо, вина в цьому повністю моя, але результат був бентежить. Перш ніж розповідати про свої подальші дії, я все ж наведу ще опис інших команд з основного меню програми, запозичене з документації.
Команда меню Delete
Якщо ви виберете цю команду з меню програми TestDisk, буде обнулена таблиця розділів в головного завантажувального запису, тобто в усі 64 байта, відведені під цю таблицю, будуть записані нульові значення. Код завантажувача і інші дані в головному завантажувальному секторі (байти сигнатури тощо) залишаться недоторканими.
Команда меню MBRCode
За цією командою TestDisk перезаписує код первинного завантажника і сигнатуру MBR (тобто значення 0xAA55 в двох останніх байтах MBR). Ця дія приблизно аналогічна тій, що робить команда MS-DOS fdisk, будучи запущеною з «недокументованою» опцією / MBR, тобто записує код стандартного первинного завантажника. Це може виявитися корисним в тому випадку, якщо ваша система взагалі відмовляється завантажуватися і ви вже вичерпали всі інші способи виходу з цієї ситуації.
Команда меню Geometry
Ця команда служить для того, щоб задати значення параметрів геометрії диска (число циліндрів, головок і секторів), які TestDisk використовує для пошуку початкових секторів розділів. Справа в тому, що програми для створення розділів для архітектури i386 найчастіше створюють розділи, що закінчуються на кордоні циліндра. Тому зміна параметрів геометрії, використовуваних програмою, призводить до того, що будуть проглядатися інші сектори.
Команда не змінює параметрів самого жорсткого диска до тих пір, поки ви не виконаєте команду записи даних про знайдені розділах на диск. Майте на увазі, що завдання неправильної геометрії і запис цих неправильних даних на диск може привести до неможливості в подальшому відновлення ваших даних. Як попереджає керівництво, команда ця ТІЛЬКИ ДЛЯ ЕКСПЕРТІВ.
Керівництво рекомендує в тому випадку, якщо ви вирішите міняти геометрію диска, змінювати в першу чергу число логічних головок, причому випробувати значення числа головок, рівні 255, 16, 32, 64, 128 і 240.
Команда меню Options
Значення опцій змінюються шляхом «підсвічування» потрібного рядка і натискання клавіші ENTER. Змінювати можна значення наступних опцій:
- Dump: Відображати вміст «підозрілих» секторів (за замовчуванням: не відображаються; опція аналогічна опції / dump командного рядка)
- Cylinder boundary: кордону розділів збігаються з початком циліндрів (за замовчуванням: так).
- Allow partial last cylinder: останній циліндр може бути не повним (за замовчуванням: немає)
- Ask partition order: розділи можуть бути переупорядкувати (за замовчуванням: немає)
- Halt on errors: зупинятися при виявленні помилок дискового введення / виводу (за замовчуванням: так)
- Maximize extended part: якщо існують логічні розділи, розширений розділ буде використовувати весь доступний дисковий простір (за замовчуванням: немає).
- Expert mode: Якщо ця опція встановлена (значення «так»), програма надає деякі додаткові можливості (за замовчуванням: немає).
- Quit: зберегти (запам'ятати) обрані значення опцій і повернутися до головного меню.
Команда меню Advanced
Тільки для експертів, які намагаються відновити і відремонтувати завантажувальні сектора операційних систем! TestDisk дозволяє вам виконати деякі дії з завантажувальними секторами на FAT- і NTFS-розділах. Виберіть розділ, який ви хочете модифікувати, і виберіть команду Boot. За описом того, які можливості Ви при цьому отримаєте, я відішлю вас до документації, що додається до програми.
На цьому я, мабуть, завершу короткий опис програми TestDisk. Справа в тому, що мій досвід роботи з цією програмою був теж дуже невеликий. Як вже було сказано, я поквапився записати «виправлену» таблицю розділів на диск і в результаті абсолютно її зіпсуватися! Що я не робив, після спроби завантажитися з жорсткого диска з'являлися дві горезвісні літери «LI» і на цьому все закінчувалося.
Тоді я вирішив встановити систему заново. Очистив MBR командою
dd if = / dev / zero of = / dev / hda bs = 512 count = 1
і спробував встановити на «чистий» диск Windows 2000. Програма інсталяції створила новий розділ, перенесла на нього файли, після чого запропонувала перезавантажитися. Після перезавантаження з'явилося повідомлення «Missing operating system» і на цьому знову все закінчилося.
Тоді я спробував поставити на диск Mandrake Linux 10.0. Установка пройшла успішно, але після перезавантаження я отримав той же незрозумілий результат - «LI«. Тут вже у мене зародився сумнів в тому, що я поставив правильний діагноз про причини «захворювання» моєї системи. Справа, мабуть, не в спотвореному завантажувального сектору! Так воно і виявилося! Причина, виявляється, була в тому, що я неправильно поставив порядок завантажувальних пристроїв в BIOS. Замість hdd-0 в якості основного завантажувального пристрою вказав hdd-1 (перед ним йшли CD-ROM і floppy). В результаті BIOS намагався здійснити завантаження з другого жорсткого диска, на якому я колись теж щось ставив (тому й з'являлися літери «LI«, які ввели мене в оману), але на якому давно не було ніякої операційної системи (і взагалі диск був уже дефектним). Про те, що було далі, я розповім в наступній замітці.
На закінчення наведу ще два невеликих примітки:
- 1. В процесі пошуку інструментів для відновлення таблиці розділів я натрапив на посилання про те, що існує ще програма rescuept, автором якої є Andries Brouwer (автор двох HOWTO про розділи диска, дивись посилання). Ця утиліта входить до складу пакету util-linux, який ви можете знайти майже на будь-якому ftp-сайті з програмним забезпеченням для Linux. Однак, оскільки я з цієї програмою не працював, сказати про неї нічого не можу.
- 2. Для коригування таблиці розділів диска можна використовувати і утиліту sfdisk, мова про яку піде в наступній частині цих роздумів. У команди sfdisk є опція -V, яка служить для перевірки таблиці розбиття диска. Правда, мені здалося, що результат її виконання команди sfdisk -V дає дуже мало корисної інформації:
Лістинг 5.
[root] # / sbin / sfdisk -V / dev / hda Warning: extended partition does not start at a cylinder boundary . DOS and Linux will interpret the contents differently.
Але, якщо ви знаєте як виправити таблицю розділів, можна поступити наступним чином: спочатку таблиця розділів диска вивантажується в файл, коригується, а потім знову завантажується в початковий сектор диска. Робиться це так:
Лістинг 6.
sfdisk -d / dev / hda> hda.out
sfdisk / dev / hdbУтиліта sfdisk інтерпретує рядки вхідного файлу як
Окремі поля при цьому розділяються пробілами, комами або крапкою з комою (можливо з подальшими пробілами). При цьому два останніх поля () можуть бути опущені - програма сама визначить потрібні значення виходячи з значення полів start і length, і геометрії диска, повідомляється ядром.
Але я не наважився скористатися цим способом коригування таблиці розбиття диска.
Опубліковано у * Unix, * Linux , FreeBSD . Додайте в закладки постійне посилання .
джерело http://rus-linux.net/kos.php?name=/papers/adv1/8.html