38f3e28d77
Use the output of git diff --full-index --binary anaconda-22.20.13-1..anaconda-23.19.10-1 from anaconda's git repository and fix-up merge conflicts.
493 lines
30 KiB
HTML
Executable File
493 lines
30 KiB
HTML
Executable File
|
|
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>Multipath and Anaconda — Anaconda 23.15 documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="top" title="Anaconda 23.15 documentation" href="index.html"/>
|
|
<link rel="next" title="pyanaconda" href="modules.html"/>
|
|
<link rel="prev" title="iSCSI and Anaconda" href="iscsi.html"/>
|
|
|
|
|
|
<script src="_static/js/modernizr.min.js"></script>
|
|
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav" role="document">
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-nav-search">
|
|
|
|
|
|
|
|
<a href="index.html" class="icon icon-home"> Anaconda
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
<ul class="current">
|
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction to Anaconda</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="boot-options.html">Anaconda Boot Options</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#installation-source">Installation Source</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-repo">inst.repo</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-stage2">inst.stage2</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-dd">inst.dd</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-multilib">inst.multilib</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#kickstart">Kickstart</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-ks">inst.ks</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-ks-sendmac">inst.ks.sendmac</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-ks-sendsn">inst.ks.sendsn</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#network-options">Network Options</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ip">ip</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#nameserver">nameserver</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#bootdev">bootdev</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ifname">ifname</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-dhcpclass">inst.dhcpclass</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#console-display-options">Console / Display Options</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#console">console</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-lang">inst.lang</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-geoloc">inst.geoloc</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-keymap">inst.keymap</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-cmdline">inst.cmdline</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-graphical">inst.graphical</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-text">inst.text</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-resolution">inst.resolution</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-vnc">inst.vnc</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-vncpassword">inst.vncpassword</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-vncconnect">inst.vncconnect</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-headless">inst.headless</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-xdriver">inst.xdriver</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-usefbx">inst.usefbx</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-sshd">inst.sshd</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#debugging-and-troubleshooting">Debugging and Troubleshooting</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-rescue">inst.rescue</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-updates">inst.updates</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-loglevel">inst.loglevel</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-syslog">inst.syslog</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-virtiolog">inst.virtiolog</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-zram">inst.zram</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#deprecated-options">Deprecated Options</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#method">method</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#repo-nfsiso">repo=nfsiso:...</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#dns">dns</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#netmask-gateway-hostname">netmask, gateway, hostname</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ip-bootif">ip=bootif</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ksdevice">ksdevice</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#blacklist-nofirewire">blacklist, nofirewire</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#removed-options">Removed Options</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#askmethod-asknetwork">askmethod, asknetwork</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#id5">serial</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#updates">updates</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#essid-wepkey-wpakey">essid, wepkey, wpakey</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ethtool">ethtool</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#gdb">gdb</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-mediacheck">inst.mediacheck</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ks-floppy">ks=floppy</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#display">display</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#utf8">utf8</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#noipv6">noipv6</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#upgradeany">upgradeany</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="kickstart.html">Anaconda Kickstart Documentation</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="kickstart.html#pwpolicy">pwpolicy</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="commit-log.html">Rules for commit messages</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="driverdisc.html">Brief description of DriverDisc version 3</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#devices-which-can-contain-dds">Devices which can contain DDs</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#what-can-be-updated-using-dds">What can be updated using DDs?</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#selecting-dd-manually">Selecting DD manually</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#automatic-driverdisc-detection">Automatic DriverDisc detection</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#ddv3-structure">DDv3 structure</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#initrd-overlay-driverdisc-image">Initrd overlay driverdisc image</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#firmware-and-module-update">Firmware and module update</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#package-installation">Package installation</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#summary">Summary</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="iscsi.html">iSCSI and Anaconda</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="iscsi.html#introduction">Introduction</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="iscsi.html#what-is-expected-from-anaconda">What is expected from Anaconda</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="iscsi.html#how-anaconda-handles-iscsi">How Anaconda handles iscsi</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="iscsi.html#libiscsi">Libiscsi</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="iscsi.html#debugging-iscsi-bugs">Debugging iSCSI bugs</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="iscsi.html#future-of-iscsi-in-anaconda">Future of iSCSI in Anaconda</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1 current"><a class="current reference internal" href="">Multipath and Anaconda</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="#what-is-expected-from-anaconda">What is expected from Anaconda</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="#how-anaconda-handles-multipath">How Anaconda handles multipath</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="#debugging-multipath-bugs">Debugging multipath bugs</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="#future-of-multipath-in-anaconda">Future of multipath in Anaconda</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="modules.html">pyanaconda</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="pyanaconda.html">pyanaconda package</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#subpackages">Subpackages</a><ul>
|
|
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.installclasses.html">pyanaconda.installclasses package</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.isys.html">pyanaconda.isys package</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.packaging.html">pyanaconda.packaging package</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.ui.html">pyanaconda.ui package</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#submodules">Submodules</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.addons">pyanaconda.addons module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.anaconda">pyanaconda.anaconda module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.anaconda_argparse">pyanaconda.anaconda_argparse module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.anaconda_log">pyanaconda.anaconda_log module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.bootloader">pyanaconda.bootloader module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.constants">pyanaconda.constants module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.constants_text">pyanaconda.constants_text module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.desktop">pyanaconda.desktop module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.errors">pyanaconda.errors module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.exception">pyanaconda.exception module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.flags">pyanaconda.flags module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.geoloc">pyanaconda.geoloc module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.i18n">pyanaconda.i18n module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.ihelp">pyanaconda.ihelp module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.image">pyanaconda.image module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.install">pyanaconda.install module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.installclass">pyanaconda.installclass module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.installinterfacebase">pyanaconda.installinterfacebase module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.iutil">pyanaconda.iutil module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.kexec">pyanaconda.kexec module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.keyboard">pyanaconda.keyboard module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.kickstart">pyanaconda.kickstart module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.localization">pyanaconda.localization module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.network">pyanaconda.network module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.nm">pyanaconda.nm module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.ntp">pyanaconda.ntp module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.orderedset">pyanaconda.orderedset module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.product">pyanaconda.product module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.progress">pyanaconda.progress module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.pwpolicy">pyanaconda.pwpolicy module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.queuefactory">pyanaconda.queuefactory module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.regexes">pyanaconda.regexes module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.rescue">pyanaconda.rescue module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.safe_dbus">pyanaconda.safe_dbus module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.screensaver">pyanaconda.screensaver module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.simpleconfig">pyanaconda.simpleconfig module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.startup_utils">pyanaconda.startup_utils module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.storage_utils">pyanaconda.storage_utils module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.text">pyanaconda.text module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.threads">pyanaconda.threads module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.timezone">pyanaconda.timezone module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.users">pyanaconda.users module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.version">pyanaconda.version module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.vnc">pyanaconda.vnc module</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda">Module contents</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="index.html">Anaconda</a>
|
|
</nav>
|
|
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
<div class="rst-content">
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
<ul class="wy-breadcrumbs">
|
|
<li><a href="index.html">Docs</a> »</li>
|
|
|
|
<li>Multipath and Anaconda</li>
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
|
|
<a href="_sources/multipath.txt" rel="nofollow"> View page source</a>
|
|
|
|
|
|
</li>
|
|
</ul>
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document">
|
|
|
|
<div class="section" id="multipath-and-anaconda">
|
|
<h1>Multipath and Anaconda<a class="headerlink" href="#multipath-and-anaconda" title="Permalink to this headline">¶</a></h1>
|
|
<table class="docutils field-list" frame="void" rules="none">
|
|
<col class="field-name" />
|
|
<col class="field-body" />
|
|
<tbody valign="top">
|
|
<tr class="field-odd field"><th class="field-name">Authors:</th><td class="field-body">Ales Kozumplik <<a class="reference external" href="mailto:akozumpl%40redhat.com">akozumpl<span>@</span>redhat<span>.</span>com</a>></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="section" id="introduction">
|
|
<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
|
|
<p>If there are two block devices in your /dev for which udev reports the same
|
|
‘ID_SERIAL’ then you can create a certain device mapper device which arbitrarily
|
|
uses those devices to access the physical device. And that is Multipath [1].</p>
|
|
<p>For instance, suppose there are:</p>
|
|
<div class="highlight-python"><div class="highlight"><pre>/dev/sda, with ID_SERIAL of 20090ef12700001d2, and
|
|
/dev/sdb, with the same ID_SERIAL.
|
|
</pre></div>
|
|
</div>
|
|
<p>Those are probably some adapters in the system that just connect your box to a
|
|
storage area network (SAN) somewhere. There are perhaps two cables, one for sda,
|
|
one for sdb, and if one of the cables gets cut the other can still transmit
|
|
data. Normally the system won’t recognize that sda and sdb have this special
|
|
relation to each other, but by creating a suitable device map using multipath
|
|
tools [2] we can create a DM device /dev/mapper/mpatha and use it for storing
|
|
and retrieving data.</p>
|
|
<p>The device mapper then automatically routes IO requests to /dev/mapper/mpatha to
|
|
either sda or sdb depending on the load of the line or network congestion on the
|
|
particular network etc.</p>
|
|
<p>The nomenclature I will use here is:
|
|
- ‘multipath device’ for the smart /dev/mapper/mpathX device.
|
|
- ‘multipath member device’ for the ‘/dev/sdX’ devices. Also ‘a path’.</p>
|
|
</div>
|
|
<div class="section" id="what-is-expected-from-anaconda">
|
|
<h2>What is expected from Anaconda<a class="headerlink" href="#what-is-expected-from-anaconda" title="Permalink to this headline">¶</a></h2>
|
|
<p>Anaconda is expected to:
|
|
- detect that there are multipath devices present
|
|
- coalesce all relevant (e.g. exclusiveDisks) multipath devices.
|
|
- only let the user interact with the multipath devices in filtering,</p>
|
|
<blockquote>
|
|
<div>cleardiskssel and partition screen, that is once we know ‘sdc’ and ‘sdd’ are
|
|
part of ‘mpathb’ show only ‘mpathb’ and never the paths.</div></blockquote>
|
|
<ul class="simple">
|
|
<li>install bootloader and boot from an mpath device</li>
|
|
<li>make it happen so all the multipath devices (carrying or not the root
|
|
filesystem) we used for installation are correctly coalesced in the booted
|
|
system. This is achieved by generating a suitable /etc/multipath.conf and
|
|
writing it into sysroot.</li>
|
|
<li>be able to refer to mpath devices from kickstart, either by name like ‘mpatha’
|
|
or by their id like ‘disk/by-id/scsi-20090ef12700001d2’</li>
|
|
</ul>
|
|
</div>
|
|
<div class="section" id="how-anaconda-handles-multipath">
|
|
<h2>How Anaconda handles multipath<a class="headerlink" href="#how-anaconda-handles-multipath" title="Permalink to this headline">¶</a></h2>
|
|
<p>To detect presence of multipath devices we rely on multipath tools. The same we
|
|
do for coalescing, see pyanaconda/storage/devicelibs/mpath.py, the file that
|
|
provides some abstraction from mpath tools. During the device scan we use the
|
|
‘multipath -d’ output to find out what devices are going to end up as multipath
|
|
members. The MultipathTopology object also enhances the multipath member’s udev
|
|
dictionaries with ‘ID_FS_TYPE’ set to ‘multipath_member’ (yes, this is a hack
|
|
surviving from the original mpath implementation, and righteous is he who
|
|
eradicates it). This information is picked up by DeviceTree when populating
|
|
itself. Meaning, if ‘sda’ and ‘sdb’ are multipath member devices DeviceTree
|
|
gives them MultipathMember format and creates one MultipathDevice for them (we
|
|
know its name from ‘multipath -d’). We end up with:</p>
|
|
<p>DiskDevice ‘sda’, format ‘MultipathMember’
|
|
DiskDevice ‘sdb’, format ‘MultipathMember’
|
|
MultipathDevice ‘mpatha’, parents are ‘sda’ and ‘sdb’.</p>
|
|
<p>From then on, Anaconda only deals with the MultipathDevice and generally leaves
|
|
anything with ‘MultipathMember’ format alone (understand, this is an inert
|
|
format that really is not there but we use it just to mark the device as
|
|
“useless beyond a multipath member”, kind of like MDRaidMember).</p>
|
|
<p>Partition happens over the multipath device and during the preinstallconfig step
|
|
/mnt/sysimage/etc/multipath.conf is created and filled with information about
|
|
the coalesced devices. This is handled in the Storage.write() method. It is
|
|
important this file and /etc/multipath/wwids (autogenerated by mpath tools)
|
|
make it to the sysimage before the dracut image is generated.</p>
|
|
</div>
|
|
<div class="section" id="debugging-multipath-bugs">
|
|
<h2>Debugging multipath bugs<a class="headerlink" href="#debugging-multipath-bugs" title="Permalink to this headline">¶</a></h2>
|
|
<p>Unlike with iSCSI, to reproduce a multipath bug one does not need the same
|
|
specific hardware as the reporter. Just found any box connected to a multipathed
|
|
SAN and you are fine (at the moment, connecting to the same iSCSI target through
|
|
its IPv4 and IPv6 address also produces a multipathed device).</p>
|
|
<p>On top of that, much of the necessary information is already included in the
|
|
anaconda logs or can be easily extracted from the reporter. The things to
|
|
particularly look at are:</p>
|
|
<ul class="simple">
|
|
<li>storage.log, the output around ‘devices to scan for multipath’ and ‘devices
|
|
post multipath scan’. The latter shows a triple with regular disks, disks
|
|
comprising multipath devices and partitions. This helps you quickly find out
|
|
what the target system is about.</li>
|
|
<li>this information is also in program.log’s calls to ‘multipath’ [3]. If mpath
|
|
devices are mysteriously appearing/disappearing between filtering and
|
|
partitioning screens look at those. ‘multipath -ll’ is called to display
|
|
currently coalesced mpath devices, ‘multipath -d’ is called to show the mpath
|
|
devices that would be coalesced if we ran ‘multipath’ now. This is exploited
|
|
by the device filtering screen.</li>
|
|
</ul>
|
|
</div>
|
|
<div class="section" id="future-of-multipath-in-anaconda">
|
|
<h2>Future of multipath in Anaconda<a class="headerlink" href="#future-of-multipath-in-anaconda" title="Permalink to this headline">¶</a></h2>
|
|
<p>Overall as of RHEL6.2, the shape of multipath in Anaconda is good and what’s
|
|
more important it is flexible enough to sustain new RFEs and bugs. Those are
|
|
however bugs that I expect to appear sometime soon:</p>
|
|
<ul class="simple">
|
|
<li>enable or disable mpath_friendly_names in kickstart. Disabling friendly names
|
|
just means the mpath devices are called by their wwid,
|
|
e.g. /dev/mapper/360334332345343234, not ‘/dev/mapper/mpathc’. This is
|
|
straightforward to implement.</li>
|
|
<li>extend support for mpath devices in kickstart in general. Currently mpath
|
|
devices should be accepted in most commands but I am sure there will be corner
|
|
cases. Difficulty medium.</li>
|
|
<li>[rawhide] stop extending the udev info dictionary with ‘ID_FS_TYPE’ and
|
|
‘ID_MPATH_NAME’. Doing it this way is asking for the trouble if a dictionary
|
|
of particular mpath device is reloaded from udev without running it through
|
|
the MultipathTopology object as it will miss those entries (and DeviceTree
|
|
depends on them a lot). Difficulty hard, but includes a lot of pleasant
|
|
refactoring.</li>
|
|
<li>Improve support for multipathing iSCSI devices. Someone might ask for it one
|
|
day (in fact, with the NIC bounding they already did), and it will make mpath
|
|
debugging possible on any virt machine with multiple virt NICs.</li>
|
|
</ul>
|
|
<table class="docutils footnote" frame="void" id="id1" rules="none">
|
|
<colgroup><col class="label" /><col /></colgroup>
|
|
<tbody valign="top">
|
|
<tr><td class="label">[1]</td><td><a class="reference external" href="http://akozumpl.fedorapeople.org/archive/Multipass.jpg">http://akozumpl.fedorapeople.org/archive/Multipass.jpg</a></td></tr>
|
|
</tbody>
|
|
</table>
|
|
<table class="docutils footnote" frame="void" id="id2" rules="none">
|
|
<colgroup><col class="label" /><col /></colgroup>
|
|
<tbody valign="top">
|
|
<tr><td class="label">[2]</td><td><a class="reference external" href="http://christophe.varoqui.free.fr/">http://christophe.varoqui.free.fr/</a></td></tr>
|
|
</tbody>
|
|
</table>
|
|
<table class="docutils footnote" frame="void" id="id3" rules="none">
|
|
<colgroup><col class="label" /><col /></colgroup>
|
|
<tbody valign="top">
|
|
<tr><td class="label">[3]</td><td>‘man 8 multipath’</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
<footer>
|
|
|
|
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
|
|
|
<a href="modules.html" class="btn btn-neutral float-right" title="pyanaconda" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
|
|
|
|
|
<a href="iscsi.html" class="btn btn-neutral" title="iSCSI and Anaconda" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
|
|
|
</div>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
© Copyright 2015, Red Hat, Inc..
|
|
</p>
|
|
</div>
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
var DOCUMENTATION_OPTIONS = {
|
|
URL_ROOT:'./',
|
|
VERSION:'23.15',
|
|
COLLAPSE_INDEX:false,
|
|
FILE_SUFFIX:'.html',
|
|
HAS_SOURCE: true
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="_static/js/theme.js"></script>
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.StickyNav.enable();
|
|
});
|
|
</script>
|
|
|
|
|
|
</body>
|
|
</html> |