[pve-devel] applied: [PATCH v3 container] fix #1607: implement pct fstrim

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Mar 28 14:11:36 CET 2019


On 3/28/19 2:01 PM, Oguz Bektas wrote:
> runs fstrim on the rootfs and all mountpoints of a given container. this
> works for both running and stopped containers.

applied, but enhanced the commit message with reasons about why things are
done how they're done, please try to do this yourself in the future, thanks!

> 
> Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
> ---
> 
> v3:
> * nit from wolfgang
> 
> v2:
> * update description
> * don't lock config but instead make an 'fstrim' lock to avoid
> containers being stopped during io operation
> 
>  src/PVE/CLI/pct.pm | 40 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/src/PVE/CLI/pct.pm b/src/PVE/CLI/pct.pm
> index 794bc45..ab7af33 100755
> --- a/src/PVE/CLI/pct.pm
> +++ b/src/PVE/CLI/pct.pm
> @@ -755,6 +755,44 @@ __PACKAGE__->register_method ({
>  	return undef;
>      }});
>  
> +__PACKAGE__->register_method ({
> +    name => 'fstrim',
> +    path => 'fstrim',
> +    method => 'POST',
> +    description => "Run fstrim on a chosen CT and its mountpoints.",
> +    parameters => {
> +	additionalProperties => 0,
> +	properties => {
> +	    vmid => get_standard_option('pve-vmid', { completion => \&PVE::LXC::complete_ctid }),
> +	},
> +    },
> +    returns => { type => 'null' },
> +    code => sub {
> +
> +	my ($param) = @_;
> +	my $vmid = $param->{'vmid'};
> +
> +	my $rootdir = "/var/lib/lxc/$vmid/rootfs";
> +
> +	my $storecfg = PVE::Storage::config();
> +	my $conf = PVE::LXC::Config->set_lock($vmid, 'fstrim');
> +	PVE::LXC::mount_all($vmid, $storecfg, $conf);
> +	eval {
> +	    my $path = "";
> +	    PVE::LXC::Config->foreach_mountpoint($conf, sub {
> +		my ($name, $mp) = @_;
> +		$path = $mp->{mp};
> +		my $cmd = ["fstrim", "-v", "$rootdir$path"];
> +		PVE::Tools::run_command($cmd);
> +	    });
> +	};
> +
> +	PVE::LXC::umount_all($vmid, $storecfg, $conf, 0);
> +	PVE::LXC::Config->remove_lock($vmid, 'fstrim');
> +
> +	return undef;
> +    }});
> +
>  our $cmddef = {
>      list=> [ 'PVE::API2::LXC', 'vmlist', [], { node => $nodename }, sub {
>  	my $res = shift;
> @@ -841,6 +879,8 @@ our $cmddef = {
>  
>      cpusets => [ __PACKAGE__, 'cpusets', []],
>  
> +    fstrim => [ __PACKAGE__, 'fstrim', ['vmid']],
> +
>  };
>  
>  
> 




More information about the pve-devel mailing list