diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2011-04-08 14:07:26 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2011-04-09 14:28:22 +0100 |
commit | ca03635a4c83afbe9b51fe846a8b3d5361462a90 (patch) | |
tree | b7faa804b620854f9b8ef982f91238221819c4bb /resize/test-virt-resize.sh | |
parent | 3a84e0784e1e3ab7b56850d0f8c9aa42f1ae3da1 (diff) | |
download | libguestfs-ca03635a4c83afbe9b51fe846a8b3d5361462a90.tar.gz libguestfs-ca03635a4c83afbe9b51fe846a8b3d5361462a90.tar.xz libguestfs-ca03635a4c83afbe9b51fe846a8b3d5361462a90.zip |
Rewrite virt-resize in OCaml.
This is a fairly straightforward translation of Perl virt-resize into
OCaml. It is bug-for-bug and feature-for-feature identical to the
Perl version, except as noted below.
The motivation is to have a more solid, high-level, statically safe
compiled language to go forwards with fixing some of the harder bugs
in virt-resize. In particular contracts between different parts of
the program are now handled by statically typed structures checked at
compile time, instead of the very ad-hoc unchecked hash tables used by
the Perl version.
OCaml and the ocaml-pcre library (Perl-Compatible Regular Expressions
bindings for OCaml) are required.
Extra features in this version:
- 32 bit hosts are now supported.
- We try hard to handle the case where the target disk is not "clean"
(ie. all zeroes). It usually works for this case, whereas the
previous version would usually fail. However it is still
recommended that the system administrator creates a fresh blank disk
for the target before running the program.
- User messages are a bit more verbose and helpful. You can turn
these off with the -q (--quiet) option.
There is one lost feature:
- Ability to specify >= T (terabytes) sizes in command line size
expressions has been removed. This probably didn't work in the Perl
version.
Other differences:
- The first partition on the target is no longer aligned; instead we
place it at the same sector as on the source. I suspect that
aligning it was causing the bootloader failures.
- Because it's easier, we do more sanity checking on the source disk.
This might lead to more failures, but they'd be failures you'd want
to know about.
- The order in which operations are performed has been changed to make
it more logical. The user should not notice any functional
difference, but debug messages will be quite a bit different.
- virt-resize is a compiled binary, not a script.
Diffstat (limited to 'resize/test-virt-resize.sh')
-rwxr-xr-x | resize/test-virt-resize.sh | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/resize/test-virt-resize.sh b/resize/test-virt-resize.sh new file mode 100755 index 00000000..2d5cce90 --- /dev/null +++ b/resize/test-virt-resize.sh @@ -0,0 +1,47 @@ +#!/bin/bash - +# libguestfs virt-resize 2.0 test script +# Copyright (C) 2010-2011 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +export LANG=C +set -e + +# Test expanding. +# +# This exercises a number of interesting codepaths including resizing +# LV content, handling GPT, and using qcow2 as a target. + +../fish/guestfish -N bootrootlv:/dev/VG/LV:ext2:ext4:400M:32M:gpt </dev/null + +qemu-img create -f qcow2 test2.img 500M +./virt-resize -d --expand /dev/sda2 --lv-expand /dev/VG/LV test1.img test2.img + +# Test shrinking in a semi-realistic scenario. Although the disk +# image created above contains no data, we will nevertheless use +# similar operations to ones that might be used by a real admin. + +../fish/guestfish -a test1.img <<EOF +run +resize2fs-size /dev/VG/LV 190M +lvresize /dev/VG/LV 190 +pvresize-size /dev/sda2 200M +fsck ext4 /dev/VG/LV +EOF + +rm -f test2.img; truncate -s 300M test2.img +./virt-resize -d --shrink /dev/sda2 test1.img test2.img + +rm -f test1.img test2.img |