LINUX.ORG.RU
ФорумAdmin

Восстановление данных из QEMU IMG


1

2

Приветствую форумчан! Столкнулся с проблемой при использовании QEMU KVM:

- гостевая система debian wheezy amd64 перестает загружаться на Loading initial ramdisk, подключение локального(файлы размещены на основной системе) vmlinuz и initrd через virt-manager не спасает ситуацию: после gpxe пустой экран

- при этом в гостевой системе в консоле grub работает ls - файлы видно(до подключения vmlinuz,initrd)

- загрузка с livecd не срабатывает, решил распаковать *.img, извлечь нужные файлы в бекап, затем накатить его на чистую систему

На этом этапе возникла сложность. Файл в формате raw не монтируется(просит указать тип ФС), при конвертировании через qemu-img монтирование по-прежнему не работает(аналогично specify filesystem). Единственное, что помогло, - конвертация в qcow2 с последующим монтированием через qcowmount(libqcow): qcowmount /path/to/file.img /mnt/qemu-img Однако в результате смонтировался /mnt/qemu-img, в котором находится только qcow1, т.е. образовался путь /mnt/qemu-img/qcow1, и непонятно, что с ним делать(ранее не сталкивался с этим форматом).

Если кто-то сталкивался с этой проблемой, пожалуйста, укажите пути решения.

У меня она возникла при повышении нагрузки на основной диск(параллельно с работой ВМ создавался 500G файл): сначала на гостевой системе начала возникать ошибка readonly filesystem при работе с файловой системой, затем выполнил ребут shutdown -r now и после этого живой систему уже никто не видел :(

Теперь основной вопрос, который больше всего беспокоит. Каким образом в будущем возможно восстанавливать данные из QEMU images в таких случаях? Допустим, если снова упадет система и невозможно будет с нее загрузиться, но при этом останется исходный *.img файл образа.

Спасибо!

Не надо ничего ни куда конвертировать. Если образ в формате raw, то это как раз очень хорошо.

Если в образе разделы, то делаете примерно так: Как примонтировать определенную часть (раздел) dd-образа диска? (комментарий)

Если используется LVM, то в начале посредством losetup создаёте loop устройства посредством параметра offset, а затем делаете

vgchange -ay

Если в образе сразу файловая система, то монтируйте её с указанием её типа.

kostik87 ★★★★★
()

Файл в формате raw не монтируется(просит указать тип ФС)

Потому что это диск, а монтировать можно только раздел. Для этого есть losetup + kpartx.

Лучше вообще сказать как дошло до того, что фс стала ro?

invokercd ★★★★
()
Ответ на: комментарий от kostik87

Спасибо, попробовал смонтировать диск:

mount /path/to/file.img /mnt/qemu-img -o offset=$((1048576)) -t auto
mount /path/to/file.img /mnt/qemu-img -o offset=$((1048576)) -t ext4
Возвращает сообщение:
wrong fs type
Вывод dmsg:
JBD: no valid journal superblock found
EXT4-fs (loop6): error loading journal
Что интересно, при запуске этого же образа в VirtualBox(после конвертирования в VDI), после Loading initial ramdisk все-таки выводит:
EXT4-fs (sda1): error loading journal
mount: mounting /dev/disk/by-uid/... ... ... on /root failed: invalid argument
mount: mounting /dev on /root/dev failed: No such file or directory
Target filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

waultlicense
() автор топика
Ответ на: комментарий от invokercd

Видимо, какой-то сбой на уровне виртуализации. Как-то сталкивался с подобным, что на гостевой системе без видимых причин фс становится read only, но тогда все обошлось ребутом. К сожалению, не посмотрел в тот раз логи. В этот раз параллельно создавался TrueCrypt контейнер на 500ГБ на основной системе, сразу после начала(до этого на гостевой системе ничего критичного не изменялось) отказывать фс и скатилась в ro.

waultlicense
() автор топика
Ответ на: комментарий от kostik87

d.img: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 2048, 100663296 sectors; partition 2: ID=0x5, starthead 254, startsector 100667390, 4188162 sectors, code offset 0x63

waultlicense
() автор топика
Ответ на: комментарий от waultlicense

Что это:

EXT4-fs (sda1): error loading journal
mount: mounting /dev/disk/by-uid/... ... ... on /root failed: invalid argument
mount: mounting /dev on /root/dev failed: No such file or directory
Target filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.
Что это:
JBD: no valid journal superblock found
EXT4-fs (loop6): error loading journal
Говорит о том, что файловая система повреждена.

Сейчас делайте копию образа диска, на копии создаёте петлевое устройство посредством losetup и offset, затем запускаете проверку файловой системы на полученном петлевом устройстве.

losetup -f /копия_образа -o $((2048*512))
Смотрите имя созданного петлевого устройства:
losetup -a
Запускаете проверку файловой системы:
fsck.ext4 -y /dev/loopX 
Затем пробуете монтировать:
mount /dev/loopX /mnt/qemu-img -t ext4 -o ro

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Спасибо! Все сработало, файловая система стала доступна, теперь из нее можно сделать бекап.

waultlicense
() автор топика

kpartx - если img это диск с несколькими разделами

vxzvxz ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.