]> git.pld-linux.org Git - projects/geninitrd.git/blame - 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
CommitLineData
36523626 1#!/bin/sh
36523626 2# geninitrd mod: dmraid
6e49b0b1 3USE_DMRAID=${USE_DMRAID:-yes}
36523626
ER
4
5# if we should init dmraid at boot
6have_dmraid=no
7
c124d0cf
ER
8# setup geninitrd module
9# @access public
10setup_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
24is_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
41find_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
68initrd_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}
This page took 0.063996 seconds and 4 git commands to generate.