xargs printf '"%s", ' <file
... будет работать с данными вашего примера:
"string1", "string2", "string3", "....", "string12312",
Образы libvirt по умолчанию расположены в / var / lib / libvirt / images
. Вам нужно будет найти способ восстановить файл. , с некоторыми программами для восстановления. Этот пост может вам помочь: Unix / Linux восстановить удаленные файлы
Поскольку вы не выключили виртуальную машину, процесс, использующий файл образа, все еще имеет открытый файл, и он еще не был удален. Пока процесс продолжает работать, вы сможете его восстановить.
Для этого ответа у меня есть образ 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:
Восстановление завершено :-)