Случайно удалил файл образа libvirt, могу ли я его воссоздать?

xargs printf '"%s", ' <file

... будет работать с данными вашего примера:

"string1", "string2", "string3", "....", "string12312",
5
22.07.2016, 00:00
2 ответа

Образы libvirt по умолчанию расположены в / var / lib / libvirt / images

. Вам нужно будет найти способ восстановить файл. , с некоторыми программами для восстановления. Этот пост может вам помочь: Unix / Linux восстановить удаленные файлы

-1
27.01.2020, 20:34

Поскольку вы не выключили виртуальную машину, процесс, использующий файл образа, все еще имеет открытый файл, и он еще не был удален. Пока процесс продолжает работать, вы сможете его восстановить.

Для этого ответа у меня есть образ kvm под названием testdelete. ВМ работает, но я удалил файл.

Сначала нужно найти процесс, использующий этот файл. Самый простой способ - lsof.

# lsof | grep /var/lib/libvirt/images/testdelete.img
qemu-kvm  29627      qemu    9u      REG                9,0  2147483648     399357 /var/lib/libvirt/images/testdelete.img (deleted)

Это говорит мне, что это процесс 29627 и дескриптор файла 9. Давайте посмотрим на это

# cd /proc/29627/fd
# ls -l 9
lrwx------ 1 qemu qemu 64 Jul 21 18:13 9 -> /var/lib/libvirt/images/testdelete.img (deleted)

Хорошо, отлично. Это совпадает. Теперь давайте восстановим его! Вам нужен диск с достаточным количеством свободного места для хранения всего образа

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

# kill -STOP 29627

Это эффективно "замораживает" процесс. Резервное копирование, которое мы сейчас делаем, будет эквивалентно тому, что происходит после жесткого сбоя; при перезагрузке ОС выполнит fsck (или эквивалент) для восстановления.

Теперь мы можем скопировать данные

# dd if=9 of=/home/sweh/recovered.img bs=1M
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 5.74931 s, 374 MB/s

Это выглядит идеально; образ диска был 2 Гб, и это то, что он скопировал.

Этот образ выглядит хорошо?

# cd /home/sweh
# sfdisk -l recovered.img 
Disk recovered.img: cannot get geometry

Disk recovered.img: 261 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
recovered.img1          0+     65-     66-    524288   82  Linux swap / Solaris
recovered.img2   *     65+    261-    196-   1571840   83  Linux
recovered.img3          0       -       0          0    0  Empty
recovered.img4          0       -       0          0    0  Empty

Да, это похоже на мою таблицу разделов. На этом этапе вы можете провести другие тесты, чтобы убедиться, что образ выглядит хорошо.

Вот и все! Вы восстановили файл образа.

ПРИМЕЧАНИЕ: В этом примере я собираюсь убить существующий процесс qemu. Этот шаг необратим, потому что он приводит к освобождению диска. Если вы хотите провести некоторое тестирование "параллельного запуска", вы можете создать новый файл образа и virsh define новую ВМ для его использования.

Давайте перезапустим ВМ с помощью этого. Уничтожим старую ВМ, скопируем файл данных на место и перезапустим ее.

# virsh destroy testdelete
# cp -v recovered.img /var/lib/libvirt/images/testdelete.img
`recovered.img' -> `/var/lib/libvirt/images/testdelete.img'
# virsh start testdelete
Domain testdelete started

Мы можем подключиться к консоли?

# virsh console testdelete
Connected to domain testdelete
Escape character is ^]

CentOS release 6.8 (Final)
Kernel 2.6.32-642.3.1.el6.x86_64 on an x86_64

dhcp226.spuddy.org login: 

Восстановление завершено :-)

15
27.01.2020, 20:34

Теги

Похожие вопросы