Mam katalog wypełniony danymi, w /var/backups/disk1
którym chcę przekonwertować na obraz dysku wirtualnego, który następnie będę mógł uruchomić za pomocą QEMU lub KVM (katalog zawiera system plików maszyny wirtualnej, skopiowany przez rsync).
Chociaż istnieje wiele instrukcji konwertowania całego dysku fizycznego na dysk wirtualny, pakowanie tylko zawartości pojedynczego katalogu w obraz dysku wirtualnego okazuje się znacznie trudniejsze niż się spodziewałem. Jakieś pomysły?
Nawiasem mówiąc, wiem, że mogę qemu-img
przekonwertować urządzenie blokowe na dysk wirtualny (np. qemu-img convert -f /dev/sdc -O qcow2 disk.qcow2
), Więc jeśli tylko mógłbym sprawić, aby katalog /var/backups/disk1
wyglądał na urządzenie blokowe, to teoretycznie powinienem być w stanie osiągnąć cel, używając qemu-img
. Zastanawiałem się jednak nad kreatywnymi sposobami ujawnienia katalogu jako urządzenia blokowego za pomocą NBD lub urządzenia pętli zwrotnej i nie odniosłem sukcesu.
qemu-img
ifallocate
są nieco wygodniejsze niżdd
.Wygląda na to, że libguestfs może to zrobić, patrz virt-make-fs (1) i może virt-copy-in (1) .
źródło
virt-make-fs
zqcow2
przykładu libguestfsWspomniał o tym https://serverfault.com/a/332114/163884 , ale oto pełny przykład:
Zwróć uwagę, że
sudo
nie jest to wymagane, z wyjątkiem obejścia instalacji i błędów Ubuntu.Następnie zweryfikowałem, że QEMU może to odczytać za pomocą:
Jestem wtedy w stanie zamontować obraz w QEMU Linux i odczytać plik.
virt-make-fs
ext przykładTo niesamowite narzędzie może również tworzyć surowe systemy plików ext, np .:
które możemy zweryfikować bezpośrednio na hoście za pomocą:
Minimalizacja rozmiaru obrazu
Naprawdę dobrą cechą
virt-make-fs
jest to, że automatycznie próbuje zminimalizować rozmiar obrazu, jeśli tego właśnie chcemy:więc:
mówi mi, że obraz jest wypełniony w 82%:
Możemy łatwo dodać dodatkowe miejsce ponad minimum dzięki
--size-=+
:obciążenie dziennika ext4
Podręcznik wspomina również, że:
i warto to sprawdzić za pomocą:
który produkuje:
więc widzimy, że ext4 wyszedł znacznie większy.
błędy libuntestfs Ubuntu
Teraz na minus: wydaje się, że obecnie nie ma opiekuna Ubuntu, a biblioteka jest ogólnie wadliwa na Ubuntu.
sudo
nie jest teoretycznie wymagany, ale jest wymagany z powodu błędu opakowania Ubuntu, chyba że obejdziemy obejście: /ubuntu/1046828/how-to-run-libguestfs-tools-tools-such-as- virt-make-fs-without-sudo / 1046829 # 1046829Następnie, bez naszych obejść, 18.04 (ale nie 16.04) kończy się niepowodzeniem: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
z powodu błędu, który został już naprawiony w górę.
Testowany w Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3, QEMU 1: 2.11 + dfsg-1ubuntu7.3.
źródło
Używanie strategii Michaels w Fedorze 23:
Spowoduje to utworzenie systemu plików ext2, który można podłączyć do jakiegoś katalogu:
Teraz / mnt zawiera wszystkie twoje pliki
źródło
file.fs
plik jest, czymount
polecenie nie powinno byćmount -o loop file.fs /mnt
:?Co z dostępem do katalogu jako udziału sieciowego z maszyny wirtualnej, która jest również zamontowana na docelowym obrazie dysku wirtualnego? Zamiast wykonać zwykłą kopię z udziału na obrazie zamontowanego dysku.
źródło
Wolę (i używam) odpowiedź Ciro Santilli, ale oto coś, co działa z
guestfish
powłoką:źródło