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