У меня есть каталог, заполненный данными, /var/backups/disk1
который я хочу преобразовать в образ виртуального диска, который я затем смогу загрузить с помощью QEMU или KVM (каталог содержит файловую систему для виртуальной машины, скопированную с помощью rsync).
Хотя существует множество инструкций по преобразованию всего физического диска в виртуальный диск, упаковка только содержимого одного каталога в образ виртуального диска оказывается намного сложнее, чем я ожидал. Есть идеи?
Кстати, я знаю, что могу использовать qemu-img
для преобразования блочного устройства в виртуальный диск (например, qemu-img convert -f /dev/sdc -O qcow2 disk.qcow2
), поэтому, если бы только я мог заставить каталог /var/backups/disk1
казаться блочным устройством, то теоретически я должен быть в состоянии достичь своей цели, используя qemu-img
, Однако я подумал о креативных способах представления каталога как блочного устройства с использованием NBD или устройства с обратной связью, но не увенчался успехом.
qemu-img
иfallocate
немного удобнее чемdd
.Похоже, что libguestfs может это сделать, см. Virt-make-fs (1) и, возможно, virt-copy-in (1) .
источник
virt-make-fs
изqcow2
примера libguestfshttps://serverfault.com/a/332114/163884 упомянул об этом, но вот полный пример:
Обратите внимание, как
sudo
это не требуется, за исключением установки и исправления ошибок в Ubuntu.Затем я убедился, что QEMU действительно может прочитать его:
Затем я могу смонтировать образ в QEMU Linux и прочитать файл.
virt-make-fs
пример extЭтот удивительный инструмент также может создавать необработанные файловые системы ext, например:
который мы можем проверить непосредственно на хосте:
Минимизация размера изображения
Хорошей особенностью
virt-make-fs
является то, что он автоматически пытается минимизировать размер изображения, если это то, что мы хотим:так:
говорит мне, что изображение заполнено на 82%:
Мы можем легко добавить дополнительное пространство поверх минимума с помощью
--size-=+
:издержки журнала ext4
В руководстве также упоминается, что:
и это интересно проверить с помощью:
который производит:
Итак, мы видим, что ext4 вышел значительно больше.
Ошибки libguestfs в Ubuntu
Теперь о недостатке: похоже, в настоящее время нет сопровождающего Ubuntu, и библиотека в Ubuntu, как правило, содержит ошибки.
sudo
теоретически не требуется, но это требуется из-за ошибки упаковки Ubuntu, если мы не сделаем обходной путь: /ubuntu/1046828/how-to-run-libguestfs-tools-tools-such-as- ВИРТ-макияж фс-без Суда / 1046829 # 1046829После этого без наших обходных путей 18.04 (но не 16.04) завершается неудачно с: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
из-за ошибки, которая уже была исправлена.
Протестировано в Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3, QEMU 1: 2.11 + dfsg-1ubuntu7.3.
источник
Использование стратегии Майклса в Fedora 23:
Это создает файловую систему ext2, которую вы можете подключить к некоторому каталогу:
Теперь / Mnt содержит все ваши файлы
источник
file.fs
это файл,mount
команда не должна бытьmount -o loop file.fs /mnt
:?Как насчет доступа к каталогу как к сетевому ресурсу с виртуальной машины, которая также подключена к вашему целевому образу виртуального диска? Вы, чем просто выполнить простое копирование из общего ресурса на смонтированный образ диска.
источник
Я предпочитаю (и использую) ответ Сиро Сантилли, но вот что работает с
guestfish
оболочкой:источник