Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F151710615
D1210.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D1210.diff
View Options
Index: etc/auto_master
===================================================================
--- etc/auto_master
+++ etc/auto_master
@@ -3,3 +3,6 @@
# Automounter master map, see auto_master(5) for details.
#
/net -hosts -nobrowse,nosuid
+# When using the -media special map, make sure to edit devd.conf(5)
+# to move the call to "automount -c" out of the comments section.
+#/media -media -nosuid
Index: etc/autofs/Makefile
===================================================================
--- etc/autofs/Makefile
+++ etc/autofs/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-FILES= include_ldap special_hosts special_null
+FILES= include_ldap special_hosts special_media special_null
NO_OBJ=
FILESDIR= /etc/autofs
Index: etc/autofs/special_media
===================================================================
--- /dev/null
+++ etc/autofs/special_media
@@ -0,0 +1,93 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# Print newline-separated list of devices available for mounting.
+# If there is a filesystem label - use it, otherwise use device name.
+print_available() {
+ local _fstype _fstype_and_label _label _p
+
+ for _p in ${providers}; do
+ _fstype_and_label="$(fstyp -l "/dev/${_p}" 2> /dev/null)"
+ if [ $? -ne 0 ]; then
+ # Ignore devices for which we were unable
+ # to determine filesystem type.
+ continue
+ fi
+
+ _fstype="${_fstype_and_label%% *}"
+ if [ "${_fstype}" != "${_fstype_and_label}" ]; then
+ _label="${_fstype_and_label#* }"
+ echo "${_label}"
+ continue
+ fi
+
+ echo "${_p}"
+ done
+}
+
+# Print a single map entry.
+print_one() {
+ local _fstype _fstype_and_label _label _key _p
+
+ _key="$1"
+
+ _fstype="$(fstyp "/dev/${_key}" 2> /dev/null)"
+ if [ $? -eq 0 ]; then
+ echo "-fstype=${_fstype},nosuid :/dev/${_key}"
+ return
+ fi
+
+ for _p in ${providers}; do
+ _fstype_and_label="$(fstyp -l "/dev/${_p}" 2> /dev/null)"
+ if [ $? -ne 0 ]; then
+ # Ignore devices for which we were unable
+ # to determine filesystem type.
+ continue
+ fi
+
+ _fstype="${_fstype_and_label%% *}"
+ if [ "${_fstype}" = "${_fstype_and_label}" ]; then
+ # No label, try another device.
+ continue
+ fi
+
+ _label="${_fstype_and_label#* }"
+ if [ "${_label}" != "${_key}" ]; then
+ # Labels don't match, try another device.
+ continue
+ fi
+
+ echo "-fstype=${_fstype},nosuid :/dev/${_p}"
+ done
+
+ # No matching device - don't print anything, autofs will handle it.
+}
+
+# Obtain a list of (geom-provider-name, access-count) pairs, turning this:
+#
+# z0xfffff80005085d00 [shape=hexagon,label="ada0\nr2w2e3\nerr#0\nsector=512\nstripe=0"];
+#
+# Into this:
+#
+# ada0 r2w2e3
+#
+# XXX: It would be easier to use kern.geom.conftxt instead, but it lacks
+# access counts.
+pairs=$(sysctl kern.geom.confdot | sed -n 's/^.*hexagon,label="\([^\]*\)\\n\([^\]*\).*/\1 \2/p')
+
+# Obtain a list of GEOM providers that are not already open - not mounted,
+# and without other GEOM class, such as gpart, attached. In other words,
+# grep for "r0w0e0". Skip providers with names containing slashes; we're
+# not interested in geom_label(4) creations.
+providers=$(echo "$pairs" | awk '$2 == "r0w0e0" && $1 !~ /\// { print $1 }')
+
+if [ $# -eq 0 ]; then
+ print_available
+ exit 0
+fi
+
+print_one "$1"
+exit 0
+
Index: etc/devd.conf
===================================================================
--- etc/devd.conf
+++ etc/devd.conf
@@ -318,4 +318,16 @@
action "/usr/local/etc/rc.d/postgresql restart";
};
+# Discard autofs caches, useful for the -media special map. The one
+# second delay is for GEOM to finish tasting.
+#
+# XXX: We should probably have a devctl(4) event that fires after GEOM
+# tasting.
+#
+notify 100 {
+ match "system" "DEVFS";
+ match "cdev" "(da|mmcsd)[0-9]+";
+ action "sleep 1 && /usr/sbin/automount -c";
+};
+
*/
Index: usr.sbin/autofs/auto_master.5
===================================================================
--- usr.sbin/autofs/auto_master.5
+++ usr.sbin/autofs/auto_master.5
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 21, 2014
+.Dd November 22, 2014
.Dt AUTO_MASTER 5
.Os
.Sh NAME
@@ -213,14 +213,17 @@
.Pp
.Bl -tag -width "-hosts" -compact
.It Li -hosts
-This map queries the remote NFS server and maps exported volumes.
-It is traditionally mounted on
+Query the remote NFS server and map exported shares.
+This map is traditionally mounted on
.Pa /net .
-It enables access to files on a remote NFS server by accessing
+Access to files on a remote NFS server is provided through the
.Pa /net/nfs-server-ip/share-name/
-directory, without the need for any further configuration.
+directory without any additional configuration.
+.It Li -media
+Query devices that are not yet mounted, but contain valid filesystems.
+Generally used to access files on removable media.
.It Li -null
-This map prevents the
+Prevent
.Xr automountd 8
from mounting anything on the mountpoint.
.El
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 11, 4:58 AM (21 m, 36 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31268346
Default Alt Text
D1210.diff (4 KB)
Attached To
Mode
D1210: Add -media autofs map.
Attached
Detach File
Event Timeline
Log In to Comment