#!/bin/bash # # lvm This script handles the LVM startup/shutdown # so that LVMs are properly configured and available. # # try to load module in case that hasn't been done yet modprobe lvm >/dev/null 2>&1 modprobe lvm-mod >/dev/null 2>&1 modprobe dm-mod >/dev/null 2>&1 set -e test -x /sbin/lvmiopversion -a -x /sbin/vgscan -a -x /sbin/vgchange || exit 0 test -f /etc/default/lvm-common && . /etc/default/lvm-common # So much for being "LVM independant" :( create_lvm_device() { mknod --mode=600 /dev/lvm c 109 0 >/dev/null 2>&1 || true } create_dm_device() { dm_dir="/dev/mapper" dm_file="$dm_dir/control" if [ ! -f /dev/.devfsd ] && [ `/sbin/lvmiopversion` -ge 200 ] then major=$(grep "[0-9] misc$" /proc/devices | sed 's/[ ]\+misc//') minor=$(grep "[0-9] device-mapper$" /proc/misc | sed 's/[ ]\+device-mapper//') test -d $dm_dir || mkdir --mode=755 $dm_dir >/dev/null 2>&1 test -c $dm_file -o -z "$major" -o -z "$minor" || mknod --mode=600 $dm_file c $major $minor >/dev/null 2>&1 fi } case "$1" in start|"") echo "Setting up LVM Volume Groups..." create_lvm_device create_dm_device test `/sbin/lvmiopversion` != "0" || exit 0 IGNORELOCKINGFAILURES="" MKNODES="" test `/sbin/lvmiopversion` -ge "200" && test -x /lib/lvm-200/lvm && IGNORELOCKINGFAILURES="--ignorelockingfailure" && MKNODES="--mknodes" /sbin/vgscan $IGNORELOCKINGFAILURES $MKNODES || true /sbin/vgchange -a y $IGNORELOCKINGFAILURES # Set permissions from /etc/default/lvm-common for MODEVAR in ${!MODE_*}; do eval MODE=\$$MODEVAR DEV=${MODEVAR//_/\/} DEV="/dev/${DEV#MODE\/}" MOD=${MODE#* } OWN=${MODE% *} chmod $MOD $DEV chown --dereference $OWN $DEV done ;; stop) echo "Shutting down LVM Volume Groups... " if test `/sbin/lvmiopversion` -ge 200 -a -x /lib/lvm-200/lvm; then /sbin/vgchange --ignorelockingfailure -a n else [ -e /etc/lvmtab ] && /sbin/vgchange -a n fi ;; restart|force-reload) $0 stop sleep 3 $0 start ;; *) echo "Usage: lvm {start|stop|force-reload}" >&2 exit 1 ;; esac