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

Oguz Bektas o.bektas at proxmox.com
Thu Mar 21 11:24:40 CET 2019


hi,

On Thu, Mar 21, 2019 at 06:59:42AM +0100, Thomas Lamprecht wrote:
> On 3/20/19 1:56 PM, Oguz Bektas wrote:
> > runs fstrim on the rootfs and all mountpoints of a given container.
> > 
> > Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
> > ---
> >  src/PVE/CLI/pct.pm | 41 +++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 41 insertions(+)
> > 
> > diff --git a/src/PVE/CLI/pct.pm b/src/PVE/CLI/pct.pm
> > index 794bc45..f89e183 100755
> > --- a/src/PVE/CLI/pct.pm
> > +++ b/src/PVE/CLI/pct.pm
> > @@ -755,6 +755,45 @@ __PACKAGE__->register_method ({
> >  	return undef;
> >      }});
> >  
> > +__PACKAGE__->register_method ({
> > +    name => 'fstrim',
> > +    path => 'fstrim',
> > +    method => 'POST',
> > +    description => "Run fstrim on a chosen CT.",
> > +    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();
> > +	PVE::LXC::Config->lock_config($vmid, sub {
>
re previous message about running cts: i've tested both on running and
stopped cts, worked as expected
 
> oh, and why lock? "lock_config" is for short running operations,
> for longer you should use it only to place a "lock" entry to the
> config, do your long operation and then remove the lock again in
> a lock_config call.
> 
> But for fstrim you do not need a lock at all, or?
the operation itself takes about a few seconds usually, i put the
lock_config there to make sure nothing funny happens while we're mounting the
container in order to run fstrim on it and then unmounting. i figured
it's fitting in this situation. what do you think?
> 
> > +	    my $conf = PVE::LXC::Config->load_config($vmid);
> > +	    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);
> > +	});
> > +
> > +	return undef;
> > +    }});
> > +
> >  our $cmddef = {
> >      list=> [ 'PVE::API2::LXC', 'vmlist', [], { node => $nodename }, sub {
> >  	my $res = shift;
> > @@ -841,6 +880,8 @@ our $cmddef = {
> >  
> >      cpusets => [ __PACKAGE__, 'cpusets', []],
> >  
> > +    fstrim => [ __PACKAGE__, 'fstrim', ['vmid']],
> > +
> >  };
> >  
> >  
> > 
> 




More information about the pve-devel mailing list