nodes => { optional => 1 },
disable => { optional => 1 },
content => { optional => 1 },
+ bwlimit => { optional => 1 },
};
}
if ($fmt eq 'raw') {
- die "illegal name '$volname' - sould be 'vm-$vmid-*'\n"
+ die "illegal name '$volname' - should be 'vm-$vmid-*'\n"
if $volname && $volname !~ m/^vm-$vmid-/;
$volname = $class->zfs_find_free_diskname($storeid, $scfg, $vmid, $fmt)
if !$volname;
$class->zfs_create_zvol($scfg, $volname, $size);
my $devname = "/dev/zvol/$scfg->{pool}/$volname";
- run_command("udevadm trigger --subsystem-match block");
- system('udevadm', 'settle', '--timeout', '10', "--exit-if-exists=${devname}");
+ my $timeout = PVE::RPCEnvironment->is_worker() ? 60*5 : 10;
+ for (my $i = 1; $i <= $timeout; $i++) {
+ last if -b $devname;
+ die "Timeout: no zvol after $timeout sec found.\n"
+ if $i == $timeout;
+ sleep(1);
+ }
} elsif ( $fmt eq 'subvol') {
- die "illegal name '$volname' - sould be 'subvol-$vmid-*'\n"
+ die "illegal name '$volname' - should be 'subvol-$vmid-*'\n"
if $volname && $volname !~ m/^subvol-$vmid-/;
$volname = $class->zfs_find_free_diskname($storeid, $scfg, $vmid, $fmt)
if !$volname;
- die "illegal name '$volname' - sould be 'subvol-$vmid-*'\n"
+ die "illegal name '$volname' - should be 'subvol-$vmid-*'\n"
if $volname !~ m/^subvol-$vmid-/;
$class->zfs_create_subvol($scfg, $volname, $size);
return $new_size;
}
+sub storage_can_replicate {
+ my ($class, $scfg, $storeid, $format) = @_;
+
+ return 1 if $format eq 'raw' || $format eq 'subvol';
+
+ return 0;
+}
+
sub volume_has_feature {
my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_;
die "$class storage can only export snapshots\n"
if !defined($snapshot);
+ my $dataset = ($class->parse_volname($volname))[1];
+
my $fd = fileno($fh);
die "internal error: invalid file handle for volume_export\n"
if !defined($fd);
my $arg = $with_snapshots ? '-I' : '-i';
push @$cmd, $arg, $base_snapshot;
}
- push @$cmd, '--', "$scfg->{pool}/$volname\@$snapshot";
+ push @$cmd, '--', "$scfg->{pool}/$dataset\@$snapshot";
run_command($cmd, output => $fd);
die "internal error: invalid file handle for volume_import\n"
if !defined($fd);
- my $zfspath = "$scfg->{pool}/$volname";
+ my $dataset = ($class->parse_volname($volname))[1];
+ my $zfspath = "$scfg->{pool}/$dataset";
my $suffix = defined($base_snapshot) ? "\@$base_snapshot" : '';
my $exists = 0 == run_command(['zfs', 'get', '-H', 'name', $zfspath.$suffix],
noerr => 1, errfunc => sub {});