sub scan_zfs {
- my $cmd = ['zfs', 'list', '-t', 'filesystem', '-H', '-o', 'name,avail,used'];
+ my $cmd = ['zfs', 'list', '-t', 'filesystem', '-Hp', '-o', 'name,avail,used'];
my $res = [];
run_command($cmd, outfunc => sub {
if ($line =~m/^(\S+)\s+(\S+)\s+(\S+)$/) {
my ($pool, $size_str, $used_str) = ($1, $2, $3);
- my $size = PVE::Storage::ZFSPoolPlugin::zfs_parse_size($size_str);
- my $used = PVE::Storage::ZFSPoolPlugin::zfs_parse_size($used_str);
+ my $size = $size_str + 0;
+ my $used = $used_str + 0;
# ignore subvolumes generated by our ZFSPoolPlugin
return if $pool =~ m!/subvol-\d+-[^/]+$!;
return if $pool =~ m!/basevol-\d+-[^/]+$!;
# static zfs helper methods
-sub zfs_parse_size {
- my ($text) = @_;
-
- return 0 if !$text;
-
- if ($text =~ m/^(\d+(\.\d+)?)([TGMK])?$/) {
-
- my ($size, $reminder, $unit) = ($1, $2, $3);
-
- if ($unit) {
- if ($unit eq 'K') {
- $size *= 1024;
- } elsif ($unit eq 'M') {
- $size *= 1024*1024;
- } elsif ($unit eq 'G') {
- $size *= 1024*1024*1024;
- } elsif ($unit eq 'T') {
- $size *= 1024*1024*1024*1024;
- } else {
- die "got unknown zfs size unit '$unit'\n";
- }
- }
-
- if ($reminder) {
- $size = ceil($size);
- }
-
- return $size + 0;
-
- }
-
- warn "unable to parse zfs size '$text'\n";
-
- return 0;
-}
-
sub zfs_parse_zvol_list {
my ($text) = @_;
if ($refquota eq 'none') {
$zvol->{size} = 0;
} else {
- $zvol->{size} = zfs_parse_size($refquota);
+ $zvol->{size} = $refquota + 0;
}
$zvol->{format} = 'subvol';
} else {
- $zvol->{size} = zfs_parse_size($size);
+ $zvol->{size} = $size + 0;
$zvol->{format} = 'raw';
}
if ($origin !~ /^-$/) {