Исходный вопрос:
Я пытаюсь восстановить данные из образа гостя kvm, переданного с несуществующего хоста centos-6: я без труда восстановил одного гостя. Второй не запускается. Единственная ошибка в /var/log/libvirt/libvirt.log:
2019-10-02 12:52:13.181+0000: 2846: error : daemonStreamHandleAbort:609 : stream aborted at client request
Симптомом является то, что виртуальная машина не загружается, а консоль подключается к сеансу, который не отвечает. Приведенная выше ошибка возникает, когда не отвечающий сеанс консоли закрывается с помощью <ctrl>]
. Эта проблема возникает из-за ошибки жесткого диска при загрузке.
В отсутствие решения для запуска гостя мне нужен доступ к данным в изображениях. Образы lvm находятся на хосте, на котором работают гости kvm. Перенесенные операции расположены в:
/dev/vg_vhost02/lv_vm_inet05.harte-lyne.ca_VH2_00
/dev/vg_vhost02/lv_vm_inet05.harte-lyne.ca_VH2_01
Перенесенный гость был определен с помощью файла virsh dumpxml, созданного на исходном хосте и перенесенного на новый хост.
Я сослался на инструкции, найденные на https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/virtualization/sect-virtualization-troubleshooting_xen-accessing_data_on_guest_disk_image. На новом хосте /var/lib/libvirt/images/
изначально пусто. Когда я запускаю пример команды kpartx, приведенной в инструкциях, я вижу эту ошибку:
kpartx -a /var/lib/libvirt/images/inet05.harte-lyne.ca.img не удалось выполнить stat () /var/lib/libvirt/images/inet05.harte-lyne.ca.img
Что на самом деле должна указывать эта команда в случае, если гостевой образ разделен на два уровня? Действительно ли мне нужен kpartx, учитывая, что два уровня уже известны vg?
Если я продолжу следовать инструкциям, то вот результаты:
lvs
. . .
lv_vm_inet05.harte-lyne.ca_VH2_00 vg_vhost02 -wi-a----- 32.00g
lv_vm_inet05.harte-lyne.ca_VH2_01 vg_vhost02 -wi-a----- 32.00g
. . .
Когда я монтируюсь, я получаю эту ошибку:
mount /dev/vg_vhost02/lv_vm_inet05.harte-lyne.ca_VH2_00 /mnt/guestboot
mount: you must specify the filesystem type
Если я укажу тип файловой системы как ext3, что, как я полагаю, использовали все гостевые образы, я получаю следующую ошибку:
mount -t ext3 /dev/vg_vhost02/lv_vm_inet05.harte-lyne.ca_VH2_00 /mnt/inet05.lv00
mount: wrong fs type, bad option, bad superblock on /dev/mapper/vg_vhost02-lv_vm_inet05.harte--lyne.ca_VH2_00,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
Проверяя dmesg, вижу следующее:
dmesg | tail
. . .
EXT3-fs (dm-9): error: can't find ext3 filesystem on dev dm-9.
Итак, я вернулся в kpartx и сделал следующее:
kpartx -a /dev/mapper/vg_vhost02-lv_vm_inet05.harte--lyne.ca_VH2_00
[root@vhost01 ~ (master #%)]# mount -t ext3 /dev/vg_vhost02/lv_vm_inet05.harte-lyne.ca_VH2_00 /mnt/inet05.lv00
А потом это:
mount: /dev/mapper/vg_vhost02-lv_vm_inet05.harte--lyne.ca_VH2_00 already mounted or /mnt/inet05.lv00 busy
Но mount показывает это:
mount /dev/mapper/vg_vhost02-lv_root on / type ext4 (rw) proc on /proc
type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type
devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda1
on /boot type ext4 (rw) /dev/mapper/vg_vhost02-lv_home on /home type
ext4 (rw) /dev/mapper/vg_vhost02-lv_tmp on /tmp type ext4 (rw)
/dev/mapper/vg_vhost02-lv_vhost01 on /var/data/vhost01 type ext4 (rw)
/dev/mapper/vg_vhost02-lv_log on /var/log type ext4 (rw) none on
/proc/sys/fs/binfmt_misc type binfmt_misc (rw)
и umount говорит это:
umount /dev/mapper/vg_vhost02-lv_vm_inet05.harte--lyne.ca_VH2_00
umount: /dev/mapper/vg_vhost02-lv_vm_inet05.harte--lyne.ca_VH2_00: not mounted
Что мне нужно сделать, чтобы получить доступ к данным на /dev/mapper/vg_vhost02-lv_vm_inet05.harte--lyne.ca_VH2_00
и 01
?