Chapter 34. Storage
/dev/disk/by-path/
now accounts for NPIV paths
Previously, if two or more virtual host bus adapters (HBAs) were created on a single physical HBA, only a single link to the device was created in the
/dev/disk/by-path/
directory instead of one link for each path. As a consequence, creating a virsh
pool with virtual HBAs by using Fibre Channel N_Port ID Virtualization (NPIV) did not work correctly. With this update, symbolic links in /dev/disk/by-path/
are created correctly and are unique. Symbolic links in /dev/disk/by-path/
created by udev
for logical unit numbers (LUNs) connected through a physical Fibre Channel N_Port stay the same. (BZ#1266934)
When using thin-provisioning, buffered writes are no longer lost when the thin pool reaches capacity
Previously, a resize operation, even an automated one, attempted to flush outstanding I/O to the storage device prior to the resize being performed. Since there was no room in the thin pool, the I/O operations had to be errored first to allow the grow to succeed. As a consequence, if a thin-pool was filled to capacity, some writes could be lost even if the pool was being grown at that time. With this update, buffered writes are no longer lost to the thin-pool in the described situation. (BZ#1274676)
RAID migration now works correctly on the little-endian variant of IBM Power Systems
Previously, the
raid-migrate
command failed on the little-endian variant of IBM Power Systems if the stripe size was not specified, as the iprconfig
utility fell back on the current stripe size of the RAID and loaded it from the adapter without performing a proper endianness conversion The underlying source code has been modified to fix this bug, and RAID migration now works correctly on the little-endian variant of IBM Power Systems. (BZ#1297921)
The multipathd
daemon no longer reinstates unusable Implicit ALUA ghost paths.
Previously, the
multipathd
daemon automatically reinstated Implicit ALUA devices in the GHOST state, which were not usable. Multipath would continuously retry unusable devices, if they were the only ones present, instead of failing I/O operations. With this fix, multipathd
no longer reinstates unusable Implicit ALUA ghost paths. As a result, multipath no longer continually retries I/O operations when only unusuable Implicit ALU A paths are available. (BZ#1291406)
Multipath now includes 0 sized standby paths in the multipath device
Some arrays do not report their size on the standby ports, resulting in 0 sized devices. Previously, Multipath did not allow 0 sized devices to be added to a multipath device. As a result, Multipath did not add 0 sized standby paths to the multipath device. With this update, Multipath now allows the addition of 0 sized paths to a device. (BZ#1356651)
Multipath no longers modifies devices with a dm
table type of multipath
that were created by other programs
Previously, the multipath tools assumed that they were in charge of managing all
dm
devices with a multipath table. The multipathd
daemon would modify the tables of devices that were not created by the multipath tools. With this update, the multipath tools now operate only on devices whose dm
UUIDs start with mpath-
, which is the UUID prefix that multipath uses on all the devices it creates. As a result, multipath will no longer modify devices with a dm
table type of multipath
that were created by other programs. (BZ#1241528)
The multipathd
daemon now allows paths to be added to a new multipath device if it currently has no usable paths
Previously, when
multipathd
created a new multipath device it did not allow any more paths to be added until it saw the udev
change event for the multipath device being created, even if it created the device with no usable paths. If a multipath device was created with no usable paths, the udev
device manager would hang trying to get information on the device, and until it timed out no active paths could be added to the device. With this fix, multipathd
now allows paths to be added to a newly created multipath device if it currently has no usable paths. As a result, usable paths are immediately added to new devices that have none, and udev
does not hang. (BZ#1350931, BZ#1351430)
The multipathd
daemon no longer quits on encountering recoverable errors during startup
Perviously,
multipathd
would quit instead recovering when it hit recoverable errors during startup. With this fix, multipathd
now continues if it hits a recoverable error during startup and no longer quits. (BZ#1368501)
The multipathd
daemon now responds to failed removes with fail
rather than ok
Previously, the
multipathd
daemon did not retain the error status when removing a path or a map failed and would respond to failed removes with ok
. With this fix, multipathd
now responds to failed removes with fail
. (BZ#1272620)
Multipath no longer crashes when a uid_attribute is changed after a device is added and the device is then removed
Previously, if a path changed its WWID after being added to a multipath device, the
multipathd
daemon would create a new device. This led to the path being in both devices. As a consequence, if users changed the uid_attribute
after multipath devices were created and then removed the devices, multipathd
would try to access freed memory and crash. With this fix, multipathd
no longer allows the path's WWID to be changed while it is being used in a multipath device. As a result, multipathd
no longer crashes in this scenario. (BZ#1323429)
Multipath no longer occasionally fails while renaming devices
Previously, multipath was using an uninitialized variable in the function to rename a device. This would cause multipath to fail occasionally while renaming a device because the variable was set to an invalid value. With this fix, multipath now initializes this variable when renaming a device. (BZ#1363830)
Systemd no longer reports that the multipath.pid
file is not readable
Previously, systemd reported that it was unable to read the
multipathd.pid
file after the multipathd
command returned. This was because the multipathd
command was returning as soon as it forked the daemon, and the daemon was not writing the pid
file until after configuration was complete. With this fix, the multipathd
command now either waits until the multipathd
daemon has written the pid
file or 3 seconds have passed before returning, and the daemon writes the pid
file earlier in startup. As a result, systemd
no longer reports that the multipath.pid
file is not readable. (BZ#1253913)
Multipath now states that a path is not a valid argument
for paths that do not belong to block devices
Previously, if you used a path to something that is not a valid block device, multipath would tell you that it
requires a path to check
, which is unhelpful. This is because multipath considered anything that is not a block device path or major:minor number to be a multipath alias. With this fix, multipath will not treat fully qualified paths to anything that is not a block devices as a multipath alias. As a result, multipath will state the that path is not a valid argument
for paths that do not belong to block devices. (BZ#1319853)
All /dev/mapper
entries for multipath devices are now symbolic links created by udev
Previously, some
/dev/mapper
entries for multipath devices were symbolic links (symlinks) and some were block devices since multipath was not correctly waiting for udev
to create the /dev/mapper/
symlinks. With this fix, multipath now waits for udev
after each transaction. As a result, all /dev/mapper
entries for multipath devices are now symlinks created by udev
. (BZ#1255885)
New devices are now claimed by multipath as soon as multipath creates a multipath device on top of them
Previously, the first time multipath saw a device, it was not claimed by multipath in the
udev
rules since multipath will not claim a device in udev
unless the the WWID is in the /etc/multipath/wwids
file when processing the uevent
. With this fix, when multipath adds a new device WWID to the wwids
file, it will issue a change event on the device so it can claim it in the udev
rules. New devices are now claimed by multipath as soon as multipath creates a multipath device on top of them. (BZ#1299600)
Failures on some devices no longer keep multipath from creating other devices
Previously, the
multipath
command could fail to set up working devices because of failures on unrelated devices since it would quit early if it failed to get the information on any of the devices it was trying to create. With this fix, multipath no longer quits early if it fails to get information on some of the devices and failures on some devices no longer keep multipath from creating others. (BZ#1313324)
Multipath no longer misses uevent
messages and it now adds all appropriate devices
Previously, multipath did not always adding all the path devices correctly because it was not correctly checking for the existence of a
libudev
function to compile with support for resizing the uevent
socket. Because of this, multipath was not resizing the uevent
socket, and it could overflow. This caused multipath to miss necessary events. With this fix, multipath now checks for the proper libudev
function and compiles with support for resizing the uevent
socket. As a result, multipath no longer misses uevent
messages, and it now adds all appropriate devices. (BZ#1296979)
The kpartx
tool no longer returns before devices are created
Previously, by default the
kpartx
tool returned without waiting for devices to be created. This was a source of confusion for users who would expect the devices to exist immediately after kpartx
returned. With this update, kpartx
by default now waits until the devices are created before returning. (BZ#1299648)
Multiple calls to resize a device will each attempt to resize the device, and will correctly report the result
Previously, if
multipathd
failed to resize a device, it continued to think that the device had the new size. Subsequent calls to resize the device would report success and not resize the device because multipathd
thought that it had nothing left to do. With this fix, multipathd
now resets the device size to the original size if the resize fails. As a result, multiple calls to resize a device will each attempt to resize the device, and will correctly report the result. (BZ#1333492)
Multipath now correctly creates partition devices for 4k block devices with DOS partitions greater than 2TB
Previously, the
kpartx
tool created the wrong size partitions for 4K block size devices with DOS partitions greater than 2TB. This was because kpartx
stored the number of sectors and the multiplier needed to convert from the native sector size to 512B sectors in 32 bit unsigned integers. This causes a rollover if the two numbers multiplied together are larger than 2^32. with this fix, multipath now uses a 64 bit unsigned integer for the sector size multiplier variable, so the result will not roll over when the numbers are multiplied together. As a result, multipath now correctly creates the partitions. (BZ#1311463)
Multipath no longer removes partitions that are in use and restores partitions when a path is added back
Previously, if all paths to a device were lost, multipath would remove all the partitions that were not in use and never restore them. This occured because when multipath tried to remove a device it was removing partitions even if some of them were in use, and once they were removed it was never restoring them. With this fix, multipath now checks if any partition is in use before attempting a remove, and if the remove fails, it restores the partitions when a path is added back. (BZ#1292599)
The kpartx
tool no longer overwrites an existing partition device when a new device's name matches the existing one
Previously, when a potential new device's name matched an existing device's name,
kpartx
was silently overwriting the existing partition device with the new one. This would cause kpartx
devices to suddenly change where they were pointing if there was a naming clash. With this fix, kpartx
now checks the UUID to make sure that it is not overwriting a partition device that belongs to a different whole device. If there is a name clash, kpartx
will now fail with an error message instead of changing where an existing partition device is pointing to. (BZ#1283750)
The mpathconf --allow
command now creates a configuration file with the correct devices allowed for a node to boot
Previously, with certain setups the
mpathconf --allow
command created a configuration file that did not allow the node to boot. This occurred because mpathconf --allow
was removing existing entries from the blacklist_exceptions
section of the configuration file, which could cause some of the allowed devices to be blacklisted. It also printed duplicate WWID entries in the blacklist_exceptions
section. With this fix, mpathconf --allow
no longer removes the existing blacklist_exceptions
entries, and prints the WWID entries only once. This command now always creates a configuration file with the correct devices allowed for a node to boot. (BZ#1288660)
Multipath devices now get correctly identified as LVM physical volumes
Previously, LVM sometimes failed to recognize multipath PVs. This was because
multipathd
could be reloading a device at the same time that the creation uevent
for it arrived. The LVM udev
rules do not allow processing a device that is currently suspended, which happens during a reload. With this fix, multipathd
delays device reloads until after it has received the creation uevent
. (BZ#1304687)
The multipathd
daemon no longer prints that a path is up when it is actually down
Previously, the
multipathd
daemon could print that a path was up when it actually was down. If multipathd
detected that the path was down before it called the path checker, it never cleared the last path checker message and would print that out. With this fix, multipathd
now clears the path checker message if the path is determined to be down before the checker is run. (BZ#1280524)
multipathd
devices no longer fail to be created if udev
is processing a partition device at the same time
Previously,
multipathd
was unable to create a multipath device when udev
had a lock on the path device. This was because multipathd
grabbed an exclusive lock on the path devices while creating the multipath device and udev
grabs a shared lock on the path devices while processing its partition devices. With this fix multipathd
now grabs a shared lock as well, so that it can run at the same time as udev
. (BZ#1347769)
systemd
no longer prints warning messages about a missing dependency
Previously,
systemd
printed warning messages about a missing dependency when The multipathd
systemd service unit file required another unit file that was not available in the initramfs
. With this fix, the multipathd
unit file now uses Wants
instead of Requires
since it is able to operate without the blk-availability
unit file. (BZ#1269293)
The kpartx
generated devices now have the same partition number as the actual partition number
Previously, the
kpartx
generated device partition number did not match with the actual partition number. This was because kpartx
was not counting sun partitions with no sectors when determining the partition number. With this fix, kpartx
now counts sun partitions with no sectors when determining the partition number and the kpartx
generated devices now have the same partition number as the actual partition number. (BZ#1241774)
MTX no longer fails with large tape storage arrays
On systems configured with a large tape storage drive array, the MTX tool previously failed with an error. As a consequence, it was not possible to manage the tape storage. This update improves support for larger tape storage arrays, and MTX can now manage large tape storage as expected. (BZ#1298647)
Interferences between dmraid
and other device-mapper
subsystems no longer occur
Previously, the dmraid packages were compiled with an incorrect testing option. As a consequence, the
dmraid
tool inadvertently scanned all devices, including any other device-mapper
subsystems like LVM, which could interfere with those other subsystems and cause various failures while booting. With this update, testing mode is disabled in dmraid
, and all devices are not scanned at boot. As a result, interferences between dmraid
and other device-mapper subsystems no longer occur. (BZ#1348289)
systemd
no longer warns about a missing unit for dmraid-activation.service
after uninstalling dmraid
Prior to this update, the
/etc/systemd/system/sysinit.target.wants/dmraid-activation.service
symbolic link was left on the system after uninstalling the dmraid packages, which caused the systemd
service to warn about a missing unit for the dmraid-activation.service
. With this update, the aforementioned symbolic link is removed when uninstalling dmraid
. (BZ#1315644)
mdadm
no longer fails to stop an IMSM RAID array during a reshape
Due to a bug, attempts to stop an Intel Matrix Storage Manager (IMSM) RAID array during a reshape previously failed. The underlying source code has been modified to fix this bug, and the
mdadm
utility now stops the array correctly in the described situation. (BZ#1312837)
Using mdadm
to assign a hot spare to a degraded array while running I/O operations no longer fails
Previously, assigning a hot spare to a degraded array while running I/O operations on the MD Array could fail, and the
mdadm
utility returned error messages such as:
mdadm: /dev/md1 has failed so using --add cannot work and might destroy mdadm: data on /dev/sdd1. You should stop the array and re-assemble it
A patch has been applied to fix this bug, and adding a hot spare to a degraded array now completes as expected in the described situation. (BZ#1300579)
A degraded RAID1 array created with mdadm
is no longer shown as inactive after rebooting
Previously, a degraded RAID1 array that was created using the
mdadm
utility could be shown as an inactive RAID0 array after rebooting the system. With this update, the array is started correctly after the system is rebooted. (BZ#1290494)
Trying to reshape a RAID1 array containing a bitmap to a RAID0 array no longer corrupts the RAID1 array
Reshaping a RAID1 array containing a bitmap to a RAID0 array with the
mdadm
utility is not supported. Previously, when attempting to reshape a RAID1 array containing a bitmap to a RAID0 array, the operation was denied, but the RAID1 array was corrupted. With this update the reshape is denied, but the RAID1 array stays functional as expected. (BZ#1174622)
A race condition no longer occurs with IMSM RAID arrays running an mdadm
reshape operation
With Intel Matrix Storage Manager (IMSM) RAID arrays running an
mdadm
reshape operation, a race condition could previously allow a second reshape to be launched on the same array before the first operation was completed, and the reshaping operation did not complete correctly. With this update, the race condition no longer occurs, and a second reshape operation cannot be started before the first operation is completed. (BZ#1347762)
mdadm
can now assemble arrays that use device names over 15 characters long
Previously, the
mdadm
utility could terminate unexpectedly with a segmentation fault when trying to assemble an array that included a device with a device name longer than 15 characters. With this update, mdadm
assembles arrays correctly even when the arrays use device names longer than 15 characters. (BZ#1347749)