conf/190152: [patch] [rc] gmirror savecore support

Paul J Murphy paul at
Fri May 23 19:10:00 UTC 2014

>Number:         190152
>Category:       conf
>Synopsis:       [patch] [rc] gmirror savecore support
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri May 23 19:10:00 UTC 2014
>Originator:     Paul J Murphy
>Release:        FreeBSD 10.0-RELEASE-p3 amd64
(Calling this a sw-bug, rather than change-request, as I consider it a bug that savecore is basically broken on a very common setup.)

Adding long-overdue basic gmirror savecore support.  In a perfect world, it would support AUTO for simple configurations, but I've left that as a TODO for now, and think that it's better to get this basic support into the OS, and someone can figure out a nice AUTO implementation later.  RC-wizards, please feel free to decide that the gmirror commands would be better executed inside the savecore_start() instead of pre/post.

Also fixes doc-bugs in gmirror(8), which suggested addressing the issue through the removed rc.early/rc.late scripts, and removes mention of not being able to change priority of gmirror components (seems to work just fine on 10.0-RELEASE, not sure when it was fixed).
Small section on boot on gmirror added to the NOTES section of gmirror(8), since there really should be some mention of that in there.

Proposed for CURRENT & 10-STABLE.  It should probably also go into older -STABLE too.  This patch was developed and tested on 10.0-RELEASE, but can probably be easily applied to just about any recent-ish release.

Is this simple and low-risk enough that it should go into existing releng branches as well?  There's a possible small benefit in security terms, in that any attacks or exploits which end up causing a panic might be more detectable/diagnosable with this patch installed.

--- savecore.patch begins here ---
Index: etc/defaults/rc.conf
--- etc/defaults/rc.conf	(revision 266549)
+++ etc/defaults/rc.conf	(working copy)
@@ -595,6 +595,9 @@
 savecore_flags="-m 10"	# Used if dumpdev is enabled above, and present.
 			# By default, only the 10 most recent kernel dumps
 			# are saved.
+savecore_gmirror_name="" # gmirror provider name containing dumpdev
+savecore_gmirror_balance="load" # gmirror balance algorithm to set after
+			# savecore has run
 crashinfo_enable="YES"	# Automatically generate crash dump summary.
 crashinfo_program="/usr/sbin/crashinfo"	# Script to generate crash dump summary.
 quota_enable="NO"	# turn on quotas on startup (or NO).
Index: etc/rc.d/savecore
--- etc/rc.d/savecore	(revision 266549)
+++ etc/rc.d/savecore	(working copy)
@@ -12,6 +12,7 @@
@@ -40,6 +41,22 @@
+	case ${savecore_gmirror_name} in
+	[Nn][Oo] | '')
+		savecore_gmirror_name=''
+		;;
+	[Aa][Uu][Tt][Oo])
+		# TODO: figure out a reasonable method for auto mode
+		;;
+	esac
+	# If there is no balance algorithm, use the default for new mirrors
+	case ${savecore_gmirror_balance} in
+	'')
+		savecore_gmirror_balance='load'
+		;;
+	esac
 	if [ ! -c "${dumpdev}" ]; then
 		warn "Dump device does not exist.  Savecore not run."
 		return 1
@@ -49,6 +66,11 @@
 		warn "Dump directory does not exist.  Savecore not run."
 		return 1
+	if [ "${savecore_gmirror_name}" ]; then
+		gmirror configure -b prefer ${savecore_gmirror_name}
+	fi
 	return 0
@@ -76,5 +98,12 @@
+	if [ "${savecore_gmirror_name}" ]; then
+		gmirror configure -b ${savecore_gmirror_balance} ${savecore_gmirror_name}
+	fi
 load_rc_config $name
 run_rc_command "$1"
Index: sbin/geom/class/mirror/gmirror.8
--- sbin/geom/class/mirror/gmirror.8	(revision 266549)
+++ sbin/geom/class/mirror/gmirror.8	(working copy)
@@ -298,10 +298,23 @@
 gmirror activate data da1
-Doing kernel dumps to
+.Ss Booting from a gmirror provider
+Systems which boot from a
+provider will need to make the geom_mirror kernel module available at
+boot time.  If it is not included in the base kernel, but is available
+as a loadable module (the normal situation with the standard GENERIC
+kernel build), the following should be added to the
+.Pa /boot/loader.conf
+.Bd -literal -offset indent
+Obviously, normal partitioning and boot code will be required in
+addition to loading the kernel module.
+.Ss Doing kernel dumps to gmirror providers.
 This is possible, but some conditions have to be met.
 First of all, a kernel dump will go only to one component and
@@ -313,18 +326,12 @@
 will read only from the component with the highest priority).
 If you use a different balance algorithm, you should add:
 .Bd -literal -offset indent
-gmirror configure -b prefer data
+.No savecore_gmirror_name= Ns Qq Ar name
+.No savecore_gmirror_balance= Ns Qq Ar balance
 to the
-.Pa /etc/rc.early
-script and:
-.Bd -literal -offset indent
-gmirror configure -b round-robin data
-to the
-.Pa /etc/rc.local
+.Pa /etc/rc.conf
 The decision which component to choose for dumping is made when
 .Xr dumpon 8
@@ -353,8 +360,6 @@
 .An Pawel Jakub Dawidek Aq pjd at
-There should be a way to change a component's priority inside a running mirror.
 There should be a section with an implementation description.
 Documentation for sysctls
--- savecore.patch ends here ---


More information about the freebsd-bugs mailing list