diff options
Diffstat (limited to 'etc/init.d/zfs.lsb')
-rw-r--r-- | etc/init.d/zfs.lsb | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/etc/init.d/zfs.lsb b/etc/init.d/zfs.lsb new file mode 100644 index 000000000..4e8f0cc07 --- /dev/null +++ b/etc/init.d/zfs.lsb @@ -0,0 +1,123 @@ +#!/bin/bash +# +# zfs This script will mount/umount the zfs filesystems. +# +# chkconfig: 2345 01 99 +# description: This script will mount/umount the zfs filesystems during +# system boot/shutdown. Configuration of which filesystems +# should be mounted is handled by the zfs 'mountpoint' and +# 'canmount' properties. See the zfs(8) man page for details. +# It is also responsible for all userspace zfs services. +# +### BEGIN INIT INFO +# Provides: zfs +# Required-Start: $local_fs +# Required-Stop: $local_fs +# Should-Stop: +# Short-Description: Mount/umount the zfs filesystems +# Description: ZFS is an advanced filesystem designed to simplify managing +# and protecting your data. This service mounts the ZFS +# filesystems and starts all related zfs services. +### END INIT INFO + +# Source function library. +. /lib/lsb/init-functions + +# Source zfs configuration. +[ -f /etc/defaults/zfs ] && . /etc/defaults/zfs + +RETVAL=0 + +LOCKFILE=/var/lock/zfs +CACHEFILE=/etc/zfs/zpool.cache +ZPOOL=/usr/sbin/zpool +ZFS=/usr/sbin/zfs + +[ -x $ZPOOL ] || exit 1 +[ -x $ZFS ] || exit 2 + +start() +{ + [ -f $LOCKFILE ] && return 3 + + # Requires selinux policy which has not been written. + if [ -r "/selinux/enforce" ] && + [ "$(cat /selinux/enforce)" = "1" ]; then + + log_failure_msg "SELinux ZFS policy required" + return 4 + fi + + # Load the zfs module stack + /sbin/modprobe zfs + + # Ensure / exists in /etc/mtab, if not update mtab accordingly. + # This should be handled by rc.sysinit but lets be paranoid. + awk '$2 == "/" { exit 1 }' /etc/mtab + RETVAL=$? + if [ $RETVAL -eq 0 ]; then + /bin/mount -f / + fi + + # Import all pools described by the cache file, and then mount + # all filesystem based on their properties. + if [ -f $CACHEFILE ] ; then + log_begin_msg "Importing ZFS pools" + $ZPOOL import -c $CACHEFILE -aN 2>/dev/null + log_end_msg $? + + log_begin_msg "Mounting ZFS filesystems" + $ZFS mount -a + log_end_msg $? + fi + + touch $LOCKFILE +} + +stop() +{ + [ ! -f $LOCKFILE ] && return 3 + + log_begin_msg "Unmounting ZFS filesystems" + $ZFS umount -a + log_end_msg $? + + rm -f $LOCKFILE +} + +status() +{ + [ ! -f $LOCKFILE ] && return 3 + + $ZPOOL status && echo && $ZPOOL list +} + +case "$1" in + start) + start + RETVAL=$? + ;; + stop) + stop + RETVAL=$? + ;; + status) + status + RETVAL=$? + ;; + restart) + stop + start + ;; + condrestart) + if [ -f $LOCKFILE ]; then + stop + start + fi + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|condrestart}" + ;; +esac + +exit $RETVAL |