[Pkg-libvirt-commits] [libguestfs] 01/40: resize: Support for expanding XFS filesystems.
Hilko Bengen
bengen at moszumanska.debian.org
Fri Oct 3 14:44:41 UTC 2014
This is an automated email from the git hooks/post-receive script.
bengen pushed a commit to annotated tag debian/1%1.27.44-1
in repository libguestfs.
commit 163eb3b7a1921fe675f5a85d5dc28692d5e03bda
Author: Richard W.M. Jones <rjones at redhat.com>
Date: Tue Sep 9 17:04:47 2014 +0100
resize: Support for expanding XFS filesystems.
---
resize/resize.ml | 31 ++++++++++++++++++++-----------
resize/virt-resize.pod | 11 ++++++++---
2 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/resize/resize.ml b/resize/resize.ml
index b877106..78ec81e 100644
--- a/resize/resize.ml
+++ b/resize/resize.ml
@@ -121,13 +121,14 @@ let debug_logvol lv =
eprintf "\tcontent: %s\n" (string_of_partition_content lv.lv_type)
type expand_content_method =
- | PVResize | Resize2fs | NTFSResize | BtrfsFilesystemResize
+ | PVResize | Resize2fs | NTFSResize | BtrfsFilesystemResize | XFSGrowFS
let string_of_expand_content_method = function
| PVResize -> s_"pvresize"
| Resize2fs -> s_"resize2fs"
| NTFSResize -> s_"ntfsresize"
| BtrfsFilesystemResize -> s_"btrfs-filesystem-resize"
+ | XFSGrowFS -> s_"xfs_growfs"
(* Main program. *)
let main () =
@@ -287,6 +288,8 @@ read the man page virt-resize(1).
printf "ntfs\n";
if g#feature_available [| "btrfs" |] then
printf "btrfs\n";
+ if g#feature_available [| "xfs" |] then
+ printf "xfs\n";
exit 0
);
@@ -316,9 +319,10 @@ read the man page virt-resize(1).
lv_expands, machine_readable, ntfsresize_force, output_format,
quiet, resizes, resizes_force, shrink, sparse, trace, verbose in
- (* Default to true, since NTFS and btrfs support are usually available. *)
+ (* Default to true, since NTFS/btrfs/XFS support are usually available. *)
let ntfs_available = ref true in
let btrfs_available = ref true in
+ let xfs_available = ref true in
(* Add in and out disks to the handle and launch. *)
let connect_both_disks () =
@@ -343,6 +347,7 @@ read the man page virt-resize(1).
(* Update features available in the daemon. *)
ntfs_available := g#feature_available [|"ntfsprogs"; "ntfs3g"|];
btrfs_available := g#feature_available [|"btrfs"|];
+ xfs_available := g#feature_available [|"xfs"|];
g
in
@@ -552,6 +557,7 @@ read the man page virt-resize(1).
| ContentFS (("ext2"|"ext3"|"ext4"), _) -> true
| ContentFS (("ntfs"), _) when !ntfs_available -> true
| ContentFS (("btrfs"), _) when !btrfs_available -> true
+ | ContentFS (("xfs"), _) when !xfs_available -> true
| ContentFS (_, _) -> false
| ContentExtendedPartition -> false
else
@@ -565,6 +571,7 @@ read the man page virt-resize(1).
| ContentFS (("ext2"|"ext3"|"ext4"), _) -> Resize2fs
| ContentFS (("ntfs"), _) when !ntfs_available -> NTFSResize
| ContentFS (("btrfs"), _) when !btrfs_available -> BtrfsFilesystemResize
+ | ContentFS (("xfs"), _) when !xfs_available -> XFSGrowFS
| ContentFS (_, _) -> assert false
| ContentExtendedPartition -> assert false
else
@@ -1226,18 +1233,20 @@ read the man page virt-resize(1).
if to_be_expanded then (
(* Helper function to expand partition or LV content. *)
- let do_expand_content target = function
+ let do_expand_content target =
+ let with_mounted dev (resize : string -> unit) =
+ (* Btrfs and XFS need to mount the filesystem to resize it. *)
+ assert (Array.length (g#mounts ()) = 0);
+ g#mount dev "/";
+ resize "/";
+ g#umount "/"
+ in
+ function
| PVResize -> g#pvresize target
| Resize2fs -> g#resize2fs target
| NTFSResize -> g#ntfsresize ~force:ntfsresize_force target
- | BtrfsFilesystemResize ->
- (* Complicated ... Btrfs forces us to mount the filesystem
- * in order to resize it.
- *)
- assert (Array.length (g#mounts ()) = 0);
- g#mount target "/";
- g#btrfs_filesystem_resize "/";
- g#umount "/"
+ | BtrfsFilesystemResize -> with_mounted target g#btrfs_filesystem_resize
+ | XFSGrowFS -> with_mounted target g#xfs_growfs
in
(* Expand partition content as required. *)
diff --git a/resize/virt-resize.pod b/resize/virt-resize.pod
index aa5f07d..ebbbc40 100644
--- a/resize/virt-resize.pod
+++ b/resize/virt-resize.pod
@@ -155,9 +155,9 @@ to fill the rest of the available space:
If the expanded partition in the image contains a filesystem or LVM
PV, then if virt-resize knows how, it will resize the contents, the
equivalent of calling a command such as L<pvresize(8)>,
-L<resize2fs(8)>, L<ntfsresize(8)> or L<btrfs(8)>. However virt-resize
-does not know how to resize some filesystems, so you would have to
-online resize them after booting the guest.
+L<resize2fs(8)>, L<ntfsresize(8)>, L<btrfs(8)> or L<xfs_growfs(8)>.
+However virt-resize does not know how to resize some filesystems, so
+you would have to online resize them after booting the guest.
# virt-resize --expand /dev/sda2 nbd://example.com outdisk
@@ -391,6 +391,10 @@ could also resize LVs as desired after boot.
Btrfs filesystems, if libguestfs was compiled with support for btrfs.
+=item *
+
+XFS filesystems, if libguestfs was compiled with support for XFS.
+
=back
Note that you cannot use I<--expand> and I<--shrink> together.
@@ -760,6 +764,7 @@ L<lvresize(8)>,
L<resize2fs(8)>,
L<ntfsresize(8)>,
L<btrfs(8)>,
+L<xfs_growfs(8)>,
L<virsh(1)>,
L<parted(8)>,
L<truncate(1)>,
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git
More information about the Pkg-libvirt-commits
mailing list