+sub scan_zfs {
+
+ my $cmd = ['zfs', 'list', '-t', 'filesystem', '-H', '-o', 'name,avail,used'];
+
+ my $res = [];
+ run_command($cmd, outfunc => sub {
+ my $line = shift;
+
+ 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);
+ # ignore subvolumes generated by our ZFSPoolPlugin
+ return if $pool =~ m!/subvol-\d+-[^/]+$!;
+ push @$res, { pool => $pool, size => $size, free => $size-$used };
+ }
+ });
+
+ return $res;
+}
+