]>
Commit | Line | Data |
---|---|---|
36523626 | 1 | #!/bin/sh |
36523626 | 2 | # geninitrd mod: dmraid |
6e49b0b1 | 3 | USE_DMRAID=${USE_DMRAID:-yes} |
36523626 ER |
4 | |
5 | # if we should init dmraid at boot | |
6 | have_dmraid=no | |
7 | ||
c124d0cf ER |
8 | # setup geninitrd module |
9 | # @access public | |
10 | setup_mod_dmraid() { | |
11 | dmraid=$(find_tool $initrd_dir/dmraid /sbin/dmraid-initrd) | |
6e49b0b1 | 12 | if [ ! -x /sbin/dmraid ] || [ ! -x "$dmraid" ]; then |
c124d0cf ER |
13 | USE_DMRAID=no |
14 | fi | |
36523626 | 15 | |
c124d0cf ER |
16 | if [ "$kernel_version" -lt "002006" ]; then |
17 | USE_DMRAID=no | |
18 | fi | |
19 | } | |
fb0e4a4c | 20 | |
36523626 ER |
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 | ||
b02a6b13 | 61 | find_module "dm-mirror" |
36523626 ER |
62 | have_dmraid=yes |
63 | return 0 | |
64 | } | |
65 | ||
66 | # generate initrd fragment for dmraid | |
67 | # @access public | |
68 | initrd_gen_dmraid() { | |
1b481849 ER |
69 | if ! is_yes "$have_dmraid"; then |
70 | return | |
71 | fi | |
72 | ||
36523626 | 73 | inst_d /sbin |
684d5d2a | 74 | inst_exec $dmraid /sbin/dmraid |
36523626 ER |
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 | } |