* the filesystem specific command will be called automatically by fsck (at the moment ext4) * the -y flag ensures that the filesystem can be fixed automcatically in a non-interactive session * the -f flag forces a filesystem check even if the fs seems clean --- src/PVE/CLI/pct.pm | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
diff --git a/src/PVE/CLI/pct.pm b/src/PVE/CLI/pct.pm index 8c56f89..a992346 100755 --- a/src/PVE/CLI/pct.pm +++ b/src/PVE/CLI/pct.pm @@ -124,6 +124,47 @@ __PACKAGE__->register_method ({ exec('lxc-attach', '-n', $param->{vmid}, '--', @{$param->{'extra-args'}}); }}); + __PACKAGE__->register_method ({ + name => 'fsck', + path => 'fsck', + method => 'PUT', + description => "Run a filesystem check on the container root filesystem", + parameters => { + additionalProperties => 0, + properties => { + vmid => get_standard_option('pve-vmid', { completion => \&PVE::LXC::complete_ctid_stopped }), + force => { + optional => 1, + type => 'boolean', + description => "force checking, even if the filesystem seems clean", + default => 0, + }, + }, + }, + returns => { type => 'null' }, + code => sub { + my ($param) = @_; + my $vmid = $param->{vmid}; + + my $conf = PVE::LXC::load_config($vmid); + my $storage_cfg = PVE::Cluster::cfs_read_file("storage.cfg"); + + # todo: handle optional extra mount points + my $rootfs = PVE::LXC::parse_ct_mountpoint($conf->{rootfs}); + my $path = PVE::Storage::path($storage_cfg, $rootfs->{volume}, undef); + + my $command = ['fsck', $path , '-y']; + push(@$command, '-f') if $param->{force}; + + my $do_fsck = sub { + PVE::LXC::check_running($vmid) && die "Cannot run command on active container\n"; + PVE::Tools::run_command($command); + }; + + PVE::LXC::lock_container($vmid, undef, $do_fsck); + return undef; + }}); + our $cmddef = { list=> [ 'PVE::API2::LXC', 'vmlist', [], { node => $nodename }, sub { my $res = shift; @@ -165,6 +206,7 @@ our $cmddef = { enter => [ __PACKAGE__, 'enter', ['vmid']], unlock => [ __PACKAGE__, 'unlock', ['vmid']], exec => [ __PACKAGE__, 'exec', ['vmid', 'extra-args']], + fsck => [ __PACKAGE__, 'fsck', ['vmid']], destroy => [ 'PVE::API2::LXC', 'destroy_vm', ['vmid'], { node => $nodename }, $upid_exit ], -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel