MPIO on Linux

UPDATE 2012-09-30:
URL changed to top level. This is the home to multipath-tools. No longer in the wiki.
Copying page here for reference.


Homepage of the upstream project used to drive the Device Mapper multipathing driver.
As multipathing rhymes with clustering, you might be interested in opensvc GPL clustering stack.

Contacts :


Contribute :

You can contribute code, editorial work and testing.
If you are in such position, you can also contribute hardware or hardware access.

git repository :

mkdir -p ~/scm/multipath-tools.upstream
cd ~/scm/multipath-tools.upstream

build :

On debian based systems :

apt-get install libreadline-dev libaio-dev libdevmapper-dev

Documentation :

Latest release :


incremental bugfixes :

None for now.

Announce :

2010-05-22 multipath-tools-0.4.9 shortlog :

  • Changes that may require your altering your config file :
    • rename hp_sw hwhandler
    • directio is now the default checker (async)
    • deprecated prio_callout keyword: now use prio/prio_args
    • move bindings file location to /etc
    • add ‘max_fds’ keyword
    • add ‘verbosity’ keyword
    • add ‘queue_without_daemon’ keyword
    • add ‘mode’, ‘uid’ and ‘gid’ keywords
    • add ‘fast_io_fail’ and ‘dev_loss_tmo’ keywords
    • add ‘checker’ keyword as alias to ‘path_checker’
  • Features
    • make kpartx deal with more than 256 minor numbers
    • fail/reinstate CLI commands disable/enable path checker
    • support multipath-capable cciss hardware, add cciss_tur checker
    • ‘show config’ output usable as a config file replacement
    • create read-only multipath if rw try failed
    • care about offlined paths
    • support resizing of multipath maps
    • kpartx removes its loop devices
    • support other load-balancing policies
    • add datacore prioritizer
    • add ‘-r’ multipath arg to force maps reload
    • add ‘show paths format’ cli command
    • add ‘show maps format’ cli command
    • add ‘show status’ cli command
    • add ‘show wildcards’ cli command
    • add ‘quit’ cli command
    • add ‘enablequeueing’ and ‘disablequeueing’ cli commands
  • Fixes
    • leaks plugged (virtualiron, suse, redhat work)
    • honour ALUA preference indicator
  • Developers changes :
    • no more prioritizer callouts. replaced by mem-pinned .so to avoid having to cache the callouts.
    • move checkers to mem-pinned .so too
    • allow arguments passing to prioritizers
  • Contributors :
    • Alex Zeffertt <>
    • Andrey Panin <>
    • Babu Moger <>
    • Benjamin Marzinski <>
    • Brian King <>
    • Bryn M.Reeves <>
    • Chandra Seetharaman <>
    • Charlie Brady <>
    • Chauhan, Vijay <>
    • Christophe Varoqui <>
    • Colin Watson <>
    • Dave Wysochanski <>
    • Guido Guenther <>
    • Guido Günther <>
    • Hannes Reinecke <>
    • Jim Lester <>
    • Kiyoshi Ueda <>
    • Konrad Rzeszutek <>
    • Martin Petermann <>
    • Matthew Kent <>
    • Mike Anderson <>
    • Mike Snitzer <>
    • Moger, Babu <>
    • Nikanth Karthikesan <>
    • Ritesh Raj Sarraf <>
    • Rumko <>
    • Stefan Bader <>
    • Stefan Haberland <>
    • Stefan Weinhuber <>
    • Yanqing Liu <>

Dependencies :

Linux kernel

  • 2.6.10-rc*-udm2 or later
  • 2.6.11-mm* or later
  • 2.6.12-rc1 or later

udev 050+
libdevmapper 1.2.38+

Known issues :

  • Update your config file : selector = ’round-robin 0′ (since 0.3.9)
  • If you relied on the ‘-D’ multipath command flag, please adapt (since 0.4.0).
  • The kernel feature ‘queue_if_no_path’ is known to have bugs (up to 2.6.10rc?-udm2).
  • The EMC checker has a known bug, fixed in the next release (up to 0.4.1).
  • The tools exits if /sys/fc_transport/target$h:$b:$t does not exists : not fair, fixed in next release (0.4.1 only).
  • failback doesn’t work (up to 0.4.5 included)
  • make rpm doesn’t work (0.4.5 only)

Previous releases :


Change logs :

full pre-0.4.5 ChangeLog
0.4.5+ changes are tracked through the git repository : here

2007-08-02 multipath-tools-0.4.8 shortlog :

  • Changes that may require your altering your config file :
    • seed cciss multipathing support for recent MSA hardware : warning, the cciss blacklist is not hardcoded anymore. Proliant owners should add it to your config file if you don’t want surprises.
    • pp_sgi renamed to pp_rdac : no behaviour change otherwise
    • Add ‘^dcssblk[0-9]*’ to default blacklist
    • Directio is now the default checker
    • Move id callouts to standardized /lib/udev
    • Adopt Suse udev rules
    • Add path group timeout handling (pg_timeout keyword)
    • Add blacklist exceptions
    • Almost every vendor updated the internal defaults for their hardware (‘show config’ cli command is your friend)
    • We support matching by SCSI revision now, in addition to Vendor and Product. No rev specified means all rev matches.
    • Blacklist entries and other strings in the config file are true regular expressions, not shell expansion syntax
  • Features
    • prio: add a prioritizer for HP storageworks arrays
    • prio: add a prioritizer for HDS modular arrays
    • checkers: asynchronous checker framework. Directio is the first and only user. Means no more checking loop blocking (while holding lock the cli tries to acquire for example).
    • checkers: EMC checker support for ALUA EMC arrays
    • checkers: add RDAC path checker
    • lib: pick up existing alias (if any) from current dm config
    • cli: add syntax auto-completion
    • cli: new command, show blacklist
    • doc: More man pages
    • kpartx: handling for SUN partition tables
    • kpartx: c-slice handling for BSD partition tables
    • kpartx: handling for extended partitions
    • kpartx: accept /dev/dm-* as arg
  • Fixes
    • checkers: add a timeout to SG_IO ioctls
    • checkers: read buffer size bumped to 4096 bytes (Infiniband)
    • checkers: handling CLARiiON I/O to inactive snapshot logical units
    • lib: support newer kernels sysfs layout (remove libsysfs dependency)
    • lib: we keep stale paths in multipaths in case they get back online, but multipathd had trouble dealing with device name change in this situation : fixed
    • lib: listen events from udev socket instead of netlink : proper serialization allows to remove wait_for_devnode_appearance() hacks
    • lib: fix user_friendly_names race leading to a mpathX being served multiple times
    • lib: fix bug limiting to <8 paths luns
    • lib: don’t discard paths with large uuid
    • lib: don’t segfault when no config file
    • kpartx: large file support
    • kpartx: fix partition calculations of DASD partitions
    • prio: fix ALUA for minor >256
  • Developers changes :
    • checkers: Checkers attached to different paths of a same multipath can share information through a context pointer in ‘struct multipath’
    • lib: use DM uuid ‘mpath-‘ prefix
    • kpartx: use DM uuid ‘part%d-‘ prefix

2006-03-13 multipath-tools-0.4.7 shortlog :

  • multipathd empowering
    • DM driving directly from the daemon, without resorting to multipath(8)
    • udev rules deprecation, as events are acted upon directly through uevent in the daemon. The kpartx rule remains though
  • multipathd CLI commands
    • enh : the CLI parser now accept unambiguous shortcuts, like ‘sho topo’ for ‘show topology’
    • new : ‘show config’ drops a config file as seen by the live daemon
    • new : ‘show maps stats’ drops some statistics about multipaths events
    • new : ‘show topology’, mimics the ‘multipath -ll’ output
    • new : ‘show map $map topology’, mimics the ‘multipath -ll $map’ output
    • enh : ‘reconfigure’ correctness issues fixed, scope extended
    • enh : ‘add/del map’ now apply to the DM live configuration too (!!caution, maps are really removed!!)
    • rem : ‘dump pathvec’, deprecated
  • prioritizers
    • new : netapp prioritizer
    • new : tpc prioritizer (SGI, …)
  • netlink uevent robustness
    • bigger receive buffer
    • uevent queueing and async dequeueing
  • configuration
    • rr_min_io can be put in ‘device’ and ‘multipath’ config blocks
    • internal defaults are now exhaustive
    • tweak defaults for HP, SGI, IBM, EMC, …
  • multipaths renaming through DM renames rather than remove/add cycles
  • logging
    • ‘multipathd -d’ now prints the date
    • overall output beautifying
  • drop the ‘path cache’ framework
  • kpartx
    • fixes to dos partition handler
    • new mac partition handler
  • make the tools work with DASD
  • blacklist
    • add per-device product-string blacklist
    • add a device blacklist
    • add a wwid blacklist
    • deprecate the ‘devnode_blacklist’ keyword ub favor of ‘blacklist’
  • adapt to libsysfs2 api, without breaking compat with libsysfs1
  • checkers
    • API rewrite
    • reduce allocation on the directio checking code path

