DSH DSH

Это надо видеть!
DSH DSH header image
Tuesday, January 6, 2009

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

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 раз в жизни когда раздел упал.
Почитать материалы можно по след. ссылкам:

http://boombick.org/blog/posts/17

http://www.faqs.org/docs/Linux-mini/Loopback-Root-FS.html

http://www.walkernews.net/2007/07/01/create-linux-loopback-file-system-on-disk-file/

http://qemu-forum.ipi.fi/viewtopic.php?p=12362

UPD:
Скрипт для автоматического монтирования разделов из образа диска, созданного с помощью dd

INFILE=/path/to/your/backup.img; MOUNTPT=/mnt/foo; PARTITION=1; mount “$INFILE” “$MOUNTPT” -o loop,offset=$[ `/sbin/sfdisk -d "$INFILE" | grep "start=" | head -n $PARTITION | tail -n1 | sed 's/.*start=[ ]*//’ | sed ’s/,.*//’` * 512 ]

Пояснение:
Делаете образ диска, например вот так:
dd if=/dev/sda of=/mnt/disk/backup.img
Опция PARTITION=1 задаёт количество разделов для монтирования (Узнать можно с помощью sfdisk -d yourfile.img).
Оригинал:

Опции Tags:

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

АЛЕКСАНДР

March 27th, 2010 в 11:42 pm

ЗДРАВСТВУЙТЕ!!!
Я НЕЧАЯННО УДАЛИЛ РАЗДЕЛ С ВИДЕО 500 Gb
ПЛДСКАЖИТЕ КАК МНЕ ВОСТАНОВИТЬ РАЗДЕЛ,ПОЖАЛУЙСТА.
Я НЕ ФОРМАТИРОВАЛ РАЗДЕЛ,ТОЛЬКО ПРИ УСТАНОВКЕ 7 КИ УДАЛИЛ ВЕРХНИЙ РАЗДЕЛ И ПОСТАВИЛ ДРУГОЙ ВИНТ С ВИНДОЙ УСТАНОВЛЕННОЙ.
Я ХОТЕЛ НА 320 ГИГОВ ПОСТАВИТЬ 7 КУ.
СЕЙЧАС Я НА ХР 2 РАЗДЕЛА ЕСТЬ ,А 3 ГО НЕТУ.ЖОСКИЙ 1,5 ТЕРАБАЙТА SEAGATE
МОЙ МАКЙЛ CTC-KOT@MAIL.RU

Avatar

Оставьте комментарий

Архив публикаций

офисный переезд Москва |