]> git.proxmox.com Git - mirror_zfs-debian.git/blame - etc/init.d/zfs-mount.in
New upstream version 0.7.9
[mirror_zfs-debian.git] / etc / init.d / zfs-mount.in
CommitLineData
e10b0808
AX
1#!@SHELL@
2#
3# zfs-mount This script will mount/umount the zfs filesystems.
4#
5# chkconfig: 2345 06 99
6# description: This script will mount/umount the zfs filesystems during
7# system boot/shutdown. Configuration of which filesystems
8# should be mounted is handled by the zfs 'mountpoint' and
9# 'canmount' properties. See the zfs(8) man page for details.
10# It is also responsible for all userspace zfs services.
11# probe: true
12#
13### BEGIN INIT INFO
14# Provides: zfs-mount
15# Required-Start: $local_fs zfs-import
16# Required-Stop: $local_fs zfs-import
17# Default-Start: 2 3 4 5
18# Default-Stop: 0 1 6
19# X-Stop-After: zfs-zed
20# Short-Description: Mount ZFS filesystems and volumes
21# Description: Run the `zfs mount -a` or `zfs umount -a` commands.
22### END INIT INFO
23#
24# Released under the 2-clause BSD license.
25#
26# The original script that acted as a template for this script came from
27# the Debian GNU/Linux kFreeBSD ZFS packages (which did not include a
28# licensing stansa) in the commit dated Mar 24, 2011:
29# https://github.com/zfsonlinux/pkg-zfs/commit/80a3ae582b59c0250d7912ba794dca9e669e605a
30
31# Source the common init script
32. @sysconfdir@/zfs/zfs-functions
33
34# ----------------------------------------------------
35
36chkroot() {
37 while read line; do
38 set -- $line
39 if [ "$2" = "/" ]; then
40 return 0
41 fi
cae5b340 42 done < /proc/self/mounts
e10b0808
AX
43
44 return 1
45}
46
47do_depend()
48{
49 # Try to allow people to mix and match fstab with ZFS in a way that makes sense.
50 if [ "$(mountinfo -s /)" = 'zfs' ]
51 then
52 before localmount
53 else
54 after localmount
55 fi
56
57 # bootmisc will log to /var which may be a different zfs than root.
58 before bootmisc logger
59
60 after zfs-import sysfs
61 use mtab
62 keyword -lxc -openvz -prefix -vserver
63}
64
65# Mount all datasets/filesystems
66do_mount()
67{
68 local verbose overlay i mntpt val
69
70 check_boolean "$VERBOSE_MOUNT" && verbose=v
71 check_boolean "$DO_OVERLAY_MOUNTS" && overlay=O
72
73 zfs_action "Mounting ZFS filesystem(s)" \
74 "$ZFS" mount -a$verbose$overlay "$MOUNT_EXTRA_OPTIONS"
75
cae5b340 76 # Require each volume/filesystem to have 'noauto' and no fsck
e10b0808
AX
77 # option. This shouldn't really be necessary, as long as one
78 # can get zfs-import to run sufficiently early on in the boot
79 # process - before local mounts. This is just here in case/if
80 # this isn't possible.
81 check_boolean "$VERBOSE_MOUNT" && \
82 zfs_log_begin_msg "Mounting volumes and filesystems registered in fstab"
83
84 read_mtab "^/dev/(zd|zvol)"
85 read_fstab "^/dev/(zd|zvol)"
86 i=0; var=$(eval echo FSTAB_$i)
87 while [ -n "$(eval echo "$""$var")" ]
88 do
89 mntpt=$(eval echo "$""$var")
90 dev=$(eval echo "$"FSTAB_dev_$i)
91 if ! in_mtab "$mntpt" && ! is_mounted "$mntpt" && [ -e "$dev" ]
92 then
93 check_boolean "$VERBOSE_MOUNT" && \
94 zfs_log_progress_msg "$mntpt "
95 fsck "$dev" && mount "$mntpt"
96 fi
97
98 i=$((i + 1))
99 var=$(eval echo FSTAB_$i)
100 done
101
102 read_mtab "[[:space:]]zfs[[:space:]]"
103 read_fstab "[[:space:]]zfs[[:space:]]"
104 i=0; var=$(eval echo FSTAB_$i)
105 while [ -n "$(eval echo "$""$var")" ]
106 do
107 mntpt=$(eval echo "$""$var")
108 if ! in_mtab "$mntpt" && ! is_mounted "$mntpt"
109 then
110 check_boolean "$VERBOSE_MOUNT" && \
111 zfs_log_progress_msg "$mntpt "
112 mount "$mntpt"
113 fi
114
115 i=$((i + 1))
116 var=$(eval echo FSTAB_$i)
117 done
118 check_boolean "$VERBOSE_MOUNT" && zfs_log_end_msg 0
119
120 return 0
121}
122
123# Unmount all filesystems
124do_unmount()
125{
126 local i var mntpt
127
128 # This shouldn't really be necessary, as long as one can get
129 # zfs-import to run sufficiently late in the shutdown/reboot process
130 # - after unmounting local filesystems. This is just here in case/if
131 # this isn't possible.
132 zfs_action "Unmounting ZFS filesystems" "$ZFS" unmount -a
133
134 check_boolean "$VERBOSE_MOUNT" && \
135 zfs_log_begin_msg "Unmounting volumes and filesystems registered in fstab"
136
137 read_mtab "^/dev/(zd|zvol)"
138 read_fstab "^/dev/(zd|zvol)"
139 i=0; var=$(eval echo FSTAB_$i)
140 while [ -n "$(eval echo "$""$var")" ]
141 do
142 mntpt=$(eval echo "$""$var")
143 dev=$(eval echo "$"FSTAB_dev_$i)
144 if in_mtab "$mntpt"
145 then
146 check_boolean "$VERBOSE_MOUNT" && \
147 zfs_log_progress_msg "$mntpt "
148 umount "$mntpt"
149 fi
150
151 i=$((i + 1))
152 var=$(eval echo FSTAB_$i)
153 done
154
155 read_mtab "[[:space:]]zfs[[:space:]]"
156 read_fstab "[[:space:]]zfs[[:space:]]"
157 i=0; var=$(eval echo FSTAB_$i)
158 while [ -n "$(eval echo "$""$var")" ]
159 do
160 mntpt=$(eval echo "$""$var")
161 if in_mtab "$mntpt"; then
162 check_boolean "$VERBOSE_MOUNT" && \
163 zfs_log_progress_msg "$mntpt "
164 umount "$mntpt"
165 fi
166
167 i=$((i + 1))
168 var=$(eval echo FSTAB_$i)
169 done
170 check_boolean "$VERBOSE_MOUNT" && zfs_log_end_msg 0
171
172 return 0
173}
174
175do_start()
176{
177 check_boolean "$ZFS_MOUNT" || exit 0
178
179 check_module_loaded "zfs" || exit 0
180
cae5b340 181 # Ensure / exists in /proc/self/mounts.
e10b0808
AX
182 # This should be handled by rc.sysinit but lets be paranoid.
183 if ! chkroot
184 then
185 mount -f /
186 fi
187
188 do_mount
189}
190
191do_stop()
192{
193 check_boolean "$ZFS_UNMOUNT" || exit 0
194
195 check_module_loaded "zfs" || exit 0
196
197 do_unmount
198}
199
200# ----------------------------------------------------
201
cae5b340 202if [ ! -e /sbin/openrc-run ]
e10b0808
AX
203then
204 case "$1" in
205 start)
206 do_start
207 ;;
208 stop)
209 do_stop
210 ;;
211 force-reload|condrestart|reload|restart|status)
212 # no-op
213 ;;
214 *)
215 [ -n "$1" ] && echo "Error: Unknown command $1."
216 echo "Usage: $0 {start|stop}"
217 exit 3
218 ;;
219 esac
220
221 exit $?
222else
223 # Create wrapper functions since Gentoo don't use the case part.
224 depend() { do_depend; }
225 start() { do_start; }
226 stop() { do_stop; }
227fi