blob: 5cad22b2b2baab338e59e1f2bc03bd98a035d078 [file] [log] [blame]
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08001From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2From: Benjamin Marzinski <bmarzins@redhat.com>
3Date: Thu, 16 Oct 2014 15:49:01 -0500
4Subject: [PATCH] RH: add mpathconf
5
6mpathconf is a program (largely based on lvmcomf) to help users
7configure /etc/multipath.conf and enable or disable multipathing. It
8has a couple of built-in options that can be set directly from the
9command line. But, mostly it is used to get a multipath.conf file
10with the OS defaults, and to enable and disable multipathing via
11a single command.
12
13Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
14---
15 libmultipath/config.c | 1 +
16 multipath/Makefile | 5 +
17 multipath/mpathconf | 464 ++++++++++++++++++++++++++++++++++++++++++++++++++
18 multipath/mpathconf.8 | 101 +++++++++++
19 4 files changed, 571 insertions(+)
20 create mode 100644 multipath/mpathconf
21 create mode 100644 multipath/mpathconf.8
22
23diff --git a/libmultipath/config.c b/libmultipath/config.c
24index 0607403..5c98e48 100644
25--- a/libmultipath/config.c
26+++ b/libmultipath/config.c
27@@ -661,6 +661,7 @@ load_config (char * file)
28
29 } else {
30 condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
31+ condlog(0, "You can run /sbin/mpathconf to create or modify /etc/multipath.conf");
32 if (conf->blist_devnode == NULL) {
33 conf->blist_devnode = vector_alloc();
34 if (!conf->blist_devnode) {
35diff --git a/multipath/Makefile b/multipath/Makefile
36index b9bbb3c..e720c7f 100644
37--- a/multipath/Makefile
38+++ b/multipath/Makefile
39@@ -18,10 +18,12 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so
40 $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS)
41 $(GZIP) $(EXEC).8 > $(EXEC).8.gz
42 $(GZIP) $(EXEC).conf.5 > $(EXEC).conf.5.gz
43+ $(GZIP) mpathconf.8 > mpathconf.8.gz
44
45 install:
46 $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
47 $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
48+ $(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
49 $(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
50 $(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
51 $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
52@@ -29,13 +31,16 @@ install:
53 $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir)
54 $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
55 $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5.gz $(DESTDIR)$(man5dir)
56+ $(INSTALL_PROGRAM) -m 644 mpathconf.8.gz $(DESTDIR)$(man8dir)
57
58 uninstall:
59 $(RM) $(DESTDIR)$(bindir)/$(EXEC)
60 $(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
61 $(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
62+ $(RM) $(DESTDIR)$(bindir)/mpathconf
63 $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
64 $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz
65+ $(RM) $(DESTDIR)$(man8dir)/mpathconf.8.gz
66
67 clean: dep_clean
68 $(RM) core *.o $(EXEC) *.gz
69diff --git a/multipath/mpathconf b/multipath/mpathconf
70new file mode 100644
71index 0000000..e839134
72--- /dev/null
73+++ b/multipath/mpathconf
74@@ -0,0 +1,464 @@
75+#!/bin/bash
76+#
77+# Copyright (C) 2010 Red Hat, Inc. All rights reserved.
78+#
79+# This file is part of the device-mapper-multipath package.
80+#
81+# This copyrighted material is made available to anyone wishing to use,
82+# modify, copy, or redistribute it subject to the terms and conditions
83+# of the GNU General Public License v.2.
84+#
85+# You should have received a copy of the GNU General Public License
86+# along with this program; if not, write to the Free Software Foundation,
87+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
88+
89+#
90+# Simple editting of /etc/multipath.conf
91+# This program was largely ripped off from lvmconf
92+#
93+
94+unset ENABLE FIND FRIENDLY MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST
95+
96+DEFAULT_CONFIG="# device-mapper-multipath configuration file
97+
98+# For a complete list of the default configuration values, run either:
99+# # multipath -t
100+# or
101+# # multipathd show config
102+
103+# For a list of configuration options with descriptions, see the
104+# multipath.conf man page.
105+
106+defaults {
107+ user_friendly_names yes
108+ find_multipaths yes
109+}
110+
111+blacklist_exceptions {
112+ property \"(SCSI_IDENT_|ID_WWN)\"
113+}"
114+
115+CONFIGFILE="/etc/multipath.conf"
116+OUTPUTFILE="/etc/multipath.conf"
117+MULTIPATHDIR="/etc/multipath"
118+TMPFILE="/etc/multipath/.multipath.conf.tmp"
119+WWIDS=0
120+
121+function usage
122+{
123+ echo "usage: $0 <command>"
124+ echo ""
125+ echo "Commands:"
126+ echo "Enable: --enable "
127+ echo "Disable: --disable"
128+ echo "Only allow certain wwids (instead of enable): --allow <WWID>"
129+ echo "Set user_friendly_names (Default y): --user_friendly_names <y|n>"
130+ echo "Set find_multipaths (Default y): --find_multipaths <y|n>"
131+ echo "Load the dm-multipath modules on enable (Default y): --with_module <y|n>"
132+ echo "start/stop/reload multipathd (Default n): --with_multipathd <y|n>"
133+ echo "select output file (Default /etc/multipath.conf): --outfile <FILE>"
134+ echo ""
135+}
136+
137+function add_wwid
138+{
139+ INDEX=0
140+ while [ "$INDEX" -lt "$WWIDS" ] ; do
141+ if [ "$1" = "${WWID_LIST[$INDEX]}" ] ; then
142+ return
143+ fi
144+ ((INDEX++))
145+ done
146+ WWID_LIST[$WWIDS]="$1"
147+ ((WWIDS++))
148+}
149+
150+function get_dm_deps
151+{
152+ shift 3
153+ while [ -n "$1" -a -n "$2" ]; do
154+ MAJOR=$(echo $1 | tr -d '(,')
155+ MINOR=$(echo $2 | tr -d ')')
156+ UUID=`dmsetup info -c --noheadings -o uuid -j $MAJOR -m $MINOR 2> /dev/null`
157+ if [ -n "$UUID" ] ; then
158+ set_dm_wwid $UUID
159+ fi
160+ shift 2
161+ done
162+}
163+
164+function set_dm_wwid
165+{
166+ if [[ "$1" =~ ^part[[:digit:]]+-mpath- ]] ; then
167+ add_wwid "${1##part*-mpath-}"
168+ elif [[ "$1" =~ ^mpath- ]] ; then
169+ add_wwid "${1##mpath-}"
170+ else
171+ get_dm_deps `dmsetup deps -u $1`
172+ fi
173+}
174+
175+function set_wwid
176+{
177+ UUID=""
178+ if [[ "$1" =~ ^[[:digit:]]+:[[:digit:]]+$ ]] ; then
179+ MAJOR=${1%%:*}
180+ MINOR=${1##*:}
181+ UUID=`dmsetup info -c --noheadings -o uuid -j $MAJOR -m $MINOR 2> /dev/null`
182+ else
183+ UUID=`dmsetup info -c --noheadings -o uuid $1 2> /dev/null`
184+ fi
185+ if [ -n "$UUID" ] ; then
186+ set_dm_wwid $UUID
187+ else
188+ add_wwid "$1"
189+ fi
190+}
191+
192+function parse_args
193+{
194+ while [ -n "$1" ]; do
195+ case $1 in
196+ --enable)
197+ ENABLE=1
198+ shift
199+ ;;
200+ --disable)
201+ ENABLE=0
202+ shift
203+ ;;
204+ --allow)
205+ ENABLE=2
206+ if [ -n "$2" ]; then
207+ set_wwid $2
208+ shift 2
209+ else
210+ usage
211+ exit 1
212+ fi
213+ ;;
214+ --user_friendly_names)
215+ if [ -n "$2" ]; then
216+ FRIENDLY=$2
217+ shift 2
218+ else
219+ usage
220+ exit 1
221+ fi
222+ ;;
223+ --find_multipaths)
224+ if [ -n "$2" ]; then
225+ FIND=$2
226+ shift 2
227+ else
228+ usage
229+ exit 1
230+ fi
231+ ;;
232+ --with_module)
233+ if [ -n "$2" ]; then
234+ MODULE=$2
235+ shift 2
236+ else
237+ usage
238+ exit 1
239+ fi
240+ ;;
241+ --with_multipathd)
242+ if [ -n "$2" ]; then
243+ MULTIPATHD=$2
244+ shift 2
245+ else
246+ usage
247+ exit 1
248+ fi
249+ ;;
250+ --outfile)
251+ if [ -n "$2" ]; then
252+ OUTPUTFILE=$2
253+ HAVE_OUTFILE=1
254+ shift 2
255+ else
256+ usage
257+ exit 1
258+ fi
259+ ;;
260+ *)
261+ usage
262+ exit
263+ esac
264+ done
265+}
266+
267+function validate_args
268+{
269+ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$MODULE" ]; then
270+ echo "ignoring extra parameters on disable"
271+ FRIENDLY=""
272+ FIND=""
273+ MODULE=""
274+ fi
275+ if [ -n "$FRIENDLY" ] && [ "$FRIENDLY" != "y" -a "$FRIENDLY" != "n" ]; then
276+ echo "--user_friendly_names must be either 'y' or 'n'"
277+ exit 1
278+ fi
279+ if [ -n "$FIND" ] && [ "$FIND" != "y" -a "$FIND" != "n" ]; then
280+ echo "--find_multipaths must be either 'y' or 'n'"
281+ exit 1
282+ fi
283+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" ]; then
284+ SHOW_STATUS=1
285+ fi
286+ if [ -n "$MODULE" ] && [ "$MODULE" != "y" -a "$MODULE" != "n" ]; then
287+ echo "--with_module must be either 'y' or 'n'"
288+ exit 1
289+ fi
290+ if [ -n "$MULTIPATHD" ] && [ "$MULTIPATHD" != "y" -a "$MULTIPATHD" != "n" ]; then
291+ echo "--with_multipathd must be either 'y' or 'n'"
292+ exit 1
293+ fi
294+ if [ "$ENABLE" = 2 -a -z "$HAVE_OUTFILE" ]; then
295+ echo "Because --allow makes changes that cannot be automatically reversed,"
296+ echo "you must set --outfile when you set --allow"
297+ exit 1
298+ fi
299+}
300+
301+function add_blacklist_exceptions
302+{
303+ INDEX=0
304+ while [ "$INDEX" -lt "$WWIDS" ] ; do
305+ sed -i '/^blacklist_exceptions[[:space:]]*{/ a\
306+ wwid '"\"${WWID_LIST[$INDEX]}\""'
307+' $TMPFILE
308+ ((INDEX++))
309+ done
310+}
311+
312+umask 0077
313+
314+parse_args "$@"
315+
316+validate_args
317+
318+if [ ! -d "$MULTIPATHDIR" ]; then
319+ echo "/etc/multipath/ does not exist. failing"
320+ exit 1
321+fi
322+
323+rm $TMPFILE 2> /dev/null
324+echo "$DEFAULT_CONFIG" > $TMPFILE
325+if [ -f "$CONFIGFILE" ]; then
326+ cp $CONFIGFILE $TMPFILE
327+fi
328+
329+if grep -q "^blacklist[[:space:]]*{" $TMPFILE ; then
330+ HAVE_BLACKLIST=1
331+fi
332+
333+if grep -q "^blacklist_exceptions[[:space:]]*{" $TMPFILE ; then
334+ HAVE_EXCEPTIONS=1
335+fi
336+
337+if grep -q "^defaults[[:space:]]*{" $TMPFILE ; then
338+ HAVE_DEFAULTS=1
339+fi
340+
341+if [ -z "$MODULE" -o "$MODULE" = "y" ]; then
342+ if lsmod | grep -q "dm_multipath" ; then
343+ HAVE_MODULE=1
344+ else
345+ HAVE_MODULE=0
346+ fi
347+fi
348+
349+if [ "$MULTIPATHD" = "y" ]; then
350+ if /bin/systemctl status multipathd.service > /dev/null 2>&1 ; then
351+ HAVE_MULTIPATHD=1
352+ else
353+ HAVE_MULTIPATHD=0
354+ fi
355+fi
356+
357+if [ "$HAVE_BLACKLIST" = "1" ]; then
358+ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*devnode \"\.\?\*\"" ; then
359+ HAVE_DISABLE=1
360+ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*devnode \"\.\?\*\"" ; then
361+ HAVE_DISABLE=0
362+ fi
363+fi
364+
365+if [ "$HAVE_BLACKLIST" = "1" ]; then
366+ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*wwid \"\.\?\*\"" ; then
367+ HAVE_WWID_DISABLE=1
368+ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*wwid \"\.\?\*\"" ; then
369+ HAVE_WWID_DISABLE=0
370+ fi
371+fi
372+
373+if [ "$HAVE_DEFAULTS" = "1" ]; then
374+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*find_multipaths[[:space:]]*\(yes\|1\)" ; then
375+ HAVE_FIND=1
376+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*find_multipaths[[:space:]]*\(no\|0\)" ; then
377+ HAVE_FIND=0
378+ fi
379+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]]*\(yes\|1\)" ; then
380+ HAVE_FRIENDLY=1
381+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]]*\(no\|0\)" ; then
382+ HAVE_FRIENDLY=0
383+ fi
384+fi
385+
386+if [ -n "$SHOW_STATUS" ]; then
387+ if [ -z "$HAVE_DISABLE" -o "$HAVE_DISABLE" = 0 ]; then
388+ echo "multipath is enabled"
389+ else
390+ echo "multipath is disabled"
391+ fi
392+ if [ -z "$HAVE_FIND" -o "$HAVE_FIND" = 0 ]; then
393+ echo "find_multipaths is disabled"
394+ else
395+ echo "find_multipaths is enabled"
396+ fi
397+ if [ -z "$HAVE_FRIENDLY" -o "$HAVE_FRIENDLY" = 0 ]; then
398+ echo "user_friendly_names is disabled"
399+ else
400+ echo "user_friendly_names is enabled"
401+ fi
402+ if [ -n "$HAVE_MODULE" ]; then
403+ if [ "$HAVE_MODULE" = 1 ]; then
404+ echo "dm_multipath module is loaded"
405+ else
406+ echo "dm_multipath module is not loaded"
407+ fi
408+ fi
409+ if [ -z "$HAVE_MULTIPATHD" ]; then
410+ if /bin/systemctl status multipathd.service > /dev/null 2>&1 ; then
411+ HAVE_MULTIPATHD=1
412+ else
413+ HAVE_MULTIPATHD=0
414+ fi
415+ fi
416+ if [ "$HAVE_MULTIPATHD" = 1 ]; then
417+ echo "multipathd is running"
418+ else
419+ echo "multipathd is not running"
420+ fi
421+ exit 0
422+fi
423+
424+if [ -z "$HAVE_BLACKLIST" ]; then
425+ cat >> $TMPFILE <<- _EOF_
426+
427+blacklist {
428+}
429+_EOF_
430+fi
431+
432+if [ -z "$HAVE_DEFAULTS" ]; then
433+ cat >> $TMPFILE <<- _EOF_
434+
435+defaults {
436+}
437+_EOF_
438+fi
439+
440+if [ "$ENABLE" = 2 ]; then
441+ if [ "$HAVE_DISABLE" = 1 ]; then
442+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode \"\.\?\*\"/# devnode ".*"/' $TMPFILE
443+ fi
444+ if [ -z "$HAVE_WWID_DISABLE" ]; then
445+ sed -i '/^blacklist[[:space:]]*{/ a\
446+ wwid ".*"
447+' $TMPFILE
448+ elif [ "$HAVE_WWID_DISABLE" = 0 ]; then
449+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*wwid \"\.\?\*\"/ wwid ".*"/' $TMPFILE
450+ fi
451+ if [ "$HAVE_EXCEPTIONS" = 1 ]; then
452+ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ {/^[[:space:]]*wwid/ d}' $TMPFILE
453+ else
454+ cat >> $TMPFILE <<- _EOF_
455+
456+blacklist_exceptions {
457+}
458+_EOF_
459+ fi
460+ add_blacklist_exceptions
461+elif [ "$ENABLE" = 1 ]; then
462+ if [ "$HAVE_DISABLE" = 1 ]; then
463+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode \"\.\?\*\"/# devnode ".*"/' $TMPFILE
464+ fi
465+elif [ "$ENABLE" = 0 ]; then
466+ if [ -z "$HAVE_DISABLE" ]; then
467+ sed -i '/^blacklist[[:space:]]*{/ a\
468+ devnode ".*"
469+' $TMPFILE
470+ elif [ "$HAVE_DISABLE" = 0 ]; then
471+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*devnode \"\.\?\*\"/ devnode ".*"/' $TMPFILE
472+ fi
473+fi
474+
475+if [ "$FIND" = "n" ]; then
476+ if [ "$HAVE_FIND" = 1 ]; then
477+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*find_multipaths[[:space:]]*\(yes\|1\)/ find_multipaths no/' $TMPFILE
478+ CHANGED_CONFIG=1
479+ fi
480+elif [ "$FIND" = "y" ]; then
481+ if [ -z "$HAVE_FIND" ]; then
482+ sed -i '/^defaults[[:space:]]*{/ a\
483+ find_multipaths yes
484+' $TMPFILE
485+ CHANGED_CONFIG=1
486+ elif [ "$HAVE_FIND" = 0 ]; then
487+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*find_multipaths[[:space:]]*\(no\|0\)/ find_multipaths yes/' $TMPFILE
488+ CHANGED_CONFIG=1
489+ fi
490+fi
491+
492+if [ "$FRIENDLY" = "n" ]; then
493+ if [ "$HAVE_FRIENDLY" = 1 ]; then
494+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]]*\(yes\|1\)/ user_friendly_names no/' $TMPFILE
495+ CHANGED_CONFIG=1
496+ fi
497+elif [ "$FRIENDLY" = "y" ]; then
498+ if [ -z "$HAVE_FRIENDLY" ]; then
499+ sed -i '/^defaults[[:space:]]*{/ a\
500+ user_friendly_names yes
501+' $TMPFILE
502+ CHANGED_CONFIG=1
503+ elif [ "$HAVE_FRIENDLY" = 0 ]; then
504+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]]*\(no\|0\)/ user_friendly_names yes/' $TMPFILE
505+ CHANGED_CONFIG=1
506+ fi
507+fi
508+
509+if [ -f "$OUTPUTFILE" ]; then
510+ cp $OUTPUTFILE $OUTPUTFILE.old
511+ if [ $? != 0 ]; then
512+ echo "failed to backup old config file, $OUTPUTFILE not updated"
513+ exit 1
514+ fi
515+fi
516+
517+cp $TMPFILE $OUTPUTFILE
518+if [ $? != 0 ]; then
519+ echo "failed to copy new config file into place, check $OUTPUTFILE is still OK"
520+ exit 1
521+fi
522+
523+rm -f $TMPFILE
524+
525+if [ "$ENABLE" = 1 ]; then
526+ if [ "$HAVE_MODULE" = 0 ]; then
527+ modprobe dm_multipath
528+ fi
529+ if [ "$HAVE_MULTIPATHD" = 0 ]; then
530+ systemctl start multipathd.service
531+ fi
532+elif [ "$ENABLE" = 0 ]; then
533+ if [ "$HAVE_MULTIPATHD" = 1 ]; then
534+ systemctl stop multipathd.service
535+ fi
536+elif [ -n "$CHANGED_CONFIG" -a "$HAVE_MULTIPATHD" = 1 ]; then
537+ systemctl reload multipathd.service
538+fi
539diff --git a/multipath/mpathconf.8 b/multipath/mpathconf.8
540new file mode 100644
541index 0000000..4cd3267
542--- /dev/null
543+++ b/multipath/mpathconf.8
544@@ -0,0 +1,101 @@
545+.TH MPATHCONF 8 "June 2010" "" "Linux Administrator's Manual"
546+.SH NAME
547+mpathconf - A tool for configuring device-mapper-multipath
548+.SH SYNOPSIS
549+.B mpathconf
550+.RB [\| commands \|]
551+.RB [\| options \|]
552+.SH DESCRIPTION
553+.B mpathconf
554+is a utility that creates or modifies
555+.B /etc/multipath.conf.
556+It can enable or disable multipathing and configure some common options.
557+.B mpathconf
558+can also load the
559+.B dm_multipath
560+module, start and stop the
561+.B multipathd
562+daemon, and configure the
563+.B multipathd
564+service to start automatically or not. If
565+.B mpathconf
566+is called with no commands, it will display the current configuration.
567+
568+The default options for mpathconf are
569+.B --with_module
570+The
571+.B --with_multipathd
572+option is not set by default. Enabling multipathing will load the
573+.B dm_multipath
574+module but it will not immediately start it. This is so
575+that users can manually edit their config file if necessary, before starting
576+.B multipathd.
577+
578+If
579+.B /etc/multipath.conf
580+already exists, mpathconf will edit it. If it does not exist, mpathconf will
581+create a default file with
582+.B user_friendly_names
583+and
584+.B find_multipaths
585+set. To disable these, use the
586+.B --user_friendly_names n
587+and
588+.B --find_multipaths n
589+options
590+.SH COMMANDS
591+.TP
592+.B --enable
593+Removes any line that blacklists all device nodes from the
594+.B /etc/multipath.conf
595+blacklist section.
596+.TP
597+.B --disable
598+Adds a line that blacklists all device nodes to the
599+.B /etc/multipath.conf
600+blacklist section. If no blacklist section exists, it will create one.
601+.TP
602+.B --user_friendly_name \fP { \fBy\fP | \fBn\fP }
603+If set to \fBy\fP, this adds the line
604+.B user_friendly_names yes
605+to the
606+.B /etc/multipath.conf
607+defaults section. If set to \fBn\fP, this removes the line, if present. This
608+command can be used along with any other command.
609+.TP
610+.B --find_multipaths\fP { \fBy\fP | \fBn\fP }
611+If set to \fBy\fP, this adds the line
612+.B find_multipaths yes
613+to the
614+.B /etc/multipath.conf
615+defaults section. If set to \fBn\fP, this removes the line, if present. This
616+command can be used aldong with any other command.
617+.SH OPTIONS
618+.TP
619+.B --with_module\fP { \fBy\fP | \fBn\fP }
620+If set to \fBy\fP, this runs
621+.B modprobe dm_multipath
622+to install the multipath modules. This option only works with the
623+.B --enable
624+command. This option is set to \fBy\fP by default.
625+.TP
626+.B --with_multipathd { \fBy\fP | \fBn\fP }
627+If set to \fBy\fP, this runs
628+.B service multipathd start
629+to start the multipathd daemon on \fB--enable\fP,
630+.B service multipathd stop
631+to stop the multipathd daemon on \fB--disable\fP, and
632+.B service multipathd reload
633+to reconfigure multipathd on \fB--user_frindly_names\fP and
634+\fB--find_multipaths\fP.
635+This option is set to \fBn\fP by default.
636+.SH FILES
637+.BR /etc/multipath.conf
638+.SH "SEE ALSO"
639+.BR multipath.conf (5),
640+.BR modprobe (8),
641+.BR multipath (8),
642+.BR multipathd (8),
643+.BR service (8),
644+.SH AUTHOR
645+Benjamin Marzinski <bmarzins@redhat.com>
646--
6472.7.4
648