X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=etc%2Finit.d%2Fzfs.gentoo;h=a33d9dc29a2eced25ea35d7183b1e95ea2fa058c;hb=5c03efc379693f992ebe39c6a00c7297c4a304ea;hp=d2ea90267fd86248ea420fe1cf495fec499755f1;hpb=712f8bd87b2d3799107e102652875996fa59647b;p=zfs.git diff --git a/etc/init.d/zfs.gentoo b/etc/init.d/zfs.gentoo index d2ea902..a33d9dc 100644 --- a/etc/init.d/zfs.gentoo +++ b/etc/init.d/zfs.gentoo @@ -7,85 +7,63 @@ depend() { before net after udev + keyword -lxc -openvz -prefix -vserver } CACHEFILE=/etc/zfs/zpool.cache ZPOOL=/usr/sbin/zpool ZFS=/usr/sbin/zfs ZFS_MODULE=zfs -LOCKFILE=/var/lock/zfs/zfs_lockfile -checksystem() -{ - /sbin/modinfo $ZFS_MODULE &>/dev/null - if [[ $? -ne 0 ]] - then - eerror "$ZFS_MODULE not found. Is the ZFS package installed?" - return 1 - fi - if [[ ! -x $ZPOOL ]] - then - eerror "$ZPOOL binary not found." - return 1 - fi - if [[ ! -x $ZFS ]] - then - eerror "$ZFS binary not found." - return 1 - fi - - # create the lockdir if not there - lockdir=$(dirname ${LOCKFILE}) - if [[ ! -d ${lockdir} ]] - then - mkdir -p ${lockdir} &>/dev/null +checksystem() { + if [ -c /dev/zfs ]; then + einfo "ZFS modules already loaded" + return 0 + else + einfo "Checking if ZFS modules present" + if [ "x$(modprobe -l $ZFS_MODULE | grep $ZFS_MODULE)" == "x" ]; then + eerror "$ZFS_MODULE not found. Is the ZFS package installed?" + return 1 + fi fi + einfo "Checking if zfs userspace tools present" + if [ ! -x $ZPOOL ]; then + eerror "$ZPOOL binary not found." + return 1 + fi + if [ ! -x $ZFS ]; then + eerror "$ZFS binary not found." + return 1 + fi return 0 } -start() -{ - if [[ -f $LOCKFILE ]] - then - einfo "ZFS already running, please stop it first. Delete $LOCKFILE if its not so." - eend 3 - return 3 - fi +start() { ebegin "Starting ZFS" checksystem || return 1 - if ! grep -q $ZFS_MODULE /proc/modules - then - /sbin/modprobe $ZFS_MODULE &>/dev/null + + # Delay until all required block devices are present. + udevadm settle + + if [ ! -c /dev/zfs ]; then + modprobe $ZFS_MODULE rv=$? - if [[ $rv -ne 0 ]] - then + if [ $rv -ne 0 ]; then eerror "Failed to load the $ZFS_MODULE module, check 'dmesg|tail'." eend $rv return $rv fi fi - # 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 + if [ -f $CACHEFILE ]; then einfo "Importing ZFS pools" - # as per fedora script, import can fail if all pools are already imported # The check for $rv makes no sense...but someday, it will work right. $ZPOOL import -c $CACHEFILE -aN 2>/dev/null || true rv=$? - if [[ $rv -ne 0 ]] - then + if [ $rv -ne 0 ]; then eerror "Failed to import not-yet imported pools." eend $rv return $rv @@ -95,57 +73,30 @@ start() einfo "Mounting ZFS filesystems" $ZFS mount -a rv=$? - if [[ $rv -ne 0 ]] - then + if [ $rv -ne 0 ]; then eerror "Failed to mount ZFS filesystems." eend $rv return $rv fi - # hack to read mounted file systems because otherwise - # zfs returns EPERM when a non-root user reads a mounted filesystem before root did - savepwd="$PWD" - mount | grep " type zfs " | sed 's/.*on //' | sed 's/ type zfs.*$//' | \ - while read line - do - cd "$line" &> /dev/null - ls &> /dev/null - done - cd "$savepwd" - - touch $LOCKFILE eend 0 return 0 } stop() { - if [[ ! -f $LOCKFILE ]] - then - einfo "ZFS is not started, remove $LOCKFILE if its not so." - eend 3 - return 3 - fi ebegin "Unmounting ZFS filesystems" - sync $ZFS umount -a - if [[ $rv -ne 0 ]] - then + rv=$? + if [ $rv -ne 0 ]; then eerror "Failed to umount ZFS filesystems." fi - rm -f $LOCKFILE + eend $rv } status() { - if [[ ! -f $LOCKFILE ]] - then - einfo "ZFS is not started, remove $LOCKFILE if its not so." - eend 3 - return 3 - fi - # show pool status and list $ZPOOL status && echo && $ZPOOL list }