вторник, 6 января 2009 г.

Восстановление разделов,удалённых файлов на HDD,FLASH и т.д в Linux

Всем привет! Всех с Рождеством.
Праздники продолжаются, а значит есть время для статей.
Сегодня будем восстанавливать убитые, повреждённые разделы Вашего HDD,Flash и т.д
Так-же можно просто потренироваться или посмотреть уже существующих дисков.

Если диск или раздел уже упал, то Вам понадобится загрузочный дистрибутив Linux.
Рекомендую System Rescue CD т.к он создан именно для этого.
Главное ничего не делать с диском.

Приступим:

1) Вставляем Ваш Flash, Live CD в реанимируемый ПК
Грузимся… Первое что потребуется - это определить файловые системы диска.
Для этого есть команда sfdisk -l
Подробнее можно посмотреть командой file -s
Пример:

localhost root ~ # sfdisk -l /dev/sda

Диск /dev/sda: 9729 цилиндров, 255 головок, 63 секторов/дорожку
Предупреждение: Таблица разделов выглядит так,
словно она была создана для C/H/S=*/240/63
(вместо 9729/255/63).
Для листинга будет подразумеваться эта геометрия.
Единицы = цилиндры по 7741440 байт, блоки по 1024 байт, начиная с 0

Устр-во Загр Нач Конец #цил #блоки Id Система
/dev/sda1 0+ 516 517- 3908488+ 82 Linux своп / Solaris
/dev/sda2 517 555 39 294840 83 Linux
/dev/sda3 556 5722 5167 39062520 83 Linux
/dev/sda4 5723 10336 4614 34881840 83 Linux

localhost root ~ # file -s /dev/sda1
/dev/sda1: Linux/i386 swap file (new style) 1 (4K pages) size 977121 pages

localhost root ~ # file -s /dev/sda2
/dev/sda2: ReiserFS V3.6 block size 4096 num blocks 73696 r5 hash

Посмотрели? Выбрали что нужно восстановить.

2) Создаём образ диска/раздела с помощью команды dd и ложем его на другой целый накопитель /dev/sdb1
Это нам даст шанс на ошибку, если что-то пойдёт не так. С образом Мы и будем работать, дабы не насиловать и без того порченный HDD.
Пример:

mount /dev/sdb1 /mnt/temp
dd if=/dev/sda1 of=/mnt/temp/disk.ima conv=noerror

Опция conv=noerror говорит о том, что dd следует продолжить считывание несмотря на ошибки чтения, которые, в большинстве случаев, присутствуют на поврежденных дисках.
Так-же можно поиграться с параметром bs для ускорения копирования

И ещё, образ можно скинуть по сети:

dd conv=noerror if=/dev/sd1 | ssh user@host ‘cat >
recover.img’

И сжать в добавок

dd conv=noerror if=/dev/sda1 | gzip | ssh user@host
‘gunzip > recover.img’

3) Образ получили. Теперь его нужно ассоциировать с виртуальным устройством, что-бы с ним работать как с обычным разделом/накопителем
Делается это командой losetup
Пример:

losetup /dev/loop1 /mnt/temp/disk.ima

И получим свой раздел, в качестве полноценного устройства.
Его можно просто смонтировать и работать. Или приступать к восстановлению.
Правда он доступен только для чтения.

Обойти это можно. Для этого нам понадобится создать файл, который будем использовать как виртуальный накопитель.
Делается это командой dd

Пример:
Создать файл размером 30мб
Размер задаётся тут count=30720

dd if=/dev/zero of=/tmp/virtualfs.ima bs=1024 count=30720

Затем его ассоциируем с /dev/loop2

losetup /dev/loop2 /tmp/virtualfs.ima

И просто форматируем, в какую FS хотите.

mkfs.ext3 /dev/loop2

После можно командой dd накатить на него образ раздела/диска или смонтировать и работать.

dd if=/mnt/temp/disk.ima of=/dev/loop2

4) А как-же быть если мы сняли образ целого HDD с его разделами?
Очень просто.
После того, как Вы смонтировали/ассоциировали образ нужно посмотреть его разделы
Делается это с помощью команды fdisk
Пример:
Даём команду fdisk [имя диска или утройства]
Затем жмём ключ p для просмотра разделов


$ fdisk -u /dev/loop3

Command (m for help): p

Disk /dev/loop1: 4194 MB, 4194816000 bytes
128 heads, 63 sectors/track, 1015 cylinders, total 8193000 sectors
Units = sectors of 1 * 512 = 512 bytes

Device Boot Start End Blocks Id System
/dev/loop3p1 * 63 8176895 4088416+ 7 HPFS/NTFS

Command (m for help): q

Здесь нам нудны след. значения.
а) Units = sectors of 1 * 512 = 512 bytes т.е размер сектора 512 bytes
б) Начальный сектор раздела. В примере 63

Дальше всё просто. умножаем 63 на 512 и получаем число 32256

Даём команду :

losetup -o 32256 /dev/loop4 /mnt/temp/disk_full.ima

И получаем на /dev/loop4 выбранный раздел.

Затем монтируем его и пользуемся.

Удалить все ассоциации можно командой

losetup -d /dev/loop[0,1,2,3,4 и т.д]

5) Вроде всё.
После восстановления можно накатить образ обратно на диск или скопировать нужные файлы.
Про утилиты восстановления писать нет смысла, да и я ими пользовался то 1 раз в жизни когда раздел упал.

Почитать материалы можно по след. ссылкам:

Комментариев нет: