Commit 500d6719 authored by Leigh Stoller's avatar Leigh Stoller

Add "striping" support, to strip LVMs across physical volumes.

Do not remove iscsi startup files in the guest on XEN44.
parent e2c09d94
......@@ -31,6 +31,7 @@ use Exporter;
existsBridge findBridge findBridgeIfaces
downloadImage getKernelVersion createExtraFS
forwardPort removePortForward lvSize DoIPtables restartDHCP
computeStripeSize
);
use Data::Dumper;
......@@ -318,6 +319,30 @@ isdisk:
return %retval;
}
#
# Attempt to compute a stripe size, based on physical number of
# devices in the volume group.
#
sub computeStripeSize($)
{
my ($vgname) = @_;
my $command = "vgdisplay -v $vgname 2>/dev/null | ".
"awk '/PV Name/ {print \$3}'";
my %devices = ();
my $count = 1;
if (open(PFD, "$command |")) {
while (my $line = <PFD>) {
if ($line =~ /\/dev\/(\w{2,3})/) {
$devices{$1} = $1;
}
}
close(PFD);
$count = scalar(keys(%devices));
}
return $count;
}
my %if2mac = ();
my %mac2if = ();
my %ip2if = ();
......
......@@ -222,6 +222,9 @@ my $RTTABLES = "/etc/iproute2/rt_tables";
# Temporary; later kernel version increases this.
my $MAXROUTETTABLE = 255;
# Striping
my $STRIPE_COUNT = 1;
# Whether or not to use only unpartitioned (unused) disks to form the Xen VG.
my $LVM_FULLDISKONLY = 0;
......@@ -310,16 +313,10 @@ sub init($)
}
getXenInfo();
#
# The 4.4 image has to use the openvswitch package instead of building
# from source since the current release does not support the kernel.
# And the package is installed in a different place.
#
if ($xeninfo{xen_minor} >= 4) {
$OVSCTL = "/usr/bin/ovs-vsctl";
$OVSSTART = "/usr/share/openvswitch/scripts/ovs-ctl";
# Compute the strip size for new lvms.
if (-e "/var/run/xen.ready") {
$STRIPE_COUNT = computeStripeSize($VGNAME);
}
return 0;
}
......@@ -470,9 +467,9 @@ sub rootPreConfig($)
}
#
# Make sure pieces are at least a GiB.
# Make sure pieces are at least a 5GiB.
#
my %devs = libvnode::findSpareDisks(1 * 1024);
my %devs = libvnode::findSpareDisks(5 * 1024);
#
# Turn on write caching. Hacky.
......@@ -580,7 +577,8 @@ sub rootPreConfig($)
" $MAX_VNODES VMs ($size < $XEN_MIN_VGSIZE)\n";
}
}
$STRIPE_COUNT = computeStripeSize($VGNAME);
#
# Make sure our volumes are active -- they seem to become inactive
# across reboots
......@@ -1484,8 +1482,10 @@ sub vnodePreConfig($$$$$){
# Testing a theory; remove all this iscsi stuff to see if that
# is causing problems with the control network interface going
# offline after boot.
mysystem2("/bin/rm -vf $vnoderoot/etc/init/*iscsi*");
mysystem2("/bin/rm -vf $vnoderoot/etc/init.d/*iscsi*");
if ($xeninfo{xen_minor} < 4) {
mysystem2("/bin/rm -vf $vnoderoot/etc/init/*iscsi*");
mysystem2("/bin/rm -vf $vnoderoot/etc/init.d/*iscsi*");
}
}
else {
#
......@@ -2467,7 +2467,8 @@ sub CreatePrimaryDisk($$$$)
$lv_size += $extrafs * (1024 * 1024);
}
}
if (mysystem2("lvcreate -L ${lv_size}k -n $target $VGNAME")) {
if (mysystem2("lvcreate -i${STRIPE_COUNT} ".
" -L ${lv_size}k -n $target $VGNAME")) {
print STDERR "libvnode_xen: could not create disk for $target\n";
return -1;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment