Показаны сообщения с ярлыком dd. Показать все сообщения
Показаны сообщения с ярлыком dd. Показать все сообщения

вторник, 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 раз в жизни когда раздел упал.

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

среда, 17 сентября 2008 г.

KVM

Перед установкой виртуальной машины проверяем поддержку виртуализации процессором
В командной строке набираем
egrep '^flags.*(vmx|svm)' /proc/cpuinfo
если есть ответ то значит процессор поддерживает аппаратное ускорение
ставим kvm
apt-get install kvm
При особом желании можно поставить менеджер виртуальных машин
и работать с ним
apt-get install virt-manager
или запускать виртуальные машины консольными командами
например так
создаем файл образ hdd для виртуальной машины. ~5Gb
dd if=/dev/zero of=/tmp/disk-image count=10000000
и запускаем виртуальную машину используя созданный дисковый имедж, вставляем в cdrom загрузочный диск (да хоть ХР) и набираем
kvm -hda /tmp/disk-image -cdrom /dev/cdrom -m 512

четверг, 3 июля 2008 г.

Делаем образы дисков с помощью dd и gzip

отсюда

Многие знают про утилиту dd - очень удобный инструмент.
В частности очень хорошо подходит для клонирования дисковых разделов (или целых дисков).

Недавно в ходе нескольких экспериментов выяснил, что такой образ диска можно сильно сжать с помощью GZip.

Например, заполненный на около 5Гб NTFS-раздел объемом 31Гб в сжатом состоянии занимает всего 1.7Гб. Единственное неудобство в том что на моем AMD Athlon 1700+ создание этого образа заняло 50 минут, а подсчет md5-суммы раздела-оригинала и упакованного образа по 12 минут. На системах с более производительным центральным процессором данный процес займет гораздо меньше времени.

Так как основной объем информации на системных жестких дисках (конечно за исключением медиа-данных) очень хорошо поддается сжатию, и часто многие выделяют несколько разделов под ОС, таким образом можно быть уверенным что образ раздела удастся сжать.

В ходе тестов на различных разделах степень компрессии несколько шокировала. Например, FAT-16 раздел размером 40Гб был сжат до 30МБ (контрольные суммы проверил - они совпали)!!!

Создаем образ:
#dd if=/dev/sda1 bs=8096 | gzip -9cf > sda1.dd-image.gz
Это занимает время. За процессом можно наблюдать на той же консоли с помощью периодической посылки USR1 сигнала процессу dd.
Для этого на другой консоли выполняем:

#ps | grep dd
определяем pid процесса dd и подставляем его в следующую команду
#watch -n 15 "kill -USR1 $pid_of_dd"
Распаковка образа:
#gunzip -c sda1.dd-image.gz | dd of=/dev/sda1 bs=8096
также можно подсчитать md5-сумму для раздела, чтобы после восстановления проверить правильность распаковки образа:
#dd if=/dev/sda1 bs=8096 | md5sum - > sda1.dd-image.md5
Параноики (бывают ситуации когда лучше потратить время на еще одну перепроверку) могут еще и проверить правильность создания образа:
#gunzip -c sda1.dd-image.gz | md5sum
Приятной всем работы ;)

среда, 9 апреля 2008 г.

Добавляем информацию для восстановления архивов с помощью par2

В этой заметке я предложу способ чтения данных с поцарапанных, погрызанных собакой или обработанных шредером компакт-дисков.

Итак, к делу: регулярно, при записывании данных на диск, остается некоторое количество свободного места. Лет 5 назад можно было положить диск на полочку, пометив, что еще 30 мегабайт можно забить каким-нибудь хламом, но сейчас стоимость болванки - 10 рублей, такой аргумент не действует. И, соответственно, привычку оставлять место “на потом” надо искоренять. Мне кажется, наиболее разумным было бы добавить на диск данные для восстановления - т.н. корректирующие коды Рида-Соломона, которые могу пригодится, в случае, если диск будет поврежден.

Собственно весь заговор выглядит следующим образом:
#sudo aptitude install par2
#man par2
#cd backups
#ls
dump.sql.gz
#par2 create -v -r10 -n1 -m500 dump.sql.gz
#ls
dump.sql.gz dump.sql.gz.par2 dump.sql.gz.vol000+100.par2

