diff --git a/mxraid/mxraid_assemble b/mxraid/mxraid_assemble index 03b5f40..54bb440 100755 --- a/mxraid/mxraid_assemble +++ b/mxraid/mxraid_assemble @@ -6,6 +6,8 @@ use Data::Dumper; $Data::Dumper::Sortkeys=1; use Getopt::Std; $Getopt::Std::STANDARD_HELP_VERSION=1; sub HELP_MESSAGE{} sub VERSION_MESSAGE{} +use Sys::Syslog; +use Time::HiRes qw(usleep); import MxRaid::ConfData; import MxRaid::HostData; @@ -60,6 +62,22 @@ sub exec_version { exit 0; } +sub check_enclosures { + glob('/sys/class/enclosure/*') or return; + + my $cnt_0 = () = (glob('/sys/block/sd[a-z]'), glob('/sys/block/sd[a-z][a-z]')); + usleep(0.3 * 1e6); + my $cnt_1 = () = (glob('/sys/block/sd[a-z]'), glob('/sys/block/sd[a-z][a-z]')); + + if ( $cnt_0 != $cnt_1 ) { # then something still 'evolves', shout around and take a nap. + my ($prog) = $0 =~ m|([^/]+)$|; + openlog($prog,'pid','user'); + Sys::Syslog::setlogsock('unix'); # with 'native' we get EOLs in the logfile, option "noeol" doesn't work + syslog('info', 'still discovering disks, diff is %d. Waiting 3 seconds ...', $cnt_1 - $cnt_0); + sleep 3; + } +} + my $ROOT=$<==0?1:0; my %opts; @@ -88,6 +106,7 @@ my $MDADM_CONF_BASE = '/dev/shm/mdadm.conf'; # config for mdadm, created with in my $MDADM_ASSEMBLE_OPTIONS = ''; my $cd = MxRaid::ConfData->new($MDADMCONF_DB); $cd->verbose($VERBOSE); $cd->load(); +check_enclosures(); # idle a bit if enclosures are attached ... my $hd = MxRaid::HostData->new($cd); $hd->verbose($VERBOSE); my $utils = MxRaid::Utils->new();