summaryrefslogtreecommitdiff
path: root/system/zfs-on-linux/rc.zfs
diff options
context:
space:
mode:
Diffstat (limited to 'system/zfs-on-linux/rc.zfs')
-rw-r--r--system/zfs-on-linux/rc.zfs126
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 0000000000..a42922b124
--- /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