ppcrcd/trunk/conf.dir/usr/lib/ppcrcd: find_md hw-detect

sparky cvs at pld-linux.org
Sat Mar 4 15:54:34 CET 2006


Author: sparky
Date: Sat Mar  4 15:54:29 2006
New Revision: 7084

Added:
   ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/find_md   (contents, props changed)
Modified:
   ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/hw-detect
Log:
- added md-detection script, not tested


Added: ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/find_md
==============================================================================
--- (empty file)
+++ ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/find_md	Sat Mar  4 15:54:29 2006
@@ -0,0 +1,72 @@
+#!/usr/bin/perl
+#
+# script to find and prepare md devices
+#	(c) 2006 sparky at pld-linux.org
+use strict;
+use warnings;
+
+my $verbose = shift @ARGV || 0;
+( my $prog = $0 ) =~ s#.*/##;
+
+sub verbose {
+	my $verb = shift;
+	return if $verb > $verbose;
+	my $msg = shift;
+
+	warn "$prog: $msg\n";
+}
+
+verbose(1, "Detecting md devices");
+my %by_uuid;
+my $found = 0;
+
+opendir D_IN, "/dev";
+while (my $f = readdir D_IN ) {
+	next unless $f =~ /^[sh]d[a-z][0-9]*$/;
+	my @out = `mdadm -E /dev/$f 2>&1`;
+	if ( $? != 0 ) {
+		print "$f\n" if $f =~ /^[sh]d[a-z][0-9]+$/;
+		next;
+	}
+	
+	my ($uuid) = grep /UUID/, @out;
+	chomp $uuid;
+	$uuid =~ s/\s*UUID\s*:\s*//;
+	unless ( length $uuid ) {
+		print "$f\n" if $f =~ /^[sh]d[a-z][0-9]+$/;
+		next;
+	}
+	verbose(4, "   +-Found /dev/$f ($uuid)");
+	push @{$by_uuid{$uuid}}, $f;
+	$found++;
+}
+closedir D_IN;
+
+unless ( $found ) {
+	verbose(4, "   No devices found");
+	exit;
+}
+my $cnt = 0;
+
+open MD_OUT, ">> /etc/mdadm.conf";
+open FS_OUT, ">> /etc/fstab";
+open MO_OUT, "> /etc/modprobe.d/md.conf";
+printf MD_OUT "\n# automatically generated\n";
+foreach my $uuid ( sort keys %by_uuid ) {
+	# dirname: ex: md0_hda2hdc2
+	my $dirname = "md${cnt}_" . join '', sort @{$by_uuid{$uuid}};
+	verbose(2, "  Preparing /dev/$dirname");
+	
+	printf MD_OUT "DEVICE ", join " /dev/", ('', @{$by_uuid{$uuid}});
+	printf MD_OUT "\nARRAY /dev/md$cnt uuid=$uuid\n";
+	
+	printf FS_OUT "/dev/md$cnt /mnt/$dirname auto defaults 0 0\n";
+	mkdir "/mnt/$dirname";
+	
+	printf MO_OUT "install block-major-9-$cnt /sbin/mdadm --assemble --scan /dev/md$cnt\n";
+	system("mknod /dev/md$cnt b 9 $cnt");
+	$cnt++;
+}
+close MD_OUT;
+close FS_OUT;
+close MO_OUT;

Modified: ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/hw-detect
==============================================================================
--- ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/hw-detect	(original)
+++ ppcrcd/trunk/conf.dir/usr/lib/ppcrcd/hw-detect	Sat Mar  4 15:54:29 2006
@@ -67,7 +67,11 @@
 mac-fdisk -l 2>/dev/null | egrep "^/dev/[a-z]+[0-9]+" > /tmp/parts.mac
 fdisk -l 2>/dev/null | egrep "^/dev/[a-z]+[0-9]+" > /tmp/parts.pc
 
-for dev in /dev/hd??* /dev/sd??*; do
+PARTS=$(echo /dev/hd??* /dev/sd??*)
+cmdopt nomd || \
+	PARTS=$(/usr/lib/ppcrcd/find_md $(< /verbose) | sort)
+
+for dev in $PARTS; do
 	[ -r $dev ] || continue
 	verbose 4 "    +-Checking $dev"
 	mnt="/mnt/$(basename $dev)"


More information about the pld-cvs-commit mailing list