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