diff options
Diffstat (limited to 'abs/core/mdadm')
-rw-r--r-- | abs/core/mdadm/PKGBUILD | 34 | ||||
-rwxr-xr-x | abs/core/mdadm/mdadm | 37 | ||||
-rw-r--r-- | abs/core/mdadm/mdadm-2.2-segfault.patch | 12 | ||||
-rw-r--r-- | abs/core/mdadm/mdadm.conf | 64 | ||||
-rw-r--r-- | abs/core/mdadm/raid-partitions_hook | 21 | ||||
-rw-r--r-- | abs/core/mdadm/raid-partitions_install | 32 |
6 files changed, 200 insertions, 0 deletions
diff --git a/abs/core/mdadm/PKGBUILD b/abs/core/mdadm/PKGBUILD new file mode 100644 index 0000000..13c5c98 --- /dev/null +++ b/abs/core/mdadm/PKGBUILD @@ -0,0 +1,34 @@ +# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $ +# Maintainer: Judd Vinet <jvinet@zeroflux.org> +pkgname=mdadm +pkgver=2.6.4 +pkgrel=10 +pkgdesc="A tool for managing/monitoring Linux md device arrays, also known as Software RAID" +arch=(i686 x86_64) +license=('GPL') +url="http://www.cse.unsw.edu.au/~neilb/source/mdadm/" +groups=('base') +depends=('glibc') +backup=('etc/mdadm.conf') +source=(ftp://ftp.kernel.org/pub/linux/utils/raid/mdadm/mdadm-$pkgver.tar.bz2 \ + mdadm mdadm.conf raid-partitions_install raid-partitions_hook) +replaces=('raidtools') +md5sums=('b616697aecc870d5d580bd6e010472a3' + '6df172c8f77b280018cf87eb3d313f29' + '0ce4c0f9770bf582a71228053566359d' + '9de7e423ec9c6766b5f5d39915929003' + '09d72c714b40b6fa1e8eab04c1dabd42') + +build() { + cd $startdir/src/$pkgname-$pkgver + make || return 1 + make INSTALL=/bin/install DESTDIR=$startdir/pkg install + install -D -m644 ../mdadm.conf $startdir/pkg/etc/mdadm.conf + install -D -m755 ../mdadm $startdir/pkg/etc/rc.d/mdadm + install -D -m644 ../raid-partitions_install $startdir/pkg/lib/initcpio/install/raid-partitions + install -D -m644 ../raid-partitions_hook $startdir/pkg/lib/initcpio/hooks/raid-partitions + # a static binary is required for Arch's initrd + rm mdadm + make LDFLAGS+=-static || return 1 + install -D -m755 mdadm $startdir/pkg/sbin/mdadm.static +} diff --git a/abs/core/mdadm/mdadm b/abs/core/mdadm/mdadm new file mode 100755 index 0000000..e196f36 --- /dev/null +++ b/abs/core/mdadm/mdadm @@ -0,0 +1,37 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions + +PID=`pidof -o %PPID /sbin/mdadm` +case "$1" in + start) + stat_busy "Starting mdadm RAID Monitor" + if [ -z "$PID" ]; then + /sbin/mdadm --monitor --scan -i /var/run/mdadm.pid -f + fi + if [ ! -z "$PID" -o $? -gt 0 ]; then + stat_fail + else + add_daemon mdadm + stat_done + fi + ;; + stop) + stat_busy "Stopping mdadm RAID Monitor" + [ ! -z "$PID" ] && kill $PID &>/dev/null + if [ $? -gt 0 ]; then + stat_fail + else + rm_daemon mdadm + stat_done + fi + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" +esac diff --git a/abs/core/mdadm/mdadm-2.2-segfault.patch b/abs/core/mdadm/mdadm-2.2-segfault.patch new file mode 100644 index 0000000..d956a20 --- /dev/null +++ b/abs/core/mdadm/mdadm-2.2-segfault.patch @@ -0,0 +1,12 @@ +diff -Naur mdadm-2.2-orig/Assemble.c mdadm-2.2/Assemble.c +--- mdadm-2.2-orig/Assemble.c 2005-12-04 21:56:20.000000000 -0800 ++++ mdadm-2.2/Assemble.c 2006-02-06 10:56:37.000000000 -0800 +@@ -219,7 +219,7 @@ + } + if (dfd >= 0) close(dfd); + +- if (ident->uuid_set && (!update && strcmp(update, "uuid")!= 0) && ++ if (ident->uuid_set && (!update || strcmp(update, "uuid")!= 0) && + (!super || same_uuid(info.uuid, ident->uuid, tst->ss->swapuuid)==0)) { + if ((inargv && verbose >= 0) || verbose > 0) + fprintf(stderr, Name ": %s has wrong uuid.\n", diff --git a/abs/core/mdadm/mdadm.conf b/abs/core/mdadm/mdadm.conf new file mode 100644 index 0000000..0b2c712 --- /dev/null +++ b/abs/core/mdadm/mdadm.conf @@ -0,0 +1,64 @@ +# mdadm configuration file +# +# mdadm will function properly without the use of a configuration file, +# but this file is useful for keeping track of arrays and member disks. +# In general, a mdadm.conf file is created, and updated, after arrays +# are created. This is the opposite behavior of /etc/raidtab which is +# created prior to array construction. +# +# +# the config file takes two types of lines: +# +# DEVICE lines specify a list of devices of where to look for +# potential member disks +# +# ARRAY lines specify information about how to identify arrays so +# so that they can be activated +# + + +# You can have more than one device line and use wild cards. The first +# example includes SCSI the first partition of SCSI disks /dev/sdb, +# /dev/sdc, /dev/sdd, /dev/sdj, /dev/sdk, and /dev/sdl. The second +# line looks for array slices on IDE disks. +# +#DEVICE /dev/sd[bcdjkl]1 +#DEVICE /dev/hda1 /dev/hdb1 +# +# The designation "partitions" will scan all partitions found in +# /proc/partitions +DEVICE partitions + + +# ARRAY lines specify an array to assemble and a method of identification. +# Arrays can currently be identified by using a UUID, superblock minor number, +# or a listing of devices. +# +# super-minor is usually the minor number of the metadevice +# UUID is the Universally Unique Identifier for the array +# Each can be obtained using +# +# mdadm -D <md> +# +# To capture the UUIDs for all your RAID arrays to this file, run this: +# # mdadm -D --scan >>/etc/mdadm.conf +# +#ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371 +#ARRAY /dev/md1 super-minor=1 +#ARRAY /dev/md2 devices=/dev/hda1,/dev/hdb1 +# +# ARRAY lines can also specify a "spare-group" for each array. mdadm --monitor +# will then move a spare between arrays in a spare-group if one array has a +# failed drive but no spare +#ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df spare-group=group1 +#ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977 spare-group=group1 +# + + +# When used in --follow (aka --monitor) mode, mdadm needs a +# mail address and/or a program. To start mdadm's monitor mode, add +# "mdadm" to your DAEMONS array in /etc/rc.conf +# +# If the lines are not found, mdadm will exit quietly +#MAILADDR root@mydomain.tld +#PROGRAM /usr/sbin/handle-mdadm-events diff --git a/abs/core/mdadm/raid-partitions_hook b/abs/core/mdadm/raid-partitions_hook new file mode 100644 index 0000000..bed1cb2 --- /dev/null +++ b/abs/core/mdadm/raid-partitions_hook @@ -0,0 +1,21 @@ +# vim: set ft=sh: +run_hook () +{ + #TODO scan for these somehow... + /sbin/modprobe -aq linear multipath raid0 raid1 raid456 raid10>/dev/null 2>&1 + # md= can be specified multiple times. The simplistic commandline + # parsing does not handle this, so we will let mdassemble parse it + for i in $(replace $(echo $md) ',' ' '); do + case $i in d[0-9]) + for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do + /sbin/mdadm --create -a mdp /dev/md_d$i >/dev/null 2>&1 + done + mdadm --assemble --auto=mdp /dev/md_$(replace $(echo $md) ',' ' ') + export USE_RAID_ARRAY=1 + ;; + esac + done + if ! [ "$USE_RAID_ARRAY" = "1" ] ; then + /bin/mdassemble ${CMDLINE} + fi +} diff --git a/abs/core/mdadm/raid-partitions_install b/abs/core/mdadm/raid-partitions_install new file mode 100644 index 0000000..8fe5184 --- /dev/null +++ b/abs/core/mdadm/raid-partitions_install @@ -0,0 +1,32 @@ +# vim: set ft=sh: + +install () +{ + MODULES=" $(checked_modules "drivers/md/*" | grep -v "dm-") " + BINARIES="mdadm" + FILES="" + SCRIPT="raid-partitions" + add_file "/usr/lib/klibc/bin/mdassemble" "/bin/mdassemble" +} + +help () +{ +cat<<HELPEOF + This hook loads the necessary modules for an raid mdp/partitionable root device, + and assemble the raid device when run. + + Kernel Parameters: + Specify all your md arrays with md= parameter: + ::: Example ::: md=d0,/dev/sda3,/dev/sda4 md=d1,/dev/hda1,/dev/hdb1 + This will setup 2 md partitionable arrays + + Setup: + - to assemble a partitionable array: + md=d<md device no.>,dev0,dev1,...,devn + + Parameters: + - <md device no.> = the number of the md device: + 0 means md0, 1 means md1, ... + - <dev0-devn>: e.g. /dev/hda1,/dev/hdc1,/dev/sda1,/dev/sdb1 +HELPEOF +} |