]> git.pld-linux.org Git - projects/geninitrd.git/blame - mod-dmraid.sh
- modularize dmraid
[projects/geninitrd.git] / mod-dmraid.sh
CommitLineData
36523626
ER
1#!/bin/sh
2#
3# geninitrd mod: dmraid
4
5# if we should init dmraid at boot
6have_dmraid=no
7
8if [ -x /sbin/dmraid-initrd ]; then
9 USE_DMRAID=yes
10else
11 USE_DMRAID=no
12fi
13
14# return true if dmraid is set on $devpath
15# @param string $devpath device node to be examined
16# @access public
17is_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
34find_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
61initrd_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}
This page took 0.064376 seconds and 4 git commands to generate.