Hi, it can be done too with ceph rbd with "rbd create ... –thick-provision"
Le lundi 06 septembre 2021 à 15:15 +0200, Lorenz Stechauner a écrit : > the plugins for file based storages > * BTRFS > * CIFS > * Dir > * Glusterfs > * NFS > now allow the option 'preallocation'. > > 'preallocation' can have four values: > * default > * off > * metadata > * falloc > * full > see man pages for `qemu-img` for what these mean exactly. [0] > > the defualt value was chosen to be > * qcow2: metadata (as previously) > * raw: off (I was unable to find any documentation on this, so > could only test this and found, that 'off' was the most > fitting.) > > when using 'metadata' as preallocation mode, for raw images 'off' > is used. > > [0] > https://qemu.readthedocs.io/en/latest/system/images.html#disk-image-file-formats > > Signed-off-by: Lorenz Stechauner <l.stechau...@proxmox.com> > --- > PVE/Storage/BTRFSPlugin.pm | 1 + > PVE/Storage/CIFSPlugin.pm | 1 + > PVE/Storage/DirPlugin.pm | 1 + > PVE/Storage/GlusterfsPlugin.pm | 4 ++- > PVE/Storage/NFSPlugin.pm | 1 + > PVE/Storage/Plugin.pm | 46 > +++++++++++++++++++++++++++++++++- > 6 files changed, 52 insertions(+), 2 deletions(-) > > diff --git a/PVE/Storage/BTRFSPlugin.pm b/PVE/Storage/BTRFSPlugin.pm > index fe42082..31a2954 100644 > --- a/PVE/Storage/BTRFSPlugin.pm > +++ b/PVE/Storage/BTRFSPlugin.pm > @@ -73,6 +73,7 @@ sub options { > is_mountpoint => { optional => 1 }, > nocow => { optional => 1 }, > mkdir => { optional => 1 }, > + preallocation => { optional => 1 }, > # TODO: The new variant of mkdir with `populate` vs > `create`... > }; > } > diff --git a/PVE/Storage/CIFSPlugin.pm b/PVE/Storage/CIFSPlugin.pm > index 0221069..2d94413 100644 > --- a/PVE/Storage/CIFSPlugin.pm > +++ b/PVE/Storage/CIFSPlugin.pm > @@ -140,6 +140,7 @@ sub options { > smbversion => { optional => 1}, > mkdir => { optional => 1 }, > bwlimit => { optional => 1 }, > + preallocation => { optional => 1 }, > }; > } > > diff --git a/PVE/Storage/DirPlugin.pm b/PVE/Storage/DirPlugin.pm > index 2267f11..3eeec98 100644 > --- a/PVE/Storage/DirPlugin.pm > +++ b/PVE/Storage/DirPlugin.pm > @@ -59,6 +59,7 @@ sub options { > mkdir => { optional => 1 }, > is_mountpoint => { optional => 1 }, > bwlimit => { optional => 1 }, > + preallocation => { optional => 1 }, > }; > } > > diff --git a/PVE/Storage/GlusterfsPlugin.pm > b/PVE/Storage/GlusterfsPlugin.pm > index ea4df82..d8d2b88 100644 > --- a/PVE/Storage/GlusterfsPlugin.pm > +++ b/PVE/Storage/GlusterfsPlugin.pm > @@ -137,6 +137,7 @@ sub options { > format => { optional => 1 }, > mkdir => { optional => 1 }, > bwlimit => { optional => 1 }, > + preallocation => { optional => 1 }, > }; > } > > @@ -260,7 +261,8 @@ sub alloc_image { > > my $cmd = ['/usr/bin/qemu-img', 'create']; > > - push @$cmd, '-o', 'preallocation=metadata' if $fmt eq 'qcow2'; > + my $prealloc_opt = > PVE::Storage::Plugin::preallocation_cmd_option($scfg, $fmt); > + push @$cmd, '-o', $prealloc_opt if defined($prealloc_opt); > > push @$cmd, '-f', $fmt, $volumepath, "${size}K"; > > diff --git a/PVE/Storage/NFSPlugin.pm b/PVE/Storage/NFSPlugin.pm > index 39bf15a..21b288a 100644 > --- a/PVE/Storage/NFSPlugin.pm > +++ b/PVE/Storage/NFSPlugin.pm > @@ -90,6 +90,7 @@ sub options { > format => { optional => 1 }, > mkdir => { optional => 1 }, > bwlimit => { optional => 1 }, > + preallocation => { optional => 1 }, > }; > } > > diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm > index b1865cb..4924525 100644 > --- a/PVE/Storage/Plugin.pm > +++ b/PVE/Storage/Plugin.pm > @@ -41,6 +41,19 @@ our @SHARED_STORAGE = ( > 'pbs', > ); > > +our $QCOW2_PREALLOCATION = { > + off => 1, > + metadata => 1, > + falloc => 1, > + full => 1, > +}; > + > +our $RAW_PREALLOCATION = { > + off => 1, > + falloc => 1, > + full => 1, > +}; > + > our $MAX_VOLUMES_PER_GUEST = 1024; > > cfs_register_file ('storage.cfg', > @@ -150,6 +163,11 @@ my $defaultData = { > type => 'string', format => 'pve-storage-format', > optional => 1, > }, > + preallocation => { > + description => "Preallocation mode for raw and qcow2 > images.", > + type => 'string', enum => ['default', 'off', 'metadata', > 'falloc', 'full'], > + optional => 1, > + }, > }, > }; > > @@ -762,7 +780,8 @@ sub alloc_image { > } else { > my $cmd = ['/usr/bin/qemu-img', 'create']; > > - push @$cmd, '-o', 'preallocation=metadata' if $fmt eq > 'qcow2'; > + my $prealloc_opt = preallocation_cmd_option($scfg, $fmt); > + push @$cmd, '-o', $prealloc_opt if defined($prealloc_opt); > > push @$cmd, '-f', $fmt, $path, "${size}K"; > > @@ -1484,4 +1503,29 @@ sub volume_import_formats { > return (); > } > > +sub preallocation_cmd_option { > + my ($scfg, $fmt) = @_; > + > + my $prealloc = $scfg->{preallocation}; > + > + $prealloc = undef if $prealloc eq 'default'; > + > + if ($fmt eq 'qcow2') { > + $prealloc = $prealloc // 'metadata'; > + > + die "preallocation mode '$prealloc' not supported by format > '$fmt'\n" if !$QCOW2_PREALLOCATION->{$prealloc}; > + > + return "preallocation=$prealloc"; > + } elsif ($fmt eq 'raw') { > + $prealloc = $prealloc // 'off'; > + $prealloc = 'off' if $prealloc eq 'metadata'; > + > + die "preallocation mode '$prealloc' not supported by format > '$fmt'\n" if !$RAW_PREALLOCATION->{$prealloc}; > + > + return "preallocation=$prealloc"; > + } > + > + return undef; > +} > + > 1; _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel