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

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

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

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

Перемонтируем /home на новый HDD в Ubuntu Linux

  • Feb. 27th, 2008 at 10:53 PM
Отсюда взято

В самом начале своего знакомства с unix-like системами я всегда выделял очередному линуксу/фре достаточно мало места, по умолчанию я использовал Windows XP и львиная доля HDD всегда доставалась этой ОС. С тех пор много чего изменилось, а я и не заметил, как уже более полугода работаю, выхожу в Интернет, слушаю музыку, смотрю фильмы, ТВ, etc находясь в своей уже полюбившейся(удобной, надёжной, защищённой и далее по тексту) ОС, а в Windows загружаюсь очень и очень редко - поиграть (да, есть такой грешок за мной :)).

Логично, что места на разделах, выделенных для линукса, стало катастрофически не хватать, особенно в своей домашней директории /home. Разумным выходом из сложившейся ситуации мне показалось следующее решение - перемещение /home на отдельный свободный (благо он есть) винчестер, в этой роли выступает Seagate SATA 80 Gb.
Первое место, где я ищу информацию по интересующему меня вопросу, это... нет, не Google, с недавних пор это планета runix.org. Полезной оказалась заметка mczim`a.
После этого я нагуглил вот это(англ.) небольшое руководство. Итак.

После подключения винчестера по всем правилам, он у нас должен появиться в /dev. В моем случае появился /dev/sdb.
Во-первых, форматируем наш новый винчестер и создаем раздел:

# fdisk /dev/sdb
# mkfs.ext3 /dev/sdb1

Проверить, что все идет по плану можно командой:

# fdisk -l

После этого, монтируем наш новый hdd в какое-нибудь место, например в /share/newhome, копируем содержимое папки /home в /share/newhome и не забываем после копирования отмонтировать новый hdd:

# mount /dev/sdb1 /share/newhome
# cp -vax /home /share/newhome
# umount /dev/sdb1

Теперь прописываем новый hdd в /etc/fstab. Тут есть одна тонкость - дело в том, что в Ubuntu в /etc/fstab вместо названий устройств (/dev/hda1, /dev/hda2, etc) используется UUID. Чтобы узнать UUID нашего нового hdd выполняем команду:

# ls -l /dev/disk/by-uuid/

Предварительно, на всякий случай, сделав резервную копию /etc/fstab, копируем нужный нам UUID вместо UUID старого раздела(надеюсь /home у вас вынесен в отдельный раздел?).
Строка монтирования домашнего раздела в моем случае выглядит так:

# /dev/sdb1
UUID=3dbf409b-c35e-482c-8464-59b85528f714 /home ext3 defaults 0 2

Тут можно вписать кучу параметров монтирования разделов типа ext3 или поменять режим журналирования - на Ваше усмотрение. По умолчанию ext3 раздел примонтируется в режиме "ordered", а в /var/log/messages будут выведены строчки:

Feb 25 19:13:44 fabian kernel: [ 32.474467] EXT3 FS on sdb1, internal journal
Feb 25 19:13:44 fabian kernel: [ 32.474473] EXT3-fs: mounted filesystem with ordered data mode.

Тут сказано, что это нормально :)

Обратите внимание на последнюю цифру "2" в строчке монтирования раздела. Вначале я по ошибке поставил там единицу, на что при загрузке Ubuntu ругалась, что не может примонтировать раздел. В man fstab по поводу этого параметра сказано следующее:

The sixth field, (fs_passno), is used by the fsck(8) program to determine the order in which filesystem checks are done at reboot time. The root filesystem should be specified with a fs_passno of 1, and other filesystems should have a fs_passno of 2.

Т.е. для "/" должна быть указана единица, а для других ФС - двойка. Поменял на двойку, Ubuntu загрузилась без ошибок.

В исходном руководстве сказано, что можно, не перезагружая компьютер, набрать команду

# mount -a

и наш новоиспечённый /home примонтируется, но тогда при выводе команды

# df -H

вы увидите, что два раздела смонтированы на /home. Чтобы этого избежать, необходимо сначала отмонтировать старый раздел, на котором расположен /home. Отмонтировать этот раздел при рабочей запущенной ОС достаточно не ординарная задача, ведь существует масса процессов, которые "занимают" этот раздел. Вообще говоря, мне показалось, что проще перезагрузиться. :)

Если все прошло как надо, то после перезагрузки, /home уже будет на новом разделе.

Что было у меня ДО:

root@fabian:/home/fab# df -H
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda10 12G 9,9G 689M 94% /home


ПОСЛЕ:

root@fabian:/home/fab# df -H
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sdb1 79G 12G 64G 15% /home


Вот и все.

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

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]