aboutsummaryrefslogtreecommitdiffstats
path: root/etc/init.d/zfs.lunar.in
diff options
context:
space:
mode:
Diffstat (limited to 'etc/init.d/zfs.lunar.in')
-rw-r--r--etc/init.d/zfs.lunar.in95
1 files changed, 95 insertions, 0 deletions
diff --git a/etc/init.d/zfs.lunar.in b/etc/init.d/zfs.lunar.in
new file mode 100644
index 000000000..97384dc83
--- /dev/null
+++ b/etc/init.d/zfs.lunar.in
@@ -0,0 +1,95 @@
+#!/bin/bash
+#
+# zfs This shell script takes care of starting (mount) and
+# stopping (umount) zfs shares.
+#
+# chkconfig: 35 60 40
+# description: ZFS is a filesystem developed by Sun, ZFS is a
+# combined file system and logical volume manager
+# designed by Sun Microsystems. Made available to Linux
+# using SPL (Solaris Porting Layer) by zfsonlinux.org.
+# probe: true
+
+ZFS="@sbindir@/zfs"
+ZPOOL="@sbindir@/zpool"
+ZPOOL_CACHE="@sysconfdir@/zfs/zpool.cache"
+
+case $1 in
+ start) echo "$1ing ZFS filesystems"
+
+ # Delay until all required block devices are present.
+ udevadm settle
+
+ if ! grep "zfs" /proc/modules > /dev/null; then
+ echo "ZFS kernel module not loaded yet; loading...";
+ if ! modprobe zfs; then
+ echo "Failed to load ZFS kernel module...";
+ exit 0;
+ fi
+ fi
+
+ if ! [ `uname -m` == "x86_64" ]; then
+ echo "Warning: You're not running 64bit. Currently native zfs in";
+ echo " linux is only supported and tested on 64bit.";
+ # should we break here? People doing this should know what they
+ # do, thus i'm not breaking here.
+ fi
+
+ # mount the filesystems
+ while IFS= read -r -d $'\n' dev; do
+ mdev=$(echo "$dev" | awk '{ print $1; }')
+ echo -n "mounting $mdev..."
+ if $ZFS mount $mdev; then
+ echo -e "done";
+ else
+ echo -e "failed";
+ fi
+ done < <($ZFS list -H);
+
+ # export the filesystems
+ echo -n "exporting ZFS filesystems..."
+ if $ZFS share -a; then
+ echo -e "done";
+ else
+ echo -e "failed";
+ fi
+
+
+ ;;
+
+ stop) echo "$1ping ZFS filesystems"
+
+ if grep "zfs" /proc/modules > /dev/null; then
+ # module is loaded, so we can try to umount filesystems
+ while IFS= read -r -d $'\n' dev; do
+ mdev=$(echo "$dev" | awk '{ print $1 }');
+ echo -n "umounting $mdev...";
+ if $ZFS umount $mdev; then
+ echo -e "done";
+ else
+ echo -e "failed";
+ fi
+ # the next line is, because i have to reverse the
+ # output, otherwise it wouldn't work as it should
+ done < <($ZFS list -H | tac);
+
+ # and finally let's rmmod the module
+ rmmod zfs
+
+
+ else
+ # module not loaded, no need to umount anything
+ exit 0
+ fi
+
+ ;;
+
+ restart) echo "$1ing ZFS filesystems"
+ $0 stop
+ $0 start
+ ;;
+
+ *) echo "Usage: $0 {start|stop|restart}"
+ ;;
+
+esac