.\" Automatically generated by Podwrapper::Man 1.44.2 (Pod::Simple 3.40)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
. ds C`
. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
. if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
. \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "virt-v2v-output-local 1"
.TH virt-v2v-output-local 1 "2022-01-01" "virt-v2v-1.44.2" "Virtualization Support"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
virt\-v2v\-output\-local \- Using virt\-v2v to convert guests to local files
or libvirt
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& virt\-v2v [\-i* options] [\-o libvirt] \-os POOL
\&
\& virt\-v2v [\-i* options] \-o local \-os DIRECTORY
\&
\& virt\-v2v [\-i* options] \-o qemu \-os DIRECTORY [\-\-qemu\-boot]
\&
\& virt\-v2v [\-i* options] \-o json \-os DIRECTORY
\& [\-oo json\-disks\-pattern=PATTERN]
\&
\& virt\-v2v [\-i* options] \-o null
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
This page documents how to use \fBvirt\-v2v\fR\|(1) to convert guests to
local files or to a locally running libvirt instance. There are four
output modes you can select on the virt\-v2v command line:
.ie n .IP "\fB\-o libvirt \-os\fR ""POOL""" 4
.el .IP "\fB\-o libvirt \-os\fR \f(CWPOOL\fR" 4
.IX Item "-o libvirt -os POOL"
.PD 0
.ie n .IP "\fB\-os\fR ""POOL""" 4
.el .IP "\fB\-os\fR \f(CWPOOL\fR" 4
.IX Item "-os POOL"
.PD
This converts the guest to a libvirt directory pool call \f(CW\*(C`POOL\*(C'\fR, and
instantiates the guest in libvirt (but does not start it running).
See \*(L"\s-1OUTPUT TO LIBVIRT\*(R"\s0 below.
.Sp
\&\fI\-o libvirt\fR is the default if no \fI\-o\fR option is given, so you can
omit it.
.ie n .IP "\fB\-o local \-os\fR ""DIRECTORY""" 4
.el .IP "\fB\-o local \-os\fR \f(CWDIRECTORY\fR" 4
.IX Item "-o local -os DIRECTORY"
This converts the guest to files in \f(CW\*(C`DIRECTORY\*(C'\fR. A libvirt \s-1XML\s0 file
is also created, but unlike \fI\-o libvirt\fR the guest is not
instantiated in libvirt, only files are created.
.Sp
The files will be called:
.Sp
.Vb 2
\& NAME\-sda, NAME\-sdb, etc. Guest disk(s).
\& NAME.xml Libvirt XML.
.Ve
.Sp
where \f(CW\*(C`NAME\*(C'\fR is the guest name.
.ie n .IP "\fB\-o qemu \-os\fR ""DIRECTORY""" 4
.el .IP "\fB\-o qemu \-os\fR \f(CWDIRECTORY\fR" 4
.IX Item "-o qemu -os DIRECTORY"
.PD 0
.ie n .IP "\fB\-o qemu \-os\fR ""DIRECTORY"" \fB\-\-qemu\-boot\fR" 4
.el .IP "\fB\-o qemu \-os\fR \f(CWDIRECTORY\fR \fB\-\-qemu\-boot\fR" 4
.IX Item "-o qemu -os DIRECTORY --qemu-boot"
.PD
This converts the guest to files in \f(CW\*(C`DIRECTORY\*(C'\fR. Unlike \fI\-o local\fR
above, a shell script is created which contains the raw qemu command
you would need to boot the guest. However the shell script is not
run, \fIunless\fR you also add the \fI\-\-qemu\-boot\fR option.
.ie n .IP "\fB\-o json \-os\fR ""DIRECTORY""" 4
.el .IP "\fB\-o json \-os\fR \f(CWDIRECTORY\fR" 4
.IX Item "-o json -os DIRECTORY"
This converts the guest to files in \f(CW\*(C`DIRECTORY\*(C'\fR. The metadata
produced is a \s-1JSON\s0 file containing the majority of the data virt\-v2v
gathers during the conversion.
See \*(L"\s-1OUTPUT TO JSON\*(R"\s0 below.
.IP "\fB\-o null\fR" 4
.IX Item "-o null"
The guest is converted, but the final result is thrown away and no
metadata is created. This is mainly useful for testing.
.SH "OUTPUT TO LIBVIRT"
.IX Header "OUTPUT TO LIBVIRT"
The \fI\-o libvirt\fR option lets you upload the converted guest to
a libvirt-managed host. There are several limitations:
.IP "\(bu" 4
You can only use a local libvirt connection [see below for how to
workaround this].
.IP "\(bu" 4
The \fI\-os pool\fR option must specify a directory pool, not anything
more exotic such as iSCSI [but see below].
.IP "\(bu" 4
You can only upload to a \s-1KVM\s0 hypervisor.
.SS "Workaround for output to a remote libvirt instance and/or a non-directory storage pool"
.IX Subsection "Workaround for output to a remote libvirt instance and/or a non-directory storage pool"
.IP "1." 4
Use virt\-v2v in \fI\-o local\fR mode to convert the guest disks and
metadata into a local temporary directory:
.Sp
.Vb 1
\& virt\-v2v [...] \-o local \-os /var/tmp
.Ve
.Sp
This creates two (or more) files in \fI/var/tmp\fR called:
.Sp
.Vb 2
\& /var/tmp/NAME.xml # the libvirt XML (metadata)
\& /var/tmp/NAME\-sda # the guest’s first disk
.Ve
.Sp
(for \f(CW\*(C`NAME\*(C'\fR substitute the guest’s name).
.IP "2." 4
Upload the converted disk(s) into the storage pool called \f(CW\*(C`POOL\*(C'\fR:
.Sp
.Vb 3
\& size=$(stat \-c%s /var/tmp/NAME\-sda)
\& virsh vol\-create\-as POOL NAME\-sda $size \-\-format raw
\& virsh vol\-upload \-\-pool POOL NAME\-sda /var/tmp/NAME\-sda
.Ve
.IP "3." 4
Edit \fI/var/tmp/NAME.xml\fR to change \fI/var/tmp/NAME\-sda\fR to the pool
name. In other words, locate the following bit of \s-1XML:\s0
.Sp
.Vb 5
\&
\&
\&
\&
\&
.Ve
.Sp
and change two things: The \f(CW\*(C`type=\*(Aqfile\*(Aq\*(C'\fR attribute must be changed to
\&\f(CW\*(C`type=\*(Aqvolume\*(Aq\*(C'\fR, and the \f(CW\*(C`