]>
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 | ||
684d5d2a ER |
8 | dmraid=$(find_tool $initrd_dir/dmraid /sbin/dmraid-initrd) |
9 | if [ -x /sbin/dmraid -a -x "$dmraid" ]; then | |
36523626 ER |
10 | USE_DMRAID=yes |
11 | else | |
12 | USE_DMRAID=no | |
13 | fi | |
14 | ||
fb0e4a4c ER |
15 | if [ "$kernel_version" -lt "002006" ]; then |
16 | USE_DMRAID=no | |
17 | fi | |
18 | ||
36523626 ER |
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 | ||
b02a6b13 | 59 | find_module "dm-mirror" |
36523626 ER |
60 | have_dmraid=yes |
61 | return 0 | |
62 | } | |
63 | ||
64 | # generate initrd fragment for dmraid | |
65 | # @access public | |
66 | initrd_gen_dmraid() { | |
36523626 | 67 | inst_d /sbin |
684d5d2a | 68 | inst_exec $dmraid /sbin/dmraid |
36523626 ER |
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 | } |