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