diff options
Diffstat (limited to 'system/zfs-on-linux/rc.zfs')
-rw-r--r-- | system/zfs-on-linux/rc.zfs | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/system/zfs-on-linux/rc.zfs b/system/zfs-on-linux/rc.zfs new file mode 100644 index 0000000000000..a42922b1244ed --- /dev/null +++ b/system/zfs-on-linux/rc.zfs @@ -0,0 +1,126 @@ +#!/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 +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# 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. +. /etc/rc.d/init.d/functions + +LOCKFILE=/var/lock/zfs/zfs +ZFS="/sbin/zfs" +ZPOOL="/sbin/zpool" +ZPOOL_CACHE="/etc/zfs/zpool.cache" + +# Source zfs configuration. +[ -r '/etc/default/zfs' ] && . /etc/default/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 + + echo "SELinux ZFS policy required" + return 4 + fi + + # Delay until all required block devices are present. + udevadm settle + + # 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 "$ZPOOL_CACHE" ] ; then + echo "Importing ZFS pools" + "$ZPOOL" import -fc "$ZPOOL_CACHE" -aN 2>/dev/null + + echo "Mounting ZFS filesystems" + "$ZFS" mount -a + + echo "Exporting ZFS filesystems" + "$ZFS" share -a + fi + + touch "$LOCKFILE" +} + +stop() +{ + [ ! -f "$LOCKFILE" ] && return 3 + + echo "Unmounting ZFS filesystems" + "$ZFS" umount -a + + 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 |