IngleseFranceseSpagnolo

Ad


Favicon di OnWorks

guestfs-faq - Online nel cloud

Esegui guestfs-faq nel provider di hosting gratuito OnWorks su Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

Questo è il comando guestfs-faq che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici workstation online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

PROGRAMMA:

NOME


guestfs-faq - Domande frequenti (FAQ) su libguestfs

CHI SIAMO LIBGUESTFS


Che is libguest?
libguestfs è un modo per creare, accedere e modificare le immagini del disco. Puoi guardare dentro il disco
immagini, modificare i file che contengono, crearli da zero, ridimensionarli e molto altro
di più. È particolarmente utile da script e programmi e dalla riga di comando.

libguestfs è una libreria C (da cui "lib-") e un insieme di strumenti costruiti su questa libreria, e
associazioni per molti linguaggi di programmazione comuni.

Per maggiori informazioni su cosa può fare libguestfs leggi l'introduzione sulla home page
(http://libguestfs.org).

Che sono , il virt utensili?
Strumenti Virt (sito web: http://virt-tools.org) sono un intero set di gestione della virtualizzazione
strumenti rivolti agli amministratori di sistema. Alcuni provengono da libguestfs, altri da
libvirt e molti altri da altri progetti open source. Quindi virt tools è un superset di
libguestfs. Tuttavia libguestfs viene fornito con molti strumenti importanti. Vedere
http://libguestfs.org per un elenco completo.

Le normative libguestfs bisogno { libvirt / KVM / Rosso Cappello / Fedora }?
No!

libvirt non è un requisito per libguestfs.

libguestfs funziona con qualsiasi immagine disco, comprese quelle create in VMware, KVM, qemu,
VirtualBox, Xen e molti altri hypervisor e quelli che hai creato da zero.

Red Hat sponsorizza (cioè paga) lo sviluppo di libguestfs e un numero enorme di altri open
progetti di origine. Ma puoi eseguire libguestfs e gli strumenti virt su molti Linux diversi
distribuzioni e Mac OS X. Facciamo del nostro meglio per supportare tutte le distribuzioni Linux come di prima classe
cittadini. Alcuni strumenti virt sono stati portati su Windows.

Come effettua libguestfs confrontare a Altro utensili?
vs. kpartx
Libguestfs ha un approccio diverso da kpartx. kpartx ha bisogno di root e si monta
filesystem sul kernel host (che può essere insicuro - vedi guestfs-sicurezza(1)).
Libguestfs isola il tuo kernel host dai guest, è più flessibile, scriptabile,
supporta LVM, non richiede root, è isolato da altri processi e pulisce
dopo se stesso. Libguestfs è più di un semplice accesso ai file perché puoi usarlo per
creare immagini da zero.

vs. vdfuse
vdfuse è come kpartx ma per le immagini di VirtualBox. Vedi il confronto kpartx sopra.
Puoi usare libguestfs sui file di partizione esposti da vdfuse, anche se non lo è
necessario poiché libguestfs può accedere direttamente alle immagini di VirtualBox.

vs. qemu-nbd
NBD (Network Block Device) è un protocollo per l'esportazione di dispositivi a blocchi in rete.
qemu-nbd è un server NBD in grado di gestire qualsiasi formato di disco supportato da qemu (es. raw,
qcow2). Puoi usare libguestfs e qemu-nbd o nbdkit insieme per accedere a block
dispositivi in ​​rete, ad esempio: "guestfish -a nbd://remote"

vs. montaggio filesystem in , il host
Il montaggio di filesystem guest nell'host non è sicuro e dovrebbe essere evitato completamente
per ospiti non fidati. Usa libguestfs per fornire un livello di protezione contro
exploit del filesystem. Guarda anche ospite(1).

vs. parted
Libguestfs supporta LVM. Libguestfs utilizza parted e fornisce la maggior parte delle funzionalità di parted
tramite l'API libguestfs.

COME AIUTO E REPORTING BUG


Come do I sapere che cosa versione sono usando?
Il metodo più semplice è:

guestfish --versione

Lo sviluppo di Libguestfs avviene lungo un ramo instabile e periodicamente creiamo a
ramo stabile su cui eseguiamo il backport delle patch stabili. Per saperne di più, leggi "LIBGUESTFS
NUMERI VERSIONE" in ospiti(3).

Come può I ottenere AIUTO?
Che mailing list or chiacchierare camere sono a disposizione?
Se sei un cliente Red Hat che utilizza Red Hat Enterprise Linux, contatta
Supporto Red Hat: http://redhat.com/support

C'è una mailing list, principalmente per lo sviluppo, ma anche gli utenti sono invitati a chiedere
domande su libguestfs e gli strumenti virt:
https://www.redhat.com/mailman/listinfo/libguestfs

Puoi anche parlare con noi sul canale IRC "#libguestfs" su FreeNode. non siamo sempre
in giro, quindi per favore resta nel canale dopo aver fatto la tua domanda e qualcuno ti risponderà
a te.

Per altri strumenti virt (non quelli forniti con libguestfs) c'è uno strumento virt generale
mailing list: https://www.redhat.com/mailman/listinfo/virt-tools-list

Come do I rapporto bug?
Si prega di utilizzare il seguente collegamento per inserire un bug in Bugzilla:

https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

Includere quanti più dettagli possibile e un modo per riprodurre il problema.

Includi l'output completo di libguestfs-strumento-di-test(1).

COMUNI PROBLEMI


Vedi anche "LIBGUESTFS GOTCHAS" in ospiti(3) per alcuni "trucchi" con l'uso di libguestfs
API.

"Poteva non assegnare dinamico traduttore respingente"
Questo errore oscuro è in realtà un errore di SELinux. Devi abilitare quanto segue
SELinux booleano:

setsebool -P virt_use_execmem=on

Per ulteriori informazioni, vedere https://bugzilla.redhat.com/show_bug.cgi?id=806106.

"bambino processi morto inaspettatamente"
[Questo messaggio di errore è stato modificato in libguestfs 1.21.18 in qualcosa di più esplicativo.]

Questo errore indica che qemu non è riuscito o che il kernel host non è stato in grado di avviarsi. Per andare oltre
informazioni sull'errore, è necessario eseguire:

libguestfs-strumento-di-test

Se, dopo averlo utilizzato, non capisci ancora l'errore, contattaci (vedi precedente
sezione).

libguestfs: errore: non può Find in qualsiasi adatto libguestfs superminimo, fisso or vecchio stile apparecchio
on LIBGUESTFS_PATH
febootstrap-supermin-helper: est2: genitore elenco non essere trovato
aiutante supermin: est2: genitore elenco non essere trovato
[Questo problema è stato risolto in modo permanente in libguestfs ≥ 1.26.]

Se vedi uno di questi errori su Debian/Ubuntu, devi eseguire il seguente comando:

sudo update-guestfs-appliance

"Autorizzazione negato" quando running libguestfs as radice
Viene visualizzato un errore di autorizzazione negata all'apertura di un'immagine disco, anche se è in esecuzione
libguestfs come root.

Questo è causato da libvirt e quindi accade solo quando si utilizza il backend libvirt. Quando corri
come root, libvirt decide di eseguire l'appliance qemu come utente "qemu.qemu". purtroppo
questo di solito significa che qemu non può aprire le immagini del disco, specialmente se quelle immagini del disco lo sono
di proprietà di root o sono presenti in directory che richiedono l'accesso come root.

C'è un bug aperto contro libvirt per risolvere questo problema:
https://bugzilla.redhat.com/show_bug.cgi?id=1045069

Puoi aggirare questo problema con uno dei seguenti metodi:

· Passa al backend diretto:

esporta LIBGUESTFS_BACKEND=diretto

· Non eseguire libguestfs come root.

· Chmod l'immagine del disco e qualsiasi directory padre in modo che l'utente qemu possa accedervi.

· (Cattivo) Modifica /etc/libvirt/qemu.conf e modificare l'impostazione "utente".

escl: /dentro: permesso negato
Nota: Se questo errore si verifica quando stai usando un pacchetto distro di libguestfs (es. from
Fedora, Debian, ecc.), quindi segnala un bug contro la distribuzione. Questo non è un errore che
gli utenti normali dovrebbero mai vedere se il pacchetto distro è stato preparato correttamente.

Questo errore si verifica durante la fase di avvio di supermin di avvio dell'appliance:

supermin: montaggio della nuova radice su / Root
supermin: chroot
execl: /init: Permesso negato
supermin: debug: elenco directory /
[...seguito da molti output di debug...]

Questo è un bug complicato relativo a supermini(1) elettrodomestici. L'apparecchio è costruito
copiando file come / bin / bash e molte librerie dall'host. Il file "hostfiles"
elenca i file che devono essere copiati dall'host nell'appliance. Se alcuni file
non esistono sull'host, vengono persi, ma se questi file sono necessari nell'ordine
per (es.) correre / bin / bash quindi vedrai l'errore sopra.

La diagnosi del problema implica lo studio delle biblioteche necessarie per / bin / bash, cioè:

ldd / bin / bash

confrontandolo con "hostfiles", con i file effettivamente disponibili nel filesystem host,
e con l'output di debug stampato nel messaggio di errore. Una volta che hai capito quale file
manca, installa quel file usando il tuo gestore di pacchetti e riprova.

Dovresti anche controllare che file come /dentro ed / bin / bash (nell'apparecchio) sono
eseguibile. L'output di debug mostra le modalità file.

SCARICANDO, INSTALLAZIONE, COMPILAZIONE LIBGUESTFS


Dove può I ottenere , il con i più recenti binari per ...?
Federa ≥ 11
Utilizzo:

yum install '*guestf*'

Per le ultime build, vedere:
http://koji.fedoraproject.org/koji/packageinfo?IDpacchetto=8391

Red Hat Enterprise Linux
RHEL 5
La versione fornita in RHEL 5 ufficiale è molto vecchia e non dovrebbe essere utilizzata tranne
in combinazione con virt-v2v. Usa il pacchetto libguestfs 1.20 aggiornato in EPEL
5: https://fedoraproject.org/wiki/EPEL

RHEL 6
RHEL 7
Fa parte dell'installazione predefinita. Su RHEL 6 e 7 (solo) devi installare
"libguestfs-winsupport" per ottenere il supporto per gli ospiti di Windows.

Debian e Ubuntu
Per libguestfs < 1.26, dopo aver installato libguestfs devi fare:

sudo update-guestfs-appliance

(Questo script è stato rimosso su Debian/Ubuntu con libguestfs ≥ 1.26 e invece il
l'apparecchio è costruito su richiesta.)

Solo su Ubuntu:

sudo chmod 0644 /boot/vmlinuz*

Potrebbe essere necessario aggiungersi al gruppo "kvm":

sudo usermod -a -G kvm tuo login

Spremere Debian (6)
Hilko Bengen ha creato libguestfs in squeeze backport:
http://packages.debian.org/search?keywords=guestfs&searchon=names§ion=all&suite=squeeze-backports

Debian Wheezy e versioni successive (7+)
Hilko Bengen supporta libguestfs su Debian. I pacchetti Debian ufficiali sono
disponibile: http://packages.debian.org/search?parole chiave=libguestfs

Ubuntu
Non abbiamo un manutentore Ubuntu a tempo pieno e i pacchetti forniti da
Canonical (che sono al di fuori del nostro controllo) a volte sono rotti.

Canonical ha deciso di modificare i permessi sul kernel in modo che non lo sia
leggibile tranne da root. Questo è completamente stupido, ma non lo cambieranno
(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725). Quindi ogni utente
dovrebbe fare questo:

sudo chmod 0644 /boot/vmlinuz*

Ubuntu 12.04
libguestfs in questa versione di Ubuntu funziona, ma è necessario aggiornare febootstrap
e seabios alle ultime versioni.

Hai bisogno di febootstrap ≥ 3.14-2 da:
http://packages.ubuntu.com/precise/febootstrap

Dopo aver installato o aggiornato febootstrap, ricostruisci l'appliance:

sudo update-guestfs-appliance

Hai bisogno di seabios ≥ 0.6.2-0ubuntu2.1 o ≥ 0.6.2-0ubuntu3 da:
http://packages.ubuntu.com/precise-updates/seabios or
http://packages.ubuntu.com/quantal/seabios

Inoltre devi fare (vedi sopra):

sudo chmod 0644 /boot/vmlinuz*

Gentoo
Libguestfs è stato aggiunto a Gentoo nel 2012-07 da Andreis Vinogradovs (libguestfs) e
Maxim Koltsov (principalmente hivex). Fare:

emerge libguestfs

SVIZZERA
Libguestfs è stato aggiunto a SuSE nel 2012 da Olaf Hering.

ArchLinux
Libguestfs è stato aggiunto all'AUR nel 2010.

Altra distribuzione Linux
Compila dal sorgente (sezione successiva).

Altra distribuzione non Linux
Dovrai compilare dal sorgente e portarlo.

Come può I compilare ed install libguestfs da fonte?
Puoi compilare libguestfs da git o da un tarball dei sorgenti. Leggi il file README prima
di partenza.

Git: https://github.com/libguestfs/libguestfs Tarball di origine:
http://libguestfs.org/download

Non eseguire "make install"! Utilizzare il "./ correre" script invece (vedi README).

Come può I compilare ed install libguestfs if my distro non avere nuovi abbastanza
qemu/supermin/kernel?
Libguestfs necessita di supermin 5. Se supermin 5 non è stato portato sulla tua distribuzione, vedi
la domanda sotto.

Prima compila qemu, supermin e/o il kernel dai sorgenti. Fate non bisogno di "fare
installarli".

Nella directory dei sorgenti libguestfs, crea due file. "localconfigure" dovrebbe contenere:

fonte localenv
#export PERCORSO=/tmp/qemu/x86_64-softmmu:$PERCORSO
./autogen.sh --prefisso / usr "$@"

Rendi eseguibile "localconfigure".

"localenv" dovrebbe contenere:

#esporta SUPERMIN=/tmp/supermin/src/supermin
#esporta LIBGUESTFS_HV=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64
#esporta SUPERMIN_KERNEL=/tmp/linux/arch/x86/boot/bzImage
#esporta SUPERMIN_KERNEL_VERSION=4.XX.0
#esporta SUPERMIN_MODULES=/tmp/lib/modules/4.XX.0

Decommenta e modifica queste righe come richiesto per utilizzare i programmi alternativi che hai
compilato.

Usa "./localconfigure" invece di "./configure", ma altrimenti compilerai libguestfs come
al solito.

Non eseguire "make install"! Utilizzare il "./ correre" script invece (vedi README).

Come può I compilare ed install libguestfs senza supermini?
Se supermin 5 supporta la tua distribuzione, ma non hai un supermin abbastanza nuovo
installato, quindi vedere la domanda precedente.

Se supermin 5 non supporta affatto la tua distribuzione, dovrai utilizzare il "fixed
appliance method" in cui utilizzi un'appliance binaria precompilata. Per compilare libguestfs
senza supermin, devi passare "--disable-appliance --disable-daemon" a entrambi
./autogen.sh or . / Configure (a seconda che tu stia costruendo rispettivamente da git o
da tarball). Quindi, quando usi libguestfs, tu devono obbligatoriamente: imposta "LIBGUESTFS_PATH"
variabile d'ambiente nella directory di un'appliance precompilata, come descritto anche in
"APPARECCHIO FISSO" in ospiti(3).

Per le appliance precompilate, vedere anche: http://libguestfs.org/download/binaries/appliance/.

Le patch per portare supermin su più distribuzioni Linux sono benvenute.

Come può I aggiungere supporto per svirt?
Note: per Fedora/REL gli utenti: Questa configurazione è l'impostazione predefinita a partire da Fedora 18 e
RHEL 7. Se riscontri problemi, faccelo sapere o segnala un bug.

SVirt fornisce un'appliance rinforzata utilizzando SELinux, rendendo molto difficile un disco non autorizzato
immagine per "scappare" dal confinamento di libguestfs e danneggiare l'host (è giusto dire
che anche in libguestfs standard questo sarebbe difficile, ma sVirt fornisce un ulteriore livello di
protezione per l'host e, cosa più importante, protegge le macchine virtuali sullo stesso host
gli uni dagli altri).

Attualmente per abilitare sVirt avrai bisogno di libvirt ≥ 0.10.2 (1.0 o successivo preferito),
libguestfs ≥ 1.20 e le politiche SELinux della recente Fedora. Se non stai correndo
Fedora 18+, dovrai apportare modifiche alla tua politica SELinux - contattaci su
mailing list.

Una volta che hai i requisiti, fai:

./configure --with-default-backend=libvirt # libguestfs >= 1.22
./configure --with-default-attach-method=libvirt # libguestfs <= 1.20
make

Imposta SELinux su Enforcing mode e sVirt dovrebbe essere usato automaticamente.

Tutte, o quasi, le funzionalità di libguestfs dovrebbero funzionare sotto sVirt. Ce n'è uno conosciuto
discordanza: virt-salvataggio(1) non utilizzerà libvirt (quindi sVirt), ma ricorre a direct
lancio di qemu. Quindi al momento non otterrai il vantaggio della protezione sVirt durante l'utilizzo
virt-salvataggio.

Puoi controllare se sVirt è in uso abilitando la registrazione di libvirtd (vedi
/etc/libvirt/libvirtd.log), uccidendo e riavviando libvirtd e controllando i file di registro
per i messaggi "Impostazione del contesto SELinux su ...".

In teoria sVirt dovrebbe supportare AppArmor, ma non l'abbiamo provato. sarà quasi
certamente richiedono l'applicazione di patch a libvirt e la scrittura di una policy AppArmor.

Libguestfs ha a veramente lungo stratagemma of dipendenze!
La libreria di base non dipende molto, ma ci sono tre cause della lunga lista
di altre dipendenze:

1. Libguestfs deve essere in grado di leggere e modificare molti formati di dischi diversi. Per esempio,
Il supporto XFS richiede strumenti XFS.

2. Esistono vincoli linguistici per molte lingue diverse, tutte richiedono le proprie
strumenti di sviluppo. Tutte le associazioni linguistiche (eccetto C) sono facoltative.

3. Ci sono alcune funzionalità di libreria opzionali che possono essere disabilitate.

Poiché libguestfs ≥ 1.26 è possibile suddividere le dipendenze dell'appliance (elemento 1 in
l'elenco sopra) e quindi avere (ad esempio) "libguestfs-xfs" come sottopacchetto separato per
elaborazione delle immagini del disco XFS. Incoraggiamo i confezionatori a valle a iniziare a dividere la base
libguestfs in sottopacchetti più piccoli.

errori durante lanciare on Fedora 18 RHEL 7
In Fedora ≥ 18 e RHEL ≥ 7, libguestfs utilizza libvirt per gestire l'appliance. In precedenza
(e upstream) libguestfs esegue direttamente qemu:

?
libguestfs │
?
│ backend diretto │ backend libvirt │
?
↓ ↓
┌───────┐ ┌──────────┐
qemu │ │ libvirtd │
└───────┘ └──────────┘

?
qemu │
?

a monte Fedora 18+
non Fedora RHEL 7+
non RHEL

Il backend libvirt è più sofisticato, supporta SELinux/sVirt (vedi sopra),
hotplug e altro. È, tuttavia, più complesso e quindi meno robusto.

Se hai problemi con i permessi usando il backend libvirt, puoi passare al direct
backend impostando questa variabile d'ambiente:

esporta LIBGUESTFS_BACKEND=diretto

prima di eseguire qualsiasi programma libguestfs o strumento virt.

Come può I interruttore a a fisso / precompilati apparecchio?
Ciò può migliorare la stabilità e le prestazioni di libguestfs su Fedora e RHEL.

In qualsiasi momento dopo aver installato libguestfs, esegui i seguenti comandi come root:

mkdir -p /usr/local/lib/guestfs/appliance
libguestfs-make-fixed-appliance /usr/local/lib/guestfs/appliance
ls -l /usr/local/lib/guestfs/appliance

Ora imposta la seguente variabile di ambiente prima di utilizzare libguestfs o qualsiasi strumento virt:

esporta LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

Ovviamente puoi cambiare il percorso di qualsiasi directory tu voglia. Puoi condividere l'apparecchio
tra macchine che hanno la stessa architettura (es. tutti x86-64), ma si noti che libvirt
ti impedirà di condividere l'appliance su NFS a causa di problemi di autorizzazioni (quindi
passare al backend diretto o non utilizzare NFS).

Come può I velocità up libguestfs costruisce?
La cosa di gran lunga più importante che puoi fare è installare e configurare correttamente Squid.
Nota che la configurazione predefinita fornita con Squid è spazzatura, quindi configurarlo è
non facoltativo.

Un ottimo punto di partenza con la configurazione di Squid è qui:
https://fedoraproject.org/wiki/Extras/MockTricks#Using_Squid_to_Speed_Up_Mock_package_downloads

Assicurati che Squid sia in esecuzione e che le variabili di ambiente $http_proxy e $ftp_proxy
lo stanno indicando.

Con Squid in esecuzione e configurato correttamente, le build dell'appliance dovrebbero essere ridotte a pochi
minuti.

Come può I velocità up libguestfs costruisce (Debian)?

Hilko Bengen suggerisce di usare "approssimativamente" che è un proxy di archivio Debian
(http://packages.debian.org/approx). Questo strumento è documentato su Debian nel circa(8)
pagina di manuale.

VELOCITÀ, DISCO SPACE USATO BY LIBGUESTFS


Nota: La maggior parte delle informazioni in questa sezione è stata spostata: performance degli ospiti(1).

Caricare or scrivere sembrare molto lento.
Se il disco sottostante non è completamente allocato (es. sparse raw o qcow2), le scritture possono essere
lento perché il sistema operativo host deve eseguire costose allocazioni del disco mentre sei tu
scrivere. La soluzione è utilizzare invece un formato completamente allocato, ad es. crudo non scarso, o
qcow2 con l'opzione "preallocation=metadata".

Libguestfs usa pure molti disco spazio!
libguestfs memorizza nella cache un'appliance di grandi dimensioni in:

/var/tmp/.guestfs-

Se la variabile d'ambiente "TMPDIR" è definita, allora $TMPDIR/.guestfs- viene usato
anziché.

È sicuro eliminare questa directory quando non si utilizza libguestfs.

virt-sparsificare sembra a make , il Immagine crescere a , il pieno Taglia of , il virtuale disco
Se l'ingresso a virt-sparsificare(1) è grezzo, quindi l'output sarà sparso. Assicurarsi
stai misurando l'output con uno strumento che comprende la scarsità come "du -sh".
Può fare una grande differenza:

$ ls -lh prova1.img
-rw-rw-r--. 1 rjones rjones 100M 8 ago 08:08 test1.img
$ du -sh prova1.img
3.6M prova1.img

(Confronta la dimensione apparente 100M rispetto alla dimensione effettiva 3.6M)

Se tutto questo ti confonde, usa un formato di output non scarso specificando il --convertire
opzione, ad esempio:

virt-sparsify --converte qcow2 disco.raw disco.qcow2

Perché non ridimensionamento virtuale lavoro on , il disco Immagine a posto?
Il ridimensionamento di un'immagine disco è molto complicato, soprattutto assicurandosi di non perdere dati o
rompere il bootloader. Il metodo corrente crea effettivamente una nuova immagine del disco e copia
i dati più il bootloader di quello vecchio. Se qualcosa va storto, puoi sempre andare
ritorno all'originale.

Se dovessimo far funzionare il virt-resize sul posto, allora dovrebbero esserci delle limitazioni: per
esempio, non ti sarebbe permesso spostare le partizioni esistenti (perché lo spostamento dei dati attraverso
è più probabile che lo stesso disco danneggi i dati in caso di interruzione di corrente o arresto anomalo),
e LVM sarebbero molto difficili da supportare (a causa della mappatura quasi arbitraria
tra contenuto LV e blocchi disco sottostanti).

Un altro metodo che abbiamo preso in considerazione è posizionare un'istantanea sull'immagine del disco originale, quindi
che i dati originali non siano stati modificati e solo le differenze siano registrate nell'istantanea.
Puoi farlo oggi usando "qemu-img create" + "virt-resize", ma qemu attualmente non lo è
abbastanza intelligente da riconoscere quando lo stesso blocco viene riscritto nell'istantanea come già
esiste nel disco di supporto, quindi scoprirai che questo non ti fa risparmiare spazio o tempo.

In sintesi, questo è un problema difficile e ciò che abbiamo ora funziona principalmente, quindi siamo riluttanti
per cambiarlo.

Perché non virt-sparsificare lavoro on , il disco Immagine a posto?
In libguestfs ≥ 1.26, virt-sparsify ora può funzionare su immagini disco sul posto. Uso:

virt-sparsify --in-place disk.img

Ma prima dovresti leggere "SPARSIFICAZIONE SUL POSTO" in virt-sparsificare(1).

PROBLEMI APERTURA DISCO IMMAGINI


Assistenza libvirt ospiti non può be ha aperto.
L'apertura di guest libvirt remoti non è attualmente supportata. Ad esempio questo non funzionerà:

guestfish -c qemu://remote/system -d Ospite

Per aprire i dischi remoti devi esportarli in qualche modo, quindi collegarti all'esportazione. Per
esempio se hai deciso di usare NBD:

remoto$ qemu-nbd -t -p 10809 guest.img
local$ guestfish -a nbd://remote:10809 -i

Altre possibilità includono ssh (se qemu è abbastanza recente), NFS o iSCSI. Vedere "TELECOMANDO
STOCCAGGIO" in ospiti(3).

Come può I aprire questo strano disco fonte?
Hai un'immagine disco situata all'interno di un altro sistema che richiede l'accesso tramite una libreria /
HTTP/REST/API proprietaria, oppure è compresso o archiviato in qualche modo. (Un esempio
sarebbe l'accesso remoto alle immagini di OpenStack Sguardo senza effettivamente scaricarle.)

Abbiamo un progetto gemello chiamato nbdkit (https://github.com/libguestfs/nbdkit). Questo
project ti consente di trasformare qualsiasi sorgente disco in un server NBD. Libguestfs può accedere a NBD
server direttamente, ad esempio:

guestfish -a nbd://remote

nbdkit ha una licenza libera, quindi puoi collegarlo o includerlo in librerie proprietarie
e codice. Ha anche un'API plug-in semplice e stabile in modo da poter facilmente scrivere plug-in contro
l'API che continuerà a funzionare in futuro.

Errore apertura VMDK dischi: "usa" a vmdk caratteristica quale is non supportato by questo whoa Versione:
VMDK versione 3"
Qemu (e quindi libguestfs) supporta solo determinate immagini del disco VMDK. altri non funzioneranno,
dando questo o errori simili.

Idealmente qualcuno correggerebbe qemu per supportare le ultime funzionalità di VMDK, ma nel frattempo
hai tre opzioni:

1. Se il guest è ospitato su un server ESX live e raggiungibile, individuare e scaricare il
immagine del disco chiamata nome-piatto.vmdk. Nonostante il nome, questa è un'immagine del disco non elaborata e
può essere aperto da qualsiasi cosa.

Se hai una versione abbastanza recente di qemu e libguestfs, allora potresti essere in grado di farlo
accedere a questa immagine del disco in remoto utilizzando HTTPS o ssh. Vedere "MEMORIZZAZIONE REMOTA" in
ospiti(3).

2. Utilizzare lo strumento vdiskmanager proprietario di VMware per convertire l'immagine in formato raw.

3. Usa nbdkit con il plug-in VDDK proprietario per esportare in tempo reale l'immagine del disco come NBD
fonte. Questo dovrebbe consentire di leggere e scrivere il file VMDK.

UFS dischi (come utilizzato by BSD) non può be ha aperto.
Il formato del filesystem UFS ha molte varianti e queste non sono autoidentificanti. Il
Al kernel Linux deve essere detto quale variante di UFS deve usare, quale libguestfs non può
sa.

Devi passare l'opzione di montaggio "ufstype" corretta durante il montaggio di questi filesystem.

Vedi https://www.kernel.org/doc/Documentation/filesystems/ufs.txt

Windows Refs
Windows ReFS è la copia ZFS/Btrfs di Microsoft. Questo filesystem non è ancora stato invertito
progettato e implementato nel kernel Linux, e quindi libguestfs non supporta
esso. Al momento sembra essere molto raro "in natura".

Non ASCII caratteri non apparire on VFAT file system.
Sintomi tipici di questo problema:

· Ricevi un errore quando crei un file in cui il nome del file non contiene ASCII
caratteri, in particolare caratteri non a 8 bit delle lingue asiatiche (cinese, giapponese,
eccetera). Il file system è VFAT.

· Quando si elenca una directory da un filesystem VFAT, i nomi dei file vengono visualizzati come punti interrogativi.

Questo è un difetto di progettazione del sistema GNU/Linux.

VFAT memorizza i nomi di file lunghi come caratteri UTF-16. Quando si aprono o si restituiscono nomi di file, il
Il kernel Linux deve tradurli in una qualche forma di stringa a 8 bit. UTF-8 sarebbe il
scelta ovvia, eccetto per gli utenti Linux che persistono nell'usare locali non UTF-8 (l'utente
locale non è noto al kernel perché è una funzione di libc).

Quindi devi dire al kernel quale traduzione vuoi fare quando monti il
file system. I due metodi sono il parametro "iocharset" (che non è rilevante per
libguestfs) e il flag "utf8".

Quindi per utilizzare un filesystem VFAT è necessario aggiungere il flag "utf8" durante il montaggio. Da guestfish,
uso:

> opzioni di montaggio utf8 /dev/sda1 /

o sulla riga di comando guestfish:

guestfish [...] -m /dev/sda1:/:utf8

o dall'API:

guestfs_mount_options (g, "utf8", "/dev/sda1", "/");

Il kernel tradurrà quindi i nomi dei file da e verso le stringhe UTF-8.

Abbiamo preso in considerazione l'aggiunta di questa opzione di montaggio in modo trasparente, ma sfortunatamente ce ne sono diverse
problemi nel farlo:

· Su alcuni sistemi Linux, l'opzione di montaggio "utf8" non funziona. Non siamo precisi
capire quali sistemi o perché, ma questo è stato segnalato in modo affidabile da un utente.

· Ti impedirebbe di usare il parametro "iocharset" perché è incompatibile
con "utf8". Probabilmente non è una buona idea usare questo parametro, ma non lo vogliamo
per impedirlo.

Non ASCII caratteri apparire as sottolineare (_) on ISO9660 file system.
Il filesystem non è stato preparato correttamente con mkisofs o genisoimage. Assicurati che
il filesystem è stato creato utilizzando le estensioni Joliet e/o Rock Ridge. libguestfs no
richiedono qualsiasi opzione di montaggio speciale per gestire il filesystem.

Impossibile aprire Windows ospiti quale uso NTFS.
Vedi errori come:

mount: tipo di filesystem sconosciuto 'ntfs'

Su Red Hat Enterprise Linux o CentOS, devi installare libguestfs-winsupport
pacchetto.

Impossibile aprire or ispezionare RHEL 7 ospiti.
Impossibile aprire Linux ospiti quale uso XFS.
I guest RHEL 7 e tutti gli altri guest che utilizzano XFS possono essere aperti da libguestfs, ma tu
devo installare il pacchetto "libguestfs-xfs".

UTILIZZO LIBGUESTFS IN AL VOSTRO PROPRIO PROGRAMMI


I API ha centinaia of metodi, where do I inizio?
Ti consigliamo di iniziare leggendo la panoramica delle API: "PANORAMICA API" in ospiti(3).

Sebbene la panoramica dell'API copra l'API C, vale comunque la pena leggerla anche se lo sei
userò un altro linguaggio di programmazione, perché l'API è la stessa, solo con semplice
modifiche logiche ai nomi delle chiamate:

C guestfs_ln_sf (g, destinazione, nome collegamento);
Python g.ln_sf (destinazione, nome collegamento);
OCaml g#ln_sf nome collegamento di destinazione;
Perl $g->ln_sf (destinazione, nome collegamento);
Shell (guestfish) ln-sf nome collegamento target
PHP guestfs_ln_sf ($g, $target, $linkname);

Una volta acquisita familiarità con la panoramica dell'API, dovresti dare un'occhiata a questo elenco di avvio
punti per altri vincoli linguistici: "UTILIZZO DI LIBGUESTFS CON ALTRI LINGUAGGI DI PROGRAMMAZIONE" in
ospiti(3).

Può I uso libguestfs in my proprio / chiuso source / programma?
In generale, sì. Tuttavia questo non è un consiglio legale - leggi la licenza fornita con
libguestfs e se hai domande specifiche contatta un avvocato.

Nell'albero dei sorgenti la licenza si trova nel file "COPYING.LIB" (LGPLv2+ per la libreria e
binding) e "COPYING" (GPLv2+ per i programmi standalone).

DEBUG LIBGUESTFS


Aiuto, suo non Lavorando!
Se nessun programma libguestfs sembra funzionare, esegui il programma di seguito e incolla il file
completare, inedito output in un'e-mail a "libguestfs" @ "redhat.com":

libguestfs-strumento-di-test

Se una particolare operazione fallisce, fornisci tutte le informazioni in questa lista di controllo, in un'e-mail
a "libguestfs" @ "redhat.com":

1. Cosa stai cercando di fare?

2. Quali comandi esatti hai eseguito?

3. Qual è stato l'errore preciso o l'output di questi comandi?

4. Abilitare il debug, eseguire nuovamente i comandi e acquisire il completamento di una produzione. Do non
edit , il produzione.

esporta LIBGUESTFS_DEBUG=1
esporta LIBGUESTFS_TRACE=1

5. Includi la versione di libguestfs, la versione del sistema operativo e come hai installato
libguestfs (es. from source, "yum install", ecc.)

Come do I mettere a punto quando utilizzando in qualsiasi libguestfs Programma or (per esempio. virt-v2v or virt-df)?
Ci sono due variabili d'ambiente "LIBGUESTFS_*" che puoi impostare per ottenere di più
informazioni da libguestfs.

"LIBGUESTFS_TRACE"
Impostalo su 1 e libguestfs stamperà ogni comando / chiamata API in un formato che
è simile ai comandi guestfish.

"LIBGUESTFS_DEBUG"
Impostalo su 1 per abilitare enormi quantità di messaggi di debug. Se pensi
c'è qualche problema all'interno dell'appliance libguestfs, quindi dovresti usare questo
opzione.

Per impostarli dalla shell, esegui questa operazione prima di eseguire il programma:

esporta LIBGUESTFS_TRACE=1
esporta LIBGUESTFS_DEBUG=1

Per csh/tcsh i comandi equivalenti sarebbero:

setenv LIBGUESTFS_TRACE 1
setenv LIBGUESTFS_DEBUG 1

Per ulteriori informazioni, vedere: "VARIABILI D'AMBIENTE" in ospiti(3).

Come do I mettere a punto quando utilizzando pesce ospite?
Puoi usare le stesse variabili di ambiente sopra. In alternativa usa le opzioni guestfish
-x (per tracciare i comandi) o -v (per ottenere l'output di debug completo) o entrambi.

Per ulteriori informazioni, consultare: pesce ospite(1).

Come do I mettere a punto quando utilizzando , il API?
Chiama "guestfs_set_trace" in ospiti(3) per abilitare le tracce di comando e/o
"guestfs_set_verbose" in ospiti(3) per abilitare i messaggi di debug.

Per ottenere i migliori risultati, chiama queste funzioni il prima possibile, subito dopo aver creato il
guestfs gestisce se puoi, e sicuramente prima di chiamare launch.

Come do I catturare mettere a punto produzione ed metti it ai miglioramenti my registrazione sistema?
Usa l'API dell'evento. Per esempi, vedere: "IMPOSTAZIONE DI RICHIAMATE PER GESTIRE EVENTI" in ospiti(3)
e la esempi/debug-logging.c programma nei sorgenti di libguestfs.

Scavo più profondo ai miglioramenti , il apparecchio stivale processo.
Abilita il debug, quindi leggi questa documentazione sul processo di avvio dell'appliance:
guestfs-interni(1).

libguestfs si blocca or fallisce durante eseguire/lanciare.
Abilita il debug e guarda l'output completo. Se non riesci a capire cosa sta succedendo,
inviare una segnalazione di bug, incluso il completamento di una uscita di libguestfs-strumento-di-test(1).

Debug libvirt
Se stai usando il backend libvirt e libvirt fallisce, puoi abilitare
debugging modificando /etc/libvirt/libvirtd.conf.

Se stai eseguendo come non root, devi modificare un file diverso. Creare
~/.config/libvirt/libvirtd.conf contenente:

livello_log=1
log_outputs="1:file:/tmp/libvirtd.log"

Uccidi qualsiasi sessione (non root) libvirtd in esecuzione e la prossima volta esegui libguestfs
comando, dovresti vedere una grande quantità di utili informazioni di debug da libvirtd in
/tmp/libvirtd.log

DESIGN/INTERNI OF LIBGUESTFS


Vedi anche guestfs-interni(1).

Perché non Tu do qualunque cosa attraverso , il FUSE / filesystem interfaccia?
Offriamo un comando chiamato ospite(1) che ti consente di montare i filesystem guest sul
ospite. Questo è implementato come modulo FUSE. Perché non implementiamo semplicemente l'intero
libguestfs usando questo meccanismo, invece di avere l'API grande e piuttosto complicata?

Le ragioni sono duplici. In primo luogo, libguestfs offre chiamate API per fare cose come
creazione ed eliminazione di partizioni e volumi logici, che non rientrano in un filesystem
modello molto facilmente. O meglio, potresti inserirli: ad esempio, creando una partizione
potrebbe essere mappato su "mkdir /fs/hda1" ma poi dovresti specificare un metodo da scegliere
la dimensione della partizione (forse "echo 100M > /fs/hda1/.size") e il tipo di partizione,
iniziare e terminare i settori ecc., ma una volta fatto l'API basata sul filesystem inizia a
sembra più complicato dell'API basata sulle chiamate che abbiamo attualmente.

La seconda ragione è per l'efficienza. FUSE stesso è ragionevolmente efficiente, ma lo fa
effettuare molte piccole chiamate indipendenti nel modulo FUSE. In guestmount questi devono
essere tradotto in messaggi per l'appliance libguestfs che ha un grande sovraccarico (nel tempo
e viaggi di andata e ritorno). Ad esempio, la lettura di un file in blocchi di 64 KB è inefficiente perché ciascuno
pezzo si trasformerebbe in un unico viaggio di andata e ritorno. Nell'API libguestfs è molto di più
efficiente per scaricare un intero file o directory tramite una delle chiamate in streaming come
"guestfs_download" o "guestfs_tar_out".

Perché non Tu do qualunque cosa attraverso GVFS?
I problemi sono simili ai problemi con FUSE.

GVFS è un'astrazione migliore di POSIX/FUSE. C'è un backend FTP per GVFS, che è
incoraggiante perché FTP è concettualmente simile all'API libguestfs. Tuttavia il GVFS
Il backend FTP effettua più connessioni simultanee per mantenere l'interattività, il che
non possiamo farlo facilmente con libguestfs.

Perché può I scrivere a , il disco, anche anche se I aggiunto it sola lettura?
Perché effettua "--ro" apparire a avere no effetto?
Quando aggiungi un disco di sola lettura, libguestfs inserisce un overlay scrivibile sopra il
disco sottostante. Le scritture vanno in questo overlay e vengono scartate quando l'handle è chiuso
(o "guestfish" ecc. esce).

Ci sono due ragioni per farlo in questo modo: in primo luogo i dischi di sola lettura non sono possibili in
molti casi (ad es. IDE semplicemente non li supporta, quindi non potresti avere un IDE emulato
disco di sola lettura, sebbene ciò non sia comune nelle installazioni reali di libguestfs).

In secondo luogo e soprattutto, anche se i dischi di sola lettura fossero possibili, non vorreste
loro. Montare qualsiasi filesystem che ha un journal, anche "mount -o ro", causa write to
il filesystem perché il journal deve essere riprodotto e i metadati aggiornati. Se il disco
era veramente di sola lettura, non saresti stato in grado di montare un filesystem sporco.

Per renderlo utilizzabile, creiamo l'overlay come luogo per memorizzare temporaneamente queste scritture e
poi lo scartiamo dopo. Ciò garantisce che il disco sottostante sia sempre intatto.

Nota anche che esiste un test di regressione per questo quando si compila libguestfs (in
"test/qemu"). Questo è uno dei motivi per cui è importante che i packager eseguano la suite di test.

Le normative "--ro" make contro tutti i dischi sola lettura?
No! L'opzione "--ro" ha effetto solo sui dischi aggiunti nella riga di comando, ad es. usando "-a" e
Opzioni "-d".

In guestfish, se usi il comando "add", il disco viene aggiunto in lettura-scrittura (a meno che tu
specificare esplicitamente il flag "readonly:true" con il comando).

Può I uso "pesce ospite" --ro" as a modo a di riserva my virtuale macchine?
Di solito questo è non una buona idea. La domanda trova una risposta più dettagliata in questo messaggio
pubblicazione dell'elenco: https://www.redhat.com/archives/libguestfs/2010-August/msg00024.html

Vedi anche la domanda successiva.

Perché non può I eseguire il fsck on a vivere filesystem utilizzando "pesce ospite" --ro"?
Questo comando di solito non lavoro:

guestfish --ro -a /dev/vg/my_root_fs run: fsck /dev/sda

La ragione di ciò è che qemu crea un'istantanea sul filesystem originale, ma
non crea uno snapshot point-in-time rigoroso. Blocchi di dati sul sottostante
i filesystem vengono letti da qemu in momenti diversi man mano che l'operazione fsck procede, con host
scrive in mezzo. Il risultato è che fsck vede una massiccia corruzione (immaginaria, non reale!)
e fallisce.

Quello che devi fare è creare uno snapshot point-in-time. Se è un volume logico, usa
un'istantanea di LVM2. Se il filesystem si trova all'interno di qualcosa come un file btrfs/ZFS,
utilizzare uno snapshot btrfs/ZFS, quindi eseguire fsck sullo snapshot. In pratica non lo fai
è necessario utilizzare libguestfs per questo -- basta eseguire /sbin/fsck direttamente.

La creazione di istantanee temporizzate di dispositivi host e file non rientra nell'ambito di
libguestfs, sebbene libguestfs possa operare su di essi una volta creati.

Cosa c'è , il differenza fra pesce ospite ed virt-salvataggio?
Molte persone sono confuse dai due strumenti apparentemente simili che forniamo:

$ guestfish --ro -a guest.img
> correre
> fsck /dev/sda1

$ virt-rescue --ro guest.img
> /sbin/fsck / Dev / sda1

E la domanda correlata che si pone è perché non puoi digitare comandi shell completi
con tutte le --opzioni in guestfish (ma puoi in virt-salvataggio(1)).

pesce ospite(1) è un programma che fornisce un accesso strutturato al ospiti(3) API. Succede
essere anche una bella shell interattiva, ma il suo scopo principale è l'accesso strutturato da
script di shell. Pensalo più come un legame linguistico, come Python e altri legami,
ma per conchiglia. Il fattore chiave di differenziazione di guestfish (e dell'API libguestfs in
generale) è la capacità di automatizzare le modifiche.

virt-salvataggio(1) è un modo libero per tutti per avviare l'appliance libguestfs e creare
modifiche arbitrarie alla tua VM. Non è strutturato, non puoi automatizzarlo, ma per fare
rapide soluzioni ad hoc per i tuoi ospiti, può essere molto utile.

Ma, libguestfs ha anche una "backdoor" nell'appliance che ti consente di inviare arbitrariamente
comandi della shell. Non è flessibile come virt-rescue, perché non puoi interagire con il
comandi della shell, ma eccolo comunque:

> debug sh "cmd arg1 arg2 ..."

Nota che dovresti non fare affidamento su questo. Potrebbe essere rimosso o modificato in futuro. Se tuo
il programma necessita di alcune operazioni, per favore aggiungilo invece all'API libguestfs.

Cosa c'è , il affare con "pesce ospite" -io"?
Perché effettua virt-gatto esclusivamente lavoro on a di rose VM Immagine, ma virt-df lavori on in qualsiasi disco Immagine?
Che effettua "no radice dispositivo essere trovato in questo operativo sistema Immagine" significa?
Queste domande sono tutte collegate a un livello fondamentale che potrebbe non essere immediato
ovvio.

Al ospiti(3) A livello API, una "immagine disco" è solo un mucchio di partizioni e filesystem.

Al contrario, quando la macchina virtuale si avvia, monta quei filesystem in modo coerente
gerarchia come:

/(/dev/sda2)

├── /avvio (/dev/sda1)

├── / Home (/dev/vg_external/Case)

├── / usr (/dev/vg_os/lv_usr)

└── / var (/dev/vg_os/lv_var)

(o lettere di unità su Windows).

L'API vede prima di tutto l'immagine del disco a livello di "pile of filesystems". Ma anche
ha un modo per ispezionare l'immagine del disco per vedere se contiene un sistema operativo e come
i dischi vengono montati all'avvio del sistema operativo: "INSPECTION" in ospiti(3).

Gli utenti si aspettano alcuni strumenti (come virt-gatto(1)) per lavorare con i percorsi VM:

virt-cat fedora.img /var/log/messages

Come fa virt-cat a saperlo? / var è una partizione separata? Il trucco è che virt-cat
esegue l'ispezione sull'immagine del disco e la utilizza per tradurre correttamente il percorso.

Alcuni strumenti (tra cui virt-gatto(1) virt-modifica(1) virt-ls(1)) usa l'ispezione per mappare la VM
percorsi. Altri strumenti, come virt-df(1) e filesystem-virt(1) operare interamente presso il
livello grezzo "grande pila di filesystem" dell'API libguestfs e non utilizzare l'ispezione.

pesce ospite(1) è in una via di mezzo interessante. Se usi il -a ed -m riga di comando
opzioni, quindi devi dire a guestfish esattamente come aggiungere immagini disco e dove montarle
partizioni. Questo è il livello API grezzo.

Se si utilizza il -i opzione, libguestfs esegue l'ispezione e monta i filesystem per
te.

L'errore "nessun dispositivo root trovato in questa immagine del sistema operativo" è correlato a questo. Esso
significa che l'ispezione non è stata in grado di individuare un sistema operativo all'interno dell'immagine del disco che hai fornito
esso. Potresti vederlo da programmi come virt-cat se provi a eseguirli su qualcosa
che è solo un'immagine del disco, non un'immagine del disco della macchina virtuale.

Che do di queste "debug*" ed "interno-*" funzioni fare?
Ci sono alcune funzioni che vengono utilizzate per il debug e per scopi interni che sono non
parte dell'API stabile.

Le funzioni "debug*" (o "guestfs_debug*"), principalmente "guestfs_debug" in ospiti(3) e
una manciata di altri, sono usati per il debug di libguestfs. Sebbene non facciano parte del
API stabile e quindi potrebbe cambiare o essere rimossa in qualsiasi momento, alcuni programmi potrebbero voler chiamare
questi in attesa che vengano aggiunte funzionalità a libguestfs.

Le funzioni "internal-*" (o "guestfs_internal_*") devono essere utilizzate esclusivamente da libguestfs
si. Non c'è motivo per i programmi di chiamarli e i programmi non dovrebbero provare a usarli
loro. Usarli spesso farà accadere cose brutte, oltre a non far parte del
API stabile documentata.

SVILUPPATORI


Dove do I inviare cerotti?
Si prega di inviare patch alla mailing list libguestfs
https://www.redhat.com/mailman/listinfo/libguestfs. You don't have to be subscribed, but
ci sarà un ritardo fino a quando la tua pubblicazione non sarà approvata manualmente.

Per favore, non uso github tirare richieste - di volere be ignorati. Le ragioni sono (a) vogliamo
per discutere e sezionare le patch sulla mailing list e (b) le richieste pull di github si trasformano in
merge commit ma preferiamo avere una cronologia lineare.

Come do I offre a caratteristica?
Grandi nuove funzionalità a cui intendi contribuire dovrebbero essere discusse nella mailing list
prima (https://www.redhat.com/mailman/listinfo/libguestfs). Questo evita delusioni
e spreco di lavoro se non pensiamo che la funzionalità si adatti al progetto libguestfs.

Se vuoi suggerire una funzione utile ma non vuoi scrivere il codice, puoi archiviare a
bug (vedi "OTTENERE AIUTO E SEGNALARE BUG") con "RFE: " all'inizio del Sommario
linea.

Chi può commettere a libguestfs idiota?
Circa 5 persone hanno accesso al commit a github. Le patch devono essere pubblicate prima nell'elenco
e ACK. La politica per l'ACK e il push delle patch è descritta qui:

https://www.redhat.com/archives/libguestfs/2012-January/msg00023.html

Può I forcella libguest?
Certo che puoi. Git semplifica il fork di libguestfs. Github lo rende ancora più semplice.
È bello se ci parli sulla mailing list delle fork e delle loro ragioni.

VARIE DOMANDE


Può I monitore , il vivere disco attività of a virtuale macchina utilizzando libguest?
Una richiesta comune è quella di poter utilizzare libguestfs per monitorare l'attività del disco live di a
guest, ad esempio, per ricevere una notifica ogni volta che un ospite crea un nuovo file. Libguestfs
effettua non funzionano nel modo in cui alcune persone immaginano, come puoi vedere da questo diagramma:

?
│ programma di monitoraggio utilizzando libguestfs │
?

┌──────────┐ ┌──────────────────────┐
│ VM live │ │ appliance libguestfs │
├──────────┤ ├──────────────────────┤
│ kernel (1)│ │ kernel dell'appliance (2) │
└──────────┘ └──────────────────────┘
↓ ↓ (connessione r/o)
?
| immagine disco |
?

Questo scenario è sicuro (se si imposta il flag "sola lettura" quando si aggiunge l'unità).
Tuttavia il kernel dell'appliance libguestfs (2) non vede tutte le modifiche apportate al disco
immagine, per due motivi:

io. Il kernel della VM (1) può memorizzare nella cache i dati in memoria, quindi non appare nell'immagine del disco.

ii. Il kernel dell'appliance libguestfs (2) non si aspetta che l'immagine del disco cambi
sotto di esso, quindi la propria cache non viene magicamente aggiornata anche quando il kernel della VM (1)
aggiorna l'immagine del disco.

L'unica soluzione supportata è riavviare l'intera appliance libguestfs ogni volta che si
desidera esaminare i cambiamenti nell'immagine del disco. A livello API che corrisponde alla chiamata
"guestfs_shutdown" seguito da "guestfs_launch", che è un'operazione pesante (vedi
anche performance degli ospiti(3)).

Ci sono alcuni hack non supportati che puoi provare se riavviare l'appliance è davvero troppo
costoso:

· Chiama "guestfs_drop_caches (g, 3)". Questo fa sì che tutti i dati memorizzati nella cache vengano aiutati da libguestfs
kernel dell'appliance (2) da scartare, quindi torna all'immagine del disco.

Tuttavia questo da solo non è sufficiente, perché qemu memorizza anche alcuni dati nella cache. Voi
sarà anche necessario applicare la patch a libguestfs per (ri)abilitare la modalità "cache=unsafe". Vedere:
https://rwmj.wordpress.com/2013/09/02/new-in-libguestfs-allow-cache-mode-to-be-selected/

· Utilizzare invece uno strumento come virt-bmap.

· Eseguire un agente all'interno del guest.

Nulla aiuta se l'ospite sta apportando modifiche più fondamentali (ad esempio l'eliminazione dei filesystem).
Per questo tipo di cose è necessario riavviare l'apparecchio.

(Nota che c'è un terzo problema che devi usare istantanee coerenti per esaminarlo davvero
immagini del disco live, ma questo è un problema generale con l'utilizzo di libguestfs contro qualsiasi disco live
Immagine.)

Usa guestfs-faq online utilizzando i servizi onworks.net


Server e workstation gratuiti

Scarica app per Windows e Linux

Comandi Linux

Ad