]> git.pld-linux.org Git - projects/geninitrd.git/blob - mod-dmraid.sh
- findmodule -> find_module
[projects/geninitrd.git] / mod-dmraid.sh
1 #!/bin/sh
2 #
3 # geninitrd mod: dmraid
4
5 # if we should init dmraid at boot
6 have_dmraid=no
7
8 if [ -x /sbin/dmraid-initrd ]; then
9         USE_DMRAID=yes
10 else
11         USE_DMRAID=no
12 fi
13
14 # return true if dmraid is set on $devpath
15 # @param        string $devpath device node to be examined
16 # @access       public
17 is_dmraid() {
18         local devpath="$1"
19
20         # dmraid disabled
21         if ! is_yes "$USE_DMRAID"; then
22                 return 1
23         fi
24
25         if ! is_yes "$(echo "$devpath" | awk '/^\/dev\/mapper\/(sil|hpt37x|hpt45x|isw|lsi|nvidia|pdc|sil|via|dos)_/ { print "yes"; }')"; then
26                 return
27         fi
28 }
29
30 # find dmraid modules for $devpath
31 # @param        $devpath        device to be examined
32 # @return       false if $devpath is not on dmraid
33 # @access       public
34 find_modules_dmraid() {
35         local devpath="$1"
36
37         # get blockdev itself (without partition)
38         # /dev/mapper/sil_ahbgadcbchfc3 -> /dev/mapper/sil_ahbgadcbchfc
39         local blockdev=${devpath%%[0-9]*}
40         local raidname=${blockdev#/dev/mapper/}
41         local found=0
42
43         local dev phydevs=$(dmraid -r -cdevpath,raidname | awk -F, -vv="$raidname" '{if ($2 == v) print $1}')
44         for dev in $phydevs; do
45                 find_modules_for_devpath $dev
46                 lvm_ignore_devices="$lvm_ignore_devices $dev"
47                 found=1
48         done
49
50         if [ $found = 0 ]; then
51                 return 1
52         fi
53
54         find_module "dm-mirror"
55         have_dmraid=yes
56         return 0
57 }
58
59 # generate initrd fragment for dmraid
60 # @access       public
61 initrd_gen_dmraid() {
62         if [ ! -x /sbin/dmraid-initrd ]; then
63                 die "/sbin/dmraid-initrd is missing!"
64         fi
65
66         inst_d /sbin
67         inst_exec /sbin/dmraid-initrd /sbin/dmraid
68
69         mount_dev
70         mount_sys
71         initrd_gen_devices
72         add_linuxrc <<-EOF
73                 # 2 secs was enough for my system to initialize.
74                 # XXX: shouldn't just call 'udevadm settle' ?
75                 usleep 2000000
76                 : 'Activating Device-Mapper RAID(s)'
77                 /sbin/dmraid -ay -i
78
79                 debugshell
80         EOF
81 }
This page took 0.044973 seconds and 4 git commands to generate.