2005-11-11 multipath-tools-0.4.6 shortlog :

  • fixes
  • add/del cli commands accept map names as param
  • new add ‘reinstate/fail’ cli commands
  • new add ‘suspend/resume’ cli commands
  • extended information display in ‘show map/paths’ cli commands
  • fix thread reaping logic
  • user friendly map names (mpath[0..n]) without alias defines
  • option to disable io queueing if no valid path after a delay
  • vendor/product as regexp in config file
  • set devmap uuid as multipath wwid
  • move hotplug logic to udev’s rules.d/
  • configlets now adds up or replace the hardcoded ones
  • ALUA prioritizer update
  • option to use priorities as weights in the round-robin scheduler
  • add the directio checker

2005-09-02 multipath-tools-0.4.5 shortlog :

  • multipathd keeps Device Mapper path status in sync with path checker status : proactive fail_path and reinstate_path
  • proactive path group re-enable, as soon as one path goes up
  • multipathd is now fully event driven :
    • NetLink uevents for kernels/distro that enables the feature
    • Hotplug
    • Unix socket messages
  • a Command Line Interface to drive and inspect the daemon
  • remove the multipath(8) cache file logic in favour of a multipathd<->multipath unix socket request/reply design
  • split multipath(8) listing option into
    • short-list (-l) : don’t fetch wwid, path checker status, priorities … fast
    • detailed-list (-ll) : refetch all info
  • the daemon asynchronous logger is now solid and avoid sending critical messages
  • daemon CLI command to reload the config file
  • path checking interval gets longer when the path is reliably up, resets to short as soon as a problem occur
  • daemon implements 3 path group failback methods :
    • manual
    • immediate : failback as soon as an (enabled && !active) PG gets the highest priority
    • defered : failback to the highest priority (enabled && !active) PG n seconds after the last PG priority order change
  • remove over-complicated and thread-confusing daemon initial clone() w/ private namespace
  • prioritizers official prefix is now mpath_prio_
  • multipath(8) displays PG priorities when available
  • new hp_sw checker. It’s a tri-state UP/DOWN/GHOST
  • new directio checker. Useful with DASD devices. May suplant readsector0 in the long run ?
  • stricter default blacklist regexps
  • new ‘-f’ multipath(8) flag to selectively suppress a multipath map, and its device-mapped partitions
  • alua prioritizer update, should work on x86
  • support for >2TB multipaths
  • claimed device detection : no more warning/error messages with paths pinned by mounted FS
  • option to use priorities as weights in the round-robin scheduler : for people who can’t wait for a qlen-based scheduler

2005-04-24 multipath-tools-0.4.4 shortlog :

  • 2 new path prioritizers : pp_alua and pp_emc
  • devmap_name can now filter by target_type (-t flag).
  • For example, no output if not ‘multipath’ type.
  • the daemon sets /proc/self/oom_adj to -17, hence is
  • protected from the oom killer. Watch out for leaks.
  • libdevmapper 1.01.01 or newer is now recquired
  • blacklist synthax is now regex based. Update your config files. The packaged templates are up to date.
  • you can now set wwid in the blacklist
  • multipathd gained a ‘-v’ flag to tune verbosity
  • daemon logging is now staged and asynchronous to avoid syslogd possible hangs
  • droped local klibc, libsysfs and libdevmapper
  • multipath caches path info. Cache expire in 5sec.
  • ‘multipath -l’ accepts a devname or dev_t filter

Comments are closed.