第34章 ストレージ
/dev/disk/by-path/
が NPIV パスに対応
以前は、2 つ以上の仮想ホストバスアダプター(HBA)が 1 つの物理 HBA に作成された場合は、パスごとに 1 つのリンクではなく、
/dev/disk/by-path/
ディレクトリーにデバイスへのリンクが 1 つだけ作成されていました。そのため、Fibre Channel N_Port ID Virtualization (NPIV)を使用して仮想 HBA で virsh
プールを作成すると正しく機能しませんでした。今回の更新で、/dev/disk/by-path/
のシンボリックリンクが正しく作成され、一意になりました。物理ファイバーチャネル N_Port 経由で接続された論理ユニット番号(LUN)用に udev
が作成した /dev/disk/by-path/
のシンボリックリンクは、同じままです。(BZ#1266934)
シンプロビジョニングを使用すると、シンプールが容量に達するとバッファーされた書き込みが失われなくなります。
以前のバージョンでは、サイズ変更操作は自動化された操作であっても、未処理の I/O をストレージデバイスにフラッシュしてからサイズ変更を実行していました。シンプールにはスペースがないため、I/O 操作を最初にエラーして、拡張を成功させる必要がありました。その結果、シンプールが容量にいっぱいになると、その時点でプールが増加しても一部の書き込みが失われる可能性があります。今回の更新で、上記の状況で、バッファーされた書き込みがシンプールに対して失われなくなりました。(BZ#1274676)
IBM Power Systems のリトルエンディアンバリアントで RAID 移行が正しく機能するようになりました。
以前は、RAID の現在のストライプサイズで
iprconfig
ユーティリティーがフォールバックし、適切なエンディアン性変換を実行せずにアダプターからロードするため、IBM Power Systems のリトルエンディアンバリアントで raid-migrate コマンドが失敗し、IBM Power Systems のリトルエンディアンバリアントで RAID の移行が正しく機能するようになりました。(BZ#1297921)
multipathd
デーモンは、使用できない Implicit ALUA ghost パスを再起動しなくなりました。
以前は、
multipathd
デーモンは GHOST 状態の Implicit ALUA デバイスを自動的に再利用していましたが、これは使用できていませんでした。マルチパスは、I/O 操作が失敗するのではなく、デバイスが存在する場合にのみ、使用できないデバイスを継続的に再試行しました。この修正により、multipathd
は使用できない Implicit ALUA ghost パスを再調整しなくなりました。その結果、マルチパスは、実行可能でない ALU パスのみが利用可能な場合に、I/O 操作を継続的に再試行しなくなりました。(BZ#1291406)
マルチパスに、マルチパスデバイスに 0 サイズのスタンバイパスが含まれるようになる
一部のアレイはスタンバイポートのサイズを報告しないため、サイズが 0 のデバイスになります。以前は、マルチパスでは、0 個のサイズのデバイスをマルチパスデバイスに追加できませんでした。その結果、Multipath は、マルチパスデバイスに 0 サイズのスタンバイパスを追加しませんでした。今回の更新で、Multipath が、デバイスへの 0 サイズパスを追加できるようになりました。(BZ#1356651)
マルチパスは、他のプログラムによって作成された dm
テーブルタイプの マルチパス
でデバイスを変更しなくなりました
マルチパスツールは、マルチパステーブルを使用してすべての
dm
デバイスを管理することを前提としていました。multipathd
デーモンは、マルチパスツールにより作成されていないデバイスのテーブルを変更していました。今回の更新で、マルチパスツールは、dm
UUID が mpath-
で始まるデバイスでのみ動作するようになりました。これは、マルチパスが作成するすべてのデバイスで使用する UUID 接頭辞です。その結果、マルチパスは、他のプログラムによって作成された dm
テーブルタイプの マルチパス
を持つデバイスを変更しなくなりました。(BZ#1241528)
multipathd
デーモンで、現在使用可能なパスがない場合に、パスを新しいマルチパスデバイスに追加できるようになりました。
以前は、
multipathd
が新しいマルチパスデバイスを作成すると、使用可能なパスのないデバイスを作成した場合でも、作成されたマルチパスデバイスの udev
変更イベントを確認するまで、さらなるパスを追加できませんでした。マルチパスデバイスが使用可能なパスを持たない状態で作成された場合、udev
デバイスマネージャーは、デバイスに関する情報の取得を試み、タイムアウトするまで、アクティブなパスをデバイスに追加できませんでした。この修正により、multipathd
では、現在使用可能なパスがない場合に、新しく作成されたマルチパスデバイスにパスを追加できるようになりました。その結果、使用可能なパスは、存在しない新しいデバイスに即座に追加され、udev
はハングしません。(BZ#1350931, BZ#1351430)
multipathd
デーモンは、起動時に回復可能なエラーが発生すると終了しなくなりました。
一方で、
multipathd
は、起動時に回復可能なエラーが発生すると回復不能なエラーが発生すると、代わりに終了していました。今回の修正により、起動時に復元可能なエラーに達した場合に multipathd
が続行され、終了しなくなりました。(BZ#1368501)
multipathd
デーモンは、ok
ではなく fail
で失敗した削除に応答するようになりました。
以前は、パスまたはマップの削除に失敗した場合に
multipathd
デーモンはエラーステータスを保持しておらず、ok
で失敗した削除に対応していました。今回の修正により、multipathd
が failed 削除に応答するようになりまし た
。(BZ#1272620)
デバイスの追加後に uid_attribute が変更され、デバイスが削除されるとマルチパスがクラッシュしなくなる
以前は、マルチパスデバイスに追加した後にパスが WWID を変更した場合、
multipathd
デーモンは新しいデバイスを作成していました。これにより、パスが両方のデバイスに置かれていました。その結果、ユーザーがマルチパスデバイスの作成後に uid_attribute
を変更し、デバイスを削除すると、multipathd
は解放されたメモリーにアクセスし、クラッシュしようとしました。この修正により、multipathd
では、マルチパスデバイスで使用されているときに、パスの WWID を変更できるようになりました。その結果、このシナリオで multipathd
がクラッシュしなくなりました。(BZ#1323429)
デバイスの名前変更中にマルチパスが失敗しなくなる
以前は、マルチパスは 関数で初期化されていない変数を使用してデバイスの名前を変更していました。これにより、変数が無効な値に設定されているため、デバイスの名前変更中にマルチパスが失敗することがありました。今回の修正により、デバイスの名前変更時にマルチパスがこの変数を初期化するようになりました。(BZ#1363830)
systemd が、multipath.pid
ファイルが読み取れないことを報告しなくなる
以前は、
multipathd
コマンドが返された後に、systemd が multipathd.pid
ファイルを読み取れないことを報告していました。これは、multipathd
コマンドがデーモンをフォークした直後に返され、設定が完了するまでデーモンが pid
ファイルを書きなかったことが原因でした。この修正により、multipathd
コマンドは、multipathd
デーモンが pid
ファイルを書き込むまで待機するか、3 秒が経過してから返すようになりました。また、デーモンは起動時に pid
ファイルを先に書き込むようになりました。その結果、systemd
は multipath.pid
ファイルが読み取り不可であることを報告しなくなりました。(BZ#1253913)
マルチパスは、パスがブロックデバイスに属してい ないパスの有効な引数
ではないことを示すようになりました。
以前は、有効なブロックデバイスではないものへのパスを使用した場合、マルチパスは、
チェックするパスが必要であると示唆して
いました。これは役に立ちません。これは、マルチパスデバイスパスまたは major:minor 番号でマルチパスエイリアスではないものとみなされるためです。この修正により、マルチパスは、ブロックデバイスではないものへの完全修飾パスをマルチパスエイリアスとして処理しません。その結果、マルチパスは、ブロックデバイスに属してい ないパスの有効な引数
ではないことを示します。(BZ#1319853)
マルチパスデバイスの /dev/mapper
エントリーはすべて、udev
が作成したシンボリックリンクになりました。
以前は、マルチパスデバイスの
/dev/mapper
エントリーの中にはシンボリックリンク(シンボリックリンク)であったものもあれば、マルチパスが /dev/mapper/
シンボリックリンクの作成を正しく待たなかったため、ブロックデバイスの一部でした。
今回の修正により、マルチパスは各トランザクションの後に udev
を待機するようになりました。その結果、マルチパスデバイスの /dev/mapper
エントリーはすべて、udev
により作成されるシンボリックリンクになりました。(BZ#1255885)
マルチパスが、その上にマルチパスデバイスを作成するとすぐに、新しいデバイスがマルチパスで要求されるようになりました。
以前は、マルチパスが初めてデバイスを確認したときに、
uevent
の処理時に WWID が /etc/multipath/wwids
ファイルにありない限り、 udev
ルールのマルチパスによりマルチパスが要求されませんでした。今回の修正により、マルチパスが新しいデバイスの WWID を wwids
ファイルに追加すると、デバイス上で変更イベントを発行し、udev
ルールで要求できるようになりました。マルチパスがマルチパスデバイスを作成するとすぐに、新しいデバイスがマルチパスにより要求されるようになりました。(BZ#1299600)
一部のデバイスで障害が発生すると、マルチパスが他のデバイスを作成しなくなる
以前は、関連のないデバイスで障害により、作成しようとしているデバイスの情報の取得に失敗した場合に早い段階で終了するため、multipath コマンドは、作業デバイスの設定に失敗する可能性がありました。今回の修正により、一部のデバイスに関する情報の取得に失敗した場合にマルチパスが早期に終了しなくなり、一部のデバイスで障害が発生すると、マルチパスが他のデバイスの作成を維持しなくなりました。(BZ#1313324)
マルチパスが uevent
メッセージを見逃さなくなり、適切なデバイスがすべて追加されるようになりました。
以前は、
uevent
ソケットのサイズ変更をサポートする libudev
関数の存在を正しくチェックしないため、マルチパスは常にすべてのパスデバイスを正しく追加しませんでした。このため、マルチパスは uevent
ソケットのサイズを変更せず、オーバーフローする可能性がありました。これにより、マルチパスが必要なイベントを見逃していました。この修正により、マルチパスは適切な libudev
機能をチェックし、uevent
ソケットのサイズ変更をサポートするサポートでコンパイルされるようになりました。その結果、マルチパスは uevent
メッセージを見逃さなくなり、適切なデバイスがすべて追加されるようになりました。(BZ#1296979)
デバイスが作成される前に kpartx
ツールが返さなくなる
以前は、デフォルトでは、デバイスが作成されるのを待たずに
kpartx
ツールが返されていました。これは、kpartx
が返された直後にデバイスが存在すると予想されるユーザーの混乱の原因でした。今回の更新で、kpartx
はデフォルトでデバイスが作成されるまで待機してから返すようになりました。(BZ#1299648)
デバイスのサイズを変更する複数の呼び出しは、それぞれデバイスのサイズを変更しようとし、結果を正しく報告します。
以前は、
multipathd
がデバイスのサイズ変更に失敗した場合、デバイスのサイズが新しいであると考え続けます。その後、デバイスのサイズを変更する呼び出しは成功を報告し、デバイスのサイズを変更しません。これは、multipathd
は何も実行していないと見なすためです。この修正により、multipathd
は、サイズ変更に失敗した場合に、デバイスサイズを元のサイズにリセットするようになりました。その結果、デバイスのサイズを変更する複数の呼び出しがそれぞれデバイスのサイズを変更しようとし、結果を正しく報告します。(BZ#1333492)
マルチパスが 2TB を超える DOS パーティションを持つ 4k ブロックデバイス用のパーティションデバイスを正しく作成
以前は、
kpartx
ツールは、DOS パーティションが 2TB を超える 4K ブロックサイズデバイスに誤ったサイズパーティションを作成しました。これは、kpartx
が、ネイティブセクターサイズから 512B セクターに変換するために必要なセクターの数と乗数を 32 ビット符号なし整数で格納していたためです。これにより、2 つの数字を乗算した 2^32 を超える場合にロールオーバーが発生します。今回の修正では、マルチパスはセクターサイズの乗数変数に 64 ビットの符号なし整数を使用するようになり、数値が一緒に乗算されると結果がロールオーバーされなくなりました。その結果、マルチパスがパーティションを正しく作成するようになりました。(BZ#1311463)
マルチパスは、使用中のパーティションを削除しなくなり、パスが追加されたときにパーティションを復元するようになりました。
以前は、デバイスへのパスがすべて失われた場合、マルチパスは使用されていないすべてのパーティションを削除し、復元しません。これは、マルチパスがデバイスの削除を試みると、一部のデバイスが使用中であってもパーティションを削除し、削除後にパーティションを復元しないために発生しました。今回の修正により、マルチパスは削除前にパーティションが使用されているかどうかを確認し、削除が失敗した場合は、パスが追加されたときにパーティションを復元するようになりました。(BZ#1292599)
新しいデバイス名が既存のパーティションデバイスと一致する場合に、kpartx
ツールが既存のパーティションデバイスを上書きしなくなりました。
以前は、新しいデバイス名が既存のデバイス名と一致すると、
kpartx
は新しいパーティションデバイスを警告なしで上書きしていました。これにより、kpartx
デバイスが名前の競合がある場合に、参照している場所が突然変更されました。今回の修正により、kpartx
は UUID をチェックして、デバイス全体に属するパーティションデバイスを上書きしないようになりました。名前の競合が発生した場合は、既存のパーティションデバイスが参照している場所を変更するのではなく、kpartx
がエラーメッセージと共に失敗するようになりました。(BZ#1283750)
mpathconf --allow コマンドは、ノードが起動できる正しいデバイスで設定ファイルを作成するようになりました。
以前は、特定の設定では mpathconf --allow コマンドが、ノードを起動できない設定ファイルを作成しました。これは、mpathconf --allow が設定ファイルの
blacklist_exceptions
セクションから既存のエントリーを削除していたために生じました。これにより、許可されたデバイスの一部がブラックリストに指定される可能性があります。また、blacklist_exceptions
セクションに重複する WWID エントリーも出力します。今回の修正により、mpathconf --allow は既存の blacklist_exceptions
エントリーを削除しなくなり、WWID エントリーを一度だけ出力するようになりました。このコマンドは、ノードの起動を許可する正しいデバイスを持つ設定ファイルを常に作成するようになりました。(BZ#1288660)
マルチパスデバイスが LVM 物理ボリュームとして正しく識別されるようになる
以前は、LVM がマルチパス PV を認識できないことがありました。これは、
multipathd
が作成 uevent
に到達するのと同時にデバイスをリロードできることが原因でした。LVM udev
ルールは、現在一時停止しているデバイスの処理を許可しません。これは、リロード中に発生します。今回の修正により、multipathd
は、作成 uevent
を受け取るまでデバイスのリロードを遅延するようになりました。(BZ#1304687)
multipathd
デーモンは、実際にダウンしているときにパスが稼働していることを出力しなくなりました。
以前は、
multipathd
デーモンは、実際に停止したときにパスが稼働していることを出力していました。multipathd
は、パスチェッカーを呼び出す前にパスがダウンしていることを検出した場合、最後のパスチェッカーメッセージを消去せず、それを出力しません。今回の修正により、チェッカーの実行前にパスがダウンしていると判断された場合、multipathd
はパスチェッカーメッセージをクリアするようになりました。(BZ#1280524)
udev
がパーティションデバイスを同時に処理している場合、multipathd
デバイスの作成に失敗しなくなりました。
以前は、
udev
がパスデバイスにロックがある場合、multipathd
はマルチパスデバイスを作成できませんでした。これは、multipathd
がマルチパスデバイスの作成時にパスデバイス上に排他的ロックを取得し、udev
がパーティションデバイスの処理中にパスデバイスの共有ロックを取得するためです。今回の修正により、multipathd
は共有ロックも取得し、udev
と同時に実行できるようになりました。(BZ#1347769)
systemd
が、依存関係の欠落に関する警告メッセージを出力しなくなりました。
以前は、
multipathd
systemd
サービスユニットファイルに initramfs
で利用できない別のユニットファイルが必要な場合、systemd は依存関係の欠落に関する警告メッセージを出力していました。今回の修正により、multipathd
ユニットファイルは、blk-availability
ユニットファイルなしで操作できるため、Requires ではなく Wants を使用するようになりました。(BZ#1269293)
kpartx
で生成されたデバイスのパーティション番号は、実際のパーティション番号と同じになりました。
以前は、
kpartx
が生成したデバイスパーティション番号は、実際のパーティション番号と一致しませんでした。これは、パーティション番号を決定する際に kpartx
がセクターのない sun パーティションをカウントしていなかったためです。今回の修正により、kpartx
はパーティション番号を決定する際にセクターのない sun パーティションをカウントし、kpartx
で生成されたデバイスのパーティション番号が実際のパーティション番号と同じになりました。(BZ#1241774)
MTX が大きなテープストレージアレイで失敗しなくなる
大規模なテープストレージドライブアレイで設定されたシステムでは、MTX ツールは以前はエラーを出して失敗しました。そのため、テープストレージを管理できませんでした。今回の更新で、より大きなテープストレージアレイへの対応が改善され、MTX が期待どおりに大きなテープストレージを管理できるようになりました。(BZ#1298647)
dmraid
およびその他の デバイスマッパー
サブシステムとの間の相互運用性が発生しなくなりました。
以前は、dmraid パッケージが誤ったテストオプションでコンパイルされていました。そのため、
dmraid
ツールは、LVM などの他の デバイスマッパーサブシステムなど、すべてのデバイス
を誤ってスキャンします。これにより、他のサブシステムに干渉し、起動中にさまざまな障害が発生する可能性があります。今回の更新で、dmraid
でテストモードが無効になり、起動時にすべてのデバイスがスキャンされなくなりました。その結果、dmraid
と他のデバイスマッパーサブシステム間の干渉が発生しなくなりました。(BZ#1348289)
dmraidのアンインストール後に、systemd
が dmraid-activation.service
の不足しているユニットについて警告しなくなりました。
今回の更新以前は、dmraid パッケージをアンインストールした後、
/etc/systemd/system/sysinit.target.wants/dmraid-activation.service
シンボリックリンクがシステムに残されていました。これにより、systemd
サービスが dmraid -activation.service
の不足しているユニットについて警告していました。今回の更新で、dmraid
をアンインストールすると、前述のシンボリックリンクが削除されました。(BZ#1315644)
再成形中に mdadm
が IMSM RAID アレイの停止に失敗しなくなる
バグにより、以前は再成形中に Intel Matrix Storage Manager (IMSM) RAID アレイを停止しようと試みます。このバグを修正するために基礎となるソースコードが変更され、上記の状況で
mdadm
ユーティリティーがアレイを正しく停止するようになりました。(BZ#1312837)
I/O 操作の実行中に、mdadm
を使用してパフォーマンスが低下したアレイにホットスペアを割り当てることがなくなりました。
以前は、MD アレイで I/O 操作の実行中にパフォーマンスが低下したアレイにホットスペアを割り当てることができ、
mdadm
ユーティリティーは次のようなエラーメッセージを返していました。
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
このバグを修正するためのパッチが適用され、上記の状況で、パフォーマンスが低下したアレイにホットスペアを追加するようになりました。(BZ#1300579)
mdadm
で作成されたパフォーマンスが低下した RAID1 アレイが、再起動後に非アクティブと表示されなくなる
以前は、
mdadm
ユーティリティーを使用して作成されたパフォーマンスが低下した RAID1 アレイは、システムを再起動した後に非アクティブな RAID0 アレイとして表示できました。この更新により、システムの再起動後にアレイが正しく起動します。(BZ#1290494)
RAID0 アレイへのビットマップを含む RAID1 アレイを再成形しても RAID1 アレイが破損しなくなりました。
mdadm
ユーティリティーを使用した RAID0 アレイへのビットマップを含む RAID1 アレイの再成形はサポートされていません。以前は、RAID0 アレイにビットマップを含む RAID1 アレイを再成形しようとすると、操作は拒否されていましたが、RAID1 アレイが破損していました。今回の更新で、再成形が拒否されましたが、RAID1 アレイは期待どおりに機能し続けます。(BZ#1174622)
mdadm
reshape 操作を実行している IMSM RAID アレイで競合状態が発生しなくなりました。
以前は、
mdadm
reshape 操作を実行している Intel Matrix Storage Manager (IMSM) RAID アレイを使用すると、1 番目の操作が完了するまで 2 番目の再成形を同じアレイで起動でき、再成形操作が正しく完了しませんでした。今回の更新により、競合状態が発生しなくなり、最初の操作が完了するまで 2 つ目の再成形操作を開始できなくなりました。(BZ#1347762)
mdadm
が、15 文字を超えるデバイス名を使用するアレイをアセンブルできるようになりました。
以前は、15 文字を超えるデバイス名を持つデバイスを含むアレイをアセンブルしようとすると、
mdadm
ユーティリティーがセグメンテーション違反で予期せず終了する可能性がありました。今回の更新により、mdadm
は、アレイが 15 文字を超えるデバイス名を使用する場合でもアレイを正しくアセンブルするようになりました。(BZ#1347749)