content rootdir,images
__EOD__
+my $storage_cfg_local = <<__EOD__;
+dir: local
+ path /var/lib/vz
+ content iso,vztmpl,backup,rootdir,images
+__EOD__
sub file_read_firstline {
my ($filename) = @_;
sub get_partition_dev {
my ($dev, $partnum) = @_;
- if ($dev =~ m|^/dev/[hxsev]d[a-z]$|) {
+ if ($dev =~ m|^/dev/sd([a-h]?[a-z]\|i[a-v])$|) {
+ return "${dev}$partnum";
+ } elsif ($dev =~ m|^/dev/[hxev]d[a-z]$|) {
return "${dev}$partnum";
} elsif ($dev =~ m|^/dev/[^/]+/c\d+d\d+$|) {
return "${dev}p$partnum";
my $rootdev = "/dev/$vgname/root";
my $datadev = "/dev/$vgname/data";
- my $swapfile = "/dev/$vgname/swap";
+ my $swapfile;
# we use --metadatasize 250k, which results in "pe_start = 512"
# so pe_start is aligned on a 128k boundary (advantage for SSDs)
my $rest = $os_size - $swap_size - $rootsize; # in KB
my $minfree;
- if ($config_options->{minfree}) {
+ if (defined($config_options->{minfree})) {
$minfree = (($config_options->{minfree}*1024*1024) >= $rest ) ? $space :
$config_options->{minfree}*1024*1024 ;
} else {
$rest = $rest - $minfree;
- if ($config_options->{maxvz}) {
+ if (defined($config_options->{maxvz})) {
$rest = (($config_options->{maxvz}*1024*1024) <= $rest) ?
$config_options->{maxvz}*1024*1024 : $rest;
}
$datasize = $rest;
} else {
- my $minfree = $config_options->{minfree} ? $config_options->{minfree}*1024*1024 : $space;
+ my $minfree = defined($config_options->{minfree}) ? $config_options->{minfree}*1024*1024 : $space;
$rootsize = $os_size - $minfree - $swap_size; # in KB
}
- syscmd ("/sbin/lvcreate -L${swap_size}K -nswap $vgname") == 0 ||
- die "unable to create swap volume\n";
+ if ($swap_size) {
+ syscmd ("/sbin/lvcreate -L${swap_size}K -nswap $vgname") == 0 ||
+ die "unable to create swap volume\n";
+
+ $swapfile = "/dev/$vgname/swap";
+ }
syscmd ("/sbin/lvcreate -L${rootsize}K -nroot $vgname") == 0 ||
die "unable to create root volume\n";
- if ($datasize) {
+ if ($datasize > 4*1024*1024) {
+ my $metadatasize = $datasize/100; # default 1% of data
+ $metadatasize = 1024*1024 if $metadatasize < 1024*1024; # but at least 1G
+ $metadatasize = 16*1024*1024 if $metadatasize > 16*1024*1024; # but at most 16G
+
+ # otherwise the metadata is taken out of $minfree
+ $datasize -= 2*$metadatasize;
+
+ # 1 4MB PE to allow for rounding
+ $datasize -= 4*1024;
+
syscmd ("/sbin/lvcreate -L${datasize}K -ndata $vgname") == 0 ||
die "unable to create data volume\n";
- syscmd ("/sbin/lvconvert --yes --type thin-pool $vgname/data") == 0 ||
+ syscmd ("/sbin/lvconvert --yes --type thin-pool --poolmetadatasize ${metadatasize}K $vgname/data") == 0 ||
die "unable to create data thin-pool\n";
} else {
$datadev = undef;
my $hdgb = int($hdsize/(1024*1024));
my $swapsize;
- if ($config_options->{swapsize}) {
+ if (defined($config_options->{swapsize})) {
$swapsize = $config_options->{swapsize}*1024*1024;
} else {
my $ss = int ($total_memory / 1024);
my $swapfile;
my $rootdev;
+ my $datadev;
my $use_zfs = 0;
my $use_btrfs = 0;
zfs_create_rpool($vdev);
my $swap_size = compute_swapsize($disksize);
- $swapfile = zfs_create_swap($swap_size);
+ $swapfile = zfs_create_swap($swap_size) if $swap_size;
} else {
osdev => $osdev, by_id => $by_id };
my $swap_size = compute_swapsize($os_size);
- ($rootdev, $swapfile) =
+ ($rootdev, $swapfile, $datadev) =
create_lvm_volumes($osdev, $os_size, $swap_size);
# trigger udev to create /dev/disk/by-uuid
"$tmpdir/user.cfg");
# write storage.cfg
- my $strorage_cfg_fn = "$tmpdir/storage.cfg";
+ my $storage_cfg_fn = "$tmpdir/storage.cfg";
if ($use_zfs) {
- write_config ($storage_cfg_zfs, $strorage_cfg_fn);
+ write_config ($storage_cfg_zfs, $storage_cfg_fn);
} elsif ($use_btrfs) {
- write_config ($storage_cfg_btrfs, $strorage_cfg_fn);
+ write_config ($storage_cfg_btrfs, $storage_cfg_fn);
+ } elsif ($datadev) {
+ write_config ($storage_cfg_lvmthin, $storage_cfg_fn);
} else {
- write_config ($storage_cfg_lvmthin, $strorage_cfg_fn);
+ write_config ($storage_cfg_local, $storage_cfg_fn);
}
run_command("chroot $targetdir /usr/bin/create_pmxcfs_db /tmp/pve /var/lib/pve-cluster/config.db");
my $entry_swapsize = Gtk3::Entry->new();
$entry_swapsize->set_tooltip_text("maximum SWAP size (GB)");
$entry_swapsize->signal_connect (key_press_event => \&check_float);
- $entry_swapsize->set_text($config_options->{swapsize}) if $config_options->{swapsize};
+ $entry_swapsize->set_text($config_options->{swapsize}) if defined($config_options->{swapsize});
push @$hdsize_labeled_widgets, "swapsize", $entry_swapsize;
my $entry_maxroot = Gtk3::Entry->new();
my $entry_minfree = Gtk3::Entry->new();
$entry_minfree->set_tooltip_text("minimum free LVM space (GB, required for LVM snapshots)");
$entry_minfree->signal_connect (key_press_event => \&check_float);
- $entry_minfree->set_text($config_options->{minfree}) if $config_options->{minfree};
+ $entry_minfree->set_text($config_options->{minfree}) if defined($config_options->{minfree});
push @$hdsize_labeled_widgets, "minfree", $entry_minfree;
my $entry_maxvz;
$entry_maxvz = Gtk3::Entry->new();
$entry_maxvz->set_tooltip_text("maximum size (GB) for LVM data volume");
$entry_maxvz->signal_connect (key_press_event => \&check_float);
- $entry_maxvz->set_text($config_options->{maxvz}) if $config_options->{maxvz};
+ $entry_maxvz->set_text($config_options->{maxvz}) if defined($config_options->{maxvz});
push @$hdsize_labeled_widgets, "maxvz", $entry_maxvz;
}