Merge commit 'refs/top-bases/linux-zpios' into linux-zpios

This commit is contained in:
Brian Behlendorf 2010-03-11 14:09:58 -08:00
commit eb7888a1eb
16 changed files with 112 additions and 78 deletions

View File

@ -49,6 +49,7 @@ CMDDIR=${CMDDIR}
MODDIR=${MODDIR}
SCRIPTDIR=${SCRIPTDIR}
ETCDIR=\${TOPDIR}/etc
DEVDIR=\${TOPDIR}/dev
ZPOOLDIR=\${TOPDIR}/scripts/zpool-config
ZPIOSDIR=\${TOPDIR}/scripts/zpios-test
ZPIOSPROFILEDIR=\${TOPDIR}/scripts/zpios-profile
@ -67,6 +68,7 @@ ZPOOL_CREATE_SH=\${SCRIPTDIR}/zpool-create.sh
ZPIOS_SH=\${SCRIPTDIR}/zpios.sh
ZPIOS_SURVEY_SH=\${SCRIPTDIR}/zpios-survey.sh
INTREE=1
LDMOD=/sbin/insmod
KERNEL_MODULES=( \\

View File

@ -1,26 +0,0 @@
#
# Custom by-path mapping for large JBOD configurations
#
# Example Config:
# Single promise JBOD for RHEL6
#
# Channel A: PCI Bus 7, Enclosure 0x500304800027367f
a1 pci-0000:07:00.0-sas-0x500304800027367f-0
a2 pci-0000:07:00.0-sas-0x500304800027367f-1
a3 pci-0000:07:00.0-sas-0x500304800027367f-2
a4 pci-0000:07:00.0-sas-0x500304800027367f-3
a5 pci-0000:07:00.0-sas-0x500304800027367f-4
a6 pci-0000:07:00.0-sas-0x500304800027367f-5
a7 pci-0000:07:00.0-sas-0x500304800027367f-6
a8 pci-0000:07:00.0-sas-0x500304800027367f-7
# Channel B: PCI Bus 7, Enclosure 0x500304800027367f
b1 pci-0000:07:00.0-sas-0x500304800027367f-8
b2 pci-0000:07:00.0-sas-0x500304800027367f-9
b3 pci-0000:07:00.0-sas-0x500304800027367f-10
b4 pci-0000:07:00.0-sas-0x500304800027367f-11
b5 pci-0000:07:00.0-sas-0x500304800027367f-12
b6 pci-0000:07:00.0-sas-0x500304800027367f-13
b7 pci-0000:07:00.0-sas-0x500304800027367f-14
b8 pci-0000:07:00.0-sas-0x500304800027367f-15

View File

@ -0,0 +1,30 @@
#
# Custom by-path mapping for large JBOD configurations
#
# Example Config:
# Single Supermicro JBOD for RHEL6
#
# Channel A: PCI Bus 7, Enclosure 0x500304800027367f
a1 pci-0000:07:00.0-sas-0x500304800027367f-0
a2 pci-0000:07:00.0-sas-0x500304800027367f-1
a3 pci-0000:07:00.0-sas-0x500304800027367f-2
a4 pci-0000:07:00.0-sas-0x500304800027367f-3
# Channel B: PCI Bus 7, Enclosure 0x500304800027367f
b1 pci-0000:07:00.0-sas-0x500304800027367f-4
b2 pci-0000:07:00.0-sas-0x500304800027367f-5
b3 pci-0000:07:00.0-sas-0x500304800027367f-6
b4 pci-0000:07:00.0-sas-0x500304800027367f-7
# Channel C: PCI Bus 7, Enclosure 0x500304800027367f
c1 pci-0000:07:00.0-sas-0x500304800027367f-8
c2 pci-0000:07:00.0-sas-0x500304800027367f-9
c3 pci-0000:07:00.0-sas-0x500304800027367f-10
c4 pci-0000:07:00.0-sas-0x500304800027367f-11
# Channel D: PCI Bus 7, Enclosure 0x500304800027367f
d1 pci-0000:07:00.0-sas-0x500304800027367f-12
d2 pci-0000:07:00.0-sas-0x500304800027367f-13
d3 pci-0000:07:00.0-sas-0x500304800027367f-14
d4 pci-0000:07:00.0-sas-0x500304800027367f-15

View File

@ -21,13 +21,13 @@ FORCE=
FORCE_FLAG=
DUMP_LOG=
ERROR=
UPATH="/dev/disk/zpool"
RAID0S=()
RAID10S=()
RAIDZS=()
RAIDZ2S=()
ETCDIR=${ETCDIR:-/etc}
DEVDIR=${DEVDIR:-/dev/disk/zpool}
ZPOOLDIR=${ZPOOLDIR:-/usr/libexec/zfs/zpool-config}
ZPIOSDIR=${ZPIOSDIR:-/usr/libexec/zfs/zpios-test}
ZPIOSPROFILEDIR=${ZPIOSPROFILEDIR:-/usr/libexec/zfs/zpios-profile}
@ -53,6 +53,7 @@ INFOMOD=${INFOMOD:-/sbin/modinfo}
LOSETUP=${LOSETUP:-/sbin/losetup}
SYSCTL=${SYSCTL:-/sbin/sysctl}
UDEVADM=${UDEVADM:-/sbin/udevadm}
AWK=${AWK:-/bin/awk}
die() {
echo -e "${PROG}: $1" >&2
@ -168,7 +169,7 @@ unload_module() {
unload_modules() {
local MODULES_REVERSE=( $(echo ${MODULES[@]} |
awk '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}') )
${AWK} '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}') )
for MOD in ${MODULES_REVERSE[*]}; do
local NAME=`basename ${MOD} .ko`
@ -214,38 +215,53 @@ unused_loop_device() {
#
udev_setup() {
local SRC_PATH=$1
local SRC_RULES=${ETCDIR}/udev/rules.d/99-zpool.rules
local DST_RULES=/etc/udev/rules.d/99-zpool.rules
local DST_ZPOOL_ID=/usr/bin/zpool_id
local DST_FILE=`basename ${SRC_PATH} | cut -f1-2 -d'.'`
local DST_PATH=/etc/zfs/${DST_FILE}
# XXX: Copy files from source tree to installed system.
# This should be avoided if at all possible, however at
# the moment I see no clean way to add a udev rules file
# which is not in the default udevd search paths. On
# top of the the rules file we add will need to find
# the zpool_id support utility and the zdef.conf file.
cp -f ${SRC_PATH} ${DST_PATH}
if [ ! -f ${DST_ZPOOL_ID} ]; then
cp ${ZPOOL_ID} ${DST_ZPOOL_ID}
chmod 755 ${DST_ZPOOL_ID}
fi
if [ ! -f ${DST_RULES} ]; then
cp ${SRC_RULES} ${DST_RULES}
chmod 644 ${DST_RULES}
fi
if [ -f ${UDEVADM} ]; then
${UDEVADM} trigger
${UDEVADM} settle
# When running in tree manually contruct symlinks in tree to
# the proper devices. Symlinks are installed for all entires
# in the config file regardless of if that device actually
# exists. When installed as a package udev can be relied on for
# this and it will only create links for devices which exist.
if [ ${INTREE} ]; then
PWD=`pwd`
mkdir -p ${DEVDIR}/
cd ${DEVDIR}/
${AWK} '!/^#/ && /./ { system( \
"ln -f -s /dev/disk/by-path/"$2" "$1";" \
"ln -f -s /dev/disk/by-path/"$2"-part1 "$1"p1;" \
"ln -f -s /dev/disk/by-path/"$2"-part9 "$1"p9;" \
) }' $SRC_PATH
cd ${PWD}
else
/sbin/udevtrigger
/sbin/udevsettle
DST_FILE=`basename ${SRC_PATH} | cut -f1-2 -d'.'`
DST_PATH=/etc/zfs/${DST_FILE}
if [ -e ${DST_PATH} ]; then
die "Error: Config ${DST_PATH} already exists"
fi
cp ${SRC_PATH} ${DST_PATH}
if [ -f ${UDEVADM} ]; then
${UDEVADM} trigger
${UDEVADM} settle
else
/sbin/udevtrigger
/sbin/udevsettle
fi
fi
return 0
}
udev_cleanup() {
local SRC_PATH=$1
if [ ${INTREE} ]; then
PWD=`pwd`
cd ${DEVDIR}/
${AWK} '!/^#/ && /./ { system( \
"rm -f "$1" "$1"p1 "$1"p9") }' $SRC_PATH
cd ${PWD}
fi
return 0
@ -267,7 +283,7 @@ udev_raid0_setup() {
for RANK in `seq 1 ${RANKS}`; do
for CHANNEL in `seq 1 ${CHANNELS}`; do
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
RAID0S[${IDX}]="${UPATH}/${DISK}"
RAID0S[${IDX}]="${DEVDIR}/${DISK}"
let IDX=IDX+1
done
done
@ -286,7 +302,7 @@ udev_raid10_setup() {
let CHANNEL2=CHANNEL1+1
DISK1=`udev_cr2d ${CHANNEL1} ${RANK}`
DISK2=`udev_cr2d ${CHANNEL2} ${RANK}`
GROUP="${UPATH}/${DISK1} ${UPATH}/${DISK2}"
GROUP="${DEVDIR}/${DISK1} ${DEVDIR}/${DISK2}"
RAID10S[${IDX}]="mirror ${GROUP}"
let IDX=IDX+1
done
@ -305,7 +321,7 @@ udev_raidz_setup() {
for CHANNEL in `seq 1 ${CHANNELS}`; do
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
RAIDZ[${CHANNEL}]="${UPATH}/${DISK}"
RAIDZ[${CHANNEL}]="${DEVDIR}/${DISK}"
done
RAIDZS[${RANK}]="${RAIDZ[*]}"
@ -324,7 +340,7 @@ udev_raidz2_setup() {
for CHANNEL in `seq 1 ${CHANNELS}`; do
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
RAIDZ2[${CHANNEL}]="${UPATH}/${DISK}"
RAIDZ2[${CHANNEL}]="${DEVDIR}/${DISK}"
done
RAIDZ2S[${RANK}]="${RAIDZ2[*]}"

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -1,13 +1,13 @@
#!/bin/bash
#
# Flash (White Box) Raid-0 Configuration (1x16)
# Supermicro (White Box) Raid-0 Configuration (1x16)
#
RANKS=8
CHANNELS=2
RANKS=4
CHANNELS=4
zpool_create() {
udev_setup ${ETCDIR}/zfs/zdev.conf.promise.example
udev_setup ${ETCDIR}/zfs/zdev.conf.supermicro.example
udev_raid0_setup ${RANKS} ${CHANNELS}
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID0S[*]}
@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.supermicro.example
}

View File

@ -1,13 +1,13 @@
#!/bin/bash
#
# Flash (White Box) Raid-10 Configuration (10x2(1+1))
# Supermicro (White Box) Raid-10 Configuration (8x2(1+1))
#
RANKS=8
CHANNELS=2
RANKS=4
CHANNELS=4
zpool_create() {
udev_setup ${ETCDIR}/zfs/zdev.conf.promise.example
udev_setup ${ETCDIR}/zfs/zdev.conf.supermicro.example
udev_raid10_setup ${RANKS} ${CHANNELS}
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID10S[*]}
@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.supermicro.example
}

View File

@ -1,13 +1,13 @@
#!/bin/bash
#
# Flash (White Box) Raid-Z Configuration (2x8(7+1))
# Supermicro (White Box) Raid-Z Configuration (4x4(3+1))
#
RANKS=8
CHANNELS=2
RANKS=4
CHANNELS=4
zpool_create() {
udev_setup ${ETCDIR}/zfs/zdev.conf.promise.example
udev_setup ${ETCDIR}/zfs/zdev.conf.supermicro.example
udev_raidz_setup ${RANKS} ${CHANNELS}
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZS[*]}
@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.supermicro.example
}

View File

@ -1,13 +1,13 @@
#!/bin/bash
#
# Flash (White Box) Raid-Z2 Configuration (2x8(6+2))
# Supermicro (White Box) Raid-Z2 Configuration (4x4(2+2))
#
RANKS=8
CHANNELS=2
RANKS=4
CHANNELS=4
zpool_create() {
udev_setup ${ETCDIR}/zfs/zdev.conf.promise.example
udev_setup ${ETCDIR}/zfs/zdev.conf.supermicro.example
udev_raidz2_setup ${RANKS} ${CHANNELS}
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZ2S[*]}
@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.supermicro.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}