ZFS: use -p flag and remove zfs_parse_size

ZFS supports the -p flag in the list command since a few years now.
Let us use the real byte values and avoid the error prone calculation
from human readable numbers that can lead to incorrect numbers if the
reported human readable value is a rounded number.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
This commit is contained in:
Aaron Lauterer
2020-04-07 14:25:36 +02:00
committed by Fabian Grünbichler
parent d99de0f898
commit 3881e68025
2 changed files with 5 additions and 41 deletions

View File

@ -1210,7 +1210,7 @@ sub scan_cifs {
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 {
@ -1218,8 +1218,8 @@ sub scan_zfs {
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+-[^/]+$!;

View File

@ -54,42 +54,6 @@ sub options {
# 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) = @_;
@ -117,11 +81,11 @@ sub zfs_parse_zvol_list {
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 !~ /^-$/) {