]>
Commit | Line | Data |
---|---|---|
36523626 ER |
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 | findmodule "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 | } |