Эта команда добавит 10% избыточной информации к данным, запишет все это в один файл, при этом программе par2 разрешено использовать 500 мегабайт оперативной памяти. Файлы *.par2 следует записать на диск вместе с дампом.

Мне эта программа понравилась, я захотел ее проверить в боевых условиях. Сделал архив размером около 400 Мб, добавил данные для восстановления - еще 200Мб - *.par2 файлы (50% избыточность, по умолчанию - 5%). Все это я записал на CD-RW, в котором потом сделал, простите, дырку. В итоге стандартными средствами удавалось прочитать только первые 150 Кб данных. Чтобы восстановить файл нужно сначала все считать пускай с ошибками - для этого есть программа dd_rescue, которая является практчески полным аналогом dd с одним исключением - она умеет игнорировать ошибки чтения:

диск с дыркой

#sudo dd_rescue -Av -b 1048576 -B 1048576 /dev/scd0 brokencd.iso(-A - заполняь нулями те участки файла, которые считать не удалось, v - verbose, -b - размер блока данных, -B - размер блока данных для проблемных областей диска)
# sudo mount -o loop brokencd.iso mnt # монтируем получившийся образ диска
# cp mnt/* dump; cd dump # копируем содержимое
# par2 r archive.par2 # приводим в изначальный вид

На этом эксперимент завершился - все данные с диска восстановлены. Даже скучно.
Но пример, мне кажется, весьма красноречив :)

Постоянная ссылка: 2008-04-10 02:08

воскресенье, 30 марта 2008 г.

Создание виртуальной файловой системы и ее монтирование

STEP 1 (Создать 10MB файл)
$ dd if=/dev/zero of=/tmp/disk-image count=20480

По-умолчанию dd использует блоки в 512 байт, поэтому размер получится равным 20480*512

STEP 2 (Создание файловой системы ext3 или ext2)
$ mke2fs -q
или если вы хотите ext3
$ mkfs -t ext3 -q /tmp/disk-image
да, вы можете использовать даже reiser, но тогда придется создать образ диска большего размера.
Что-то вроде "dd if=/dev/zero of=/tmp/disk-image count=50480".
$ mkfs -t reiserfs -q /tmp/disk-image

STEP 3 (Создание директории "virtual-fs" и монтирование. Это нужно делать как root)
$ mkdir /virtual-fs
$ mount -o loop=/dev/loop0 /tmp/disk-image /virtual-fs

Примечание: Если вы монтируете второе устройство, вы должны увеличить номер loop-устройства: loop=/dev/loop1, loop=/dev/loop2, ... loop=/dev/loopn
(Можно не указывать /dev/loopn вообще, но не забывайте, что устройства могут закончиться (по умолчанию их всего 8: loop0...loop7))
Теперь это работает как любой диск. Виртуальная ФС может быть смонтирована и автоматически, при старте системы, если добавить в /etc/fstab такую строчку:

/tmp/disk-image /virtual-fs ext2 rw,loop 0 0

Тогда ее можно будет монтировать, просто написав:
$ mount /virtual-fs

STEP 4 (когда закончите работу с ВФС, отмонтируйте ее)
$ umount /virtual-fs

(Основано на переводе TIP4 с http://souptonuts.sourceforge.net/how_to_linux_and_open_source.htm)

Этот же метод, только с модификациями, можно использовать для создания шифрованных дисков. Для этого нужно, чтобы поддержка шифрования была включена в ядре, были включены в ядре же алгоритмы шифрования и использовались достаточно свежие версии losetup и mount (не помню пакет, в котором это лежит).
Теперь к делу:
STEP 1 - также, как и в оригинале.
STEP 1.1 (здесь мы конфигурируем кольцевое устройство, у нас спросят пароль для создания ключа шифрования. ВНИМАНИЕ! Пароль спросят только один раз, изменить его потом нельзя!):

$ losetup -e aes /dev/loop0 /tmp/disk-image

STEP 2:

$ mkfs -t reiserfs /dev/loop0

далее по тексту. при монтировании указываем в опциях:

mount -o loop,encryption=aes ...

[Vasily Shmelev aka vs-adm]