Menu Close

ストレージデバイスの管理

Red Hat Enterprise Linux 9

Red Hat Enterprise Linux 9 における単一ノードストレージの導入と設定

概要

本書は、Red Hat Enterprise Linux 9 でストレージデバイスを効果的に管理する方法を説明します。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社の CTO、Chris Wright のメッセージ を参照してください。

Red Hat ドキュメントへのフィードバックの提供

ご意見ご要望をお聞かせください。ドキュメントの改善点はございませんか。

  • 特定の部分についての簡単なコメントをお寄せいただく場合は、以下をご確認ください。

    1. ドキュメントの表示が Multi-page HTML 形式になっていて、ドキュメントの右上隅に Feedback ボタンがあることを確認してください。
    2. マウスカーソルで、コメントを追加する部分を強調表示します。
    3. そのテキストの下に表示される Add Feedback ポップアップをクリックします。
    4. 表示される手順に従ってください。
  • Bugzilla を介してフィードバックを送信するには、新しいチケットを作成します。

    1. Bugzilla の Web サイトに移動します。
    2. Component で Documentation を選択します。
    3. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも記入してください。
    4. Submit Bug をクリックします。

第1章 利用可能なストレージオプションの概要

Red Hat Enterprise Linux 8 では、複数のローカル、リモート、およびクラスターベースのストレージオプションがあります。

ローカルストレージは、ストレージデバイスがシステムにインストールされているか、またはシステムに直接接続されていることを意味します。

リモートストレージでは、LAN、インターネット、またはファイバーチャネルネットワークを介してデバイスにアクセスします。以下の高レベルの Red Hat Enterprise Linux ストレージ図では、さまざまなストレージオプションを説明します。

図1.1 Red Hat Enterprise Linux ストレージダイアグラムの概要

RHEL ストレージダイアグラム (概要)

1.1. ローカルストレージの概要

Red Hat Enterprise Linux 9 には、ローカルストレージオプションが複数含まれています。

基本的なディスク管理:

partedfdisk を使用して、ディスクパーティションの作成、変更、削除、および表示を行うことができます。パーティショニングレイアウトの標準は以下のようになります。

マスターブートレコード (MBR)
BIOS ベースのコンピューターで使用されます。プライマリーパーティション、拡張パーティション、および論理パーティションを作成できます。
GUID パーティションテーブル (GPT)
GUID (Globally Unique identifier) を使用し、一意のディスクおよびパーティション GUID を提供します。

パーティションを暗号化するには、LUKS (Linux Unified Key Setup-on-disk-format) を使用します。パーティションを暗号化する場合は、インストール時にオプションを選択し、パスフレーズを入力させるプロンプトを表示します。このパスフレーズにより、暗号化キーのロックが解除されます。

ストレージ使用オプション
NVDIMM (Non-Volatile Dual In-line Memory Modules) の管理
メモリーとストレージの組み合わせです。システムに接続した NVDIMM デバイスで、さまざまな種類のストレージを有効にして管理できます。
ブロックストレージ管理
各ブロックに固有の識別子を持つブロックの形式でデータを保存します。
ファイルストレージ
データは、ローカルシステムのファイルレベルに保存されます。これらのデータは、XFS (デフォルト) または ext4 を使用してローカルでアクセスしたり、NFS と SMB を使用してネットワーク上でアクセスできます。
論理ボリューム
論理ボリュームマネージャー (LVM)

物理デバイスから論理デバイスを作成します。論理ボリューム (LV) は、物理ボリューム (PV) とボリュームグループ (VG) の組み合わせです。LVM の設定には以下が含まれます。

  • ハードドライブから PV の作成
  • 物理ボリュームからボリュームグループの作成
  • ボリュームグループから論理ボリュームを作成すると、マウントポイントが論理ボリュームに割り当てられます。
VDO (Virtual Data Optimizer)

重複排除、圧縮、およびシンプロビジョニングを使用して、データの削減に使用されます。VDO の下で論理ボリュームを使用すると、次のことができます。

  • VDO ボリュームの拡張
  • 複数のデバイスにまたがる VDO ボリューム
ローカルファイルシステム
XFS
デフォルトの RHEL ファイルシステム。
Ext4
レガシーファイルシステム。
Stratis
テクノロジープレビューとして利用可能になりました。Stratis は、高度なストレージ機能に対応する、ユーザーとカーネルのハイブリッドローカルストレージ管理システムです。

1.2. リモートストレージの概要

Red Hat Enterprise Linux 8 で利用可能なリモートストレージオプションは次のとおりです。

ストレージの接続オプション
iSCSI
RHEL 9 は targetcli ツールを使用して、iSCSI ストレージの相互接続を追加、削除、表示、監視します。
ファイバーチャンネル (FC)

RHEL 9 は、以下のネイティブファイバーチャネルドライバーを提供します。

  • lpfc
  • qla2xxx
  • Zfcp
NVMe (Non-volatile Memory Express)

ホストソフトウェアユーティリティーがソリッドステートドライブと通信できるようにするインターフェース。次の種類はファブリックトランスポートを使用して、NVMe over fabrics を設定します。

  • RDMA (Remote Direct Memory Access) を使用する NVMe over fabrics
  • ファイバーチャネル (FC) を使用した NVMe over fabrics
Device Mapper Multipath (DM Multipath)
サーバーノードとストレージアレイ間の複数の I/O パスを 1 つのデバイスに設定できます。これらの I/O パスは、個別のケーブル、スイッチ、コントローラーを含むことができる物理的な SAN 接続です。
ネットワークファイルシステム
  • NFS
  • SMB

1.3. GFS2 ファイルシステムの概要

Red Hat Global File System 2 (GFS2) ファイルシステムは、64 ビットの対称クラスターファイルシステムで、共有名前空間を提供し、一般的なブロックデバイスを共有する複数のノード間の一貫性を管理します。GFS2 ファイルシステムは、ローカルファイルシステムに可能な限り近い機能セットを提供すると同時に、ノード間でクラスターの完全な整合性を強制することを目的としています。これを実現するため、ノードはファイルシステムリソースにクラスター全体のロックスキームを使用します。このロックスキームは、TCP/IP などの通信プロトコルを使用して、ロック情報を交換します。

場合によっては、Linux ファイルシステム API では、GFS2 のクラスター化された性質を完全に透過的にすることができません。たとえば、GFS2 で POSIX ロックを使用しているプログラムは、GETLK の使用を回避する必要があります。なぜなら、クラスター環境では、プロセス ID が、クラスター内の別のノードに対するものである可能性があるためです。ただし、ほとんどの場合、GFS2 ファイルシステムの機能は、ローカルファイルシステムのものと同じです。

Red Hat Enterprise Linux Resilient Storage Add-On は GFS2 を提供します。GFS2 が必要とするクラスター管理を提供するために Red Hat Enterprise Linux High Availability Add-On によって異なります。

gfs2.ko カーネルモジュールは GFS2 ファイルシステムを実装しており、GFS2 クラスターノードにロードされます。

GFS2 環境を最大限に利用するためにも、基礎となる設計に起因するパフォーマンス事情を考慮することが重要です。GFS2 では、ローカルファイルシステムと同様、ページキャッシュで、頻繁に使用されるデータのローカルキャッシングを行ってパフォーマンスを向上します。クラスターのノード間で一貫性を維持するために、glock ステートマシンでキャッシュ制御が提供されます。

1.4. Gluster Storage の概要

Red Hat Gluster Storage (RHGS) は、クラスターにデプロイできるソフトウェア定義のストレージプラットフォームです。これは、複数のサーバーから単一のグローバル名前空間に、ディスクストレージリソースを統合します。GlusterFS は、クラウドおよびハイブリッドのソリューションに適したオープンソースの分散ファイルシステムです。

ボリュームは GlusterFS のベースを形成し、異なる要件を提供します。各ボリュームはブリックのコレクションです。これは、信頼されたストレージプールのサーバーのエクスポートディレクトリーで表されるストレージの基本単位です。

以下の GlusterFS ボリュームのタイプを使用することができます。

  • 分散 GlusterFS ボリューム は、各ファイルが 1 つのブリックに格納され、ファイルを異なるブリック間で共有できないデフォルトのボリュームです。
  • レプリケートされた GlusterFS ボリューム タイプはユーザーデータを複製するため、1 つのブリックが失敗してもデータは引き続きアクセス可能となります。
  • 分散されレプリケートされた GlusterFS ボリューム は、多数のシステムにレプリカを分散するハイブリッドボリュームです。これは、ストレージのスケーラビリティーと高い信頼性が重要な環境に適しています。

1.5. Ceph Storage の概要

Red Hat Ceph Storage (RHCS) はスケーラブルでオープンなソフトウェア定義のストレージプラットフォームで、Ceph ストレージシステムの最も安定したバージョンと、Ceph 管理プラットフォーム、デプロイメントユーティリティー、サポートサービスを組み合わせたものです。

Red Hat Ceph Storage は、クラウドインフラストラクチャーおよび Web スケールオブジェクトストレージ用に設計されています。Red Hat Ceph Storage クラスターは、以下のタイプのノードで構成されます。

Red Hat Ceph Storage Ansible 管理ノード

このタイプのノードは、以前のバージョンの Red Hat Ceph Storage に行われた従来の Ceph 管理ノードとして機能します。このタイプのノードでは、以下の機能が提供されます。

  • ストレージクラスターの一元管理
  • Ceph 設定ファイルおよびキー
  • 必要に応じて、セキュリティー上の理由からインターネットにアクセスできないノードに Ceph をインストールするためのローカルリポジトリー
ノードの監視

各モニターノードは、クラスターマップのコピーを維持する monitor デーモン (ceph-mon) を実行します。クラスターマップにはクラスタートポロジーが含まれます。Ceph クラスターに接続するクライアントは、モニターからクラスターマップの現在のコピーを取得します。これにより、クライアントがクラスターへのデータの読み取りおよび書き込みが可能になります。

重要

Ceph は 1 つのモニターで実行できますが、実稼働クラスターで高可用性を確保するためには、Red Hat は少なくとも 3 つのモニターノードを持つデプロイメントのみをサポートします。Red Hat は、750 個の OSD を超えるストレージクラスターに合計 5 つの Ceph Monitor をデプロイすることを推奨します。

OSD ノード

各 Object Storage Device (OSD) ノードは Ceph OSD デーモン (ceph-osd) を実行し、ノードに割り当てられている論理ディスクと相互作用します。Ceph は、この OSD ノードにデータを保存します。

Ceph は、非常に少数の OSD ノード (デフォルトは 3) で実行できますが、実稼働クラスターは、ストレージクラスターで中程度のスケール (たとえば OSD が 50 個) で始まります。理想的には、Ceph クラスターに複数の OSD ノードがあり、CRUSH マップを作成して分離された障害ドメインを許可します。

MDS ノード
各 Metadata Server (MDS) ノードは、Ceph ファイルシステム (CephFS) に保存されているファイルに関連する MDS デーモン (ceph-mds) を実行します。MDS デーモンは、共有クラスターへのアクセスも調整します。
Object Gateway ノード
Ceph Object Gateway ノードは、Ceph RADOS Gateway デーモン (ceph-radosgw) を実行し、Ceph Storage クラスターへの RESTful ゲートウェイを使用するアプリケーションを提供する librados 上に構築されたオブジェクトストレージインターフェースです。Ceph Object Gateway は、以下の 2 つのインターフェースをサポートします。
S3
Amazon S3 RESTful API の大規模なサブセットと互換性のあるインターフェースでオブジェクトストレージ機能を提供します。
Swift
OpenStack Swift API の大規模なサブセットと互換性のあるインターフェースでオブジェクトストレージ機能を提供します。

関連情報

第2章 ディスクパーティション

ディスクを 1 つ以上の論理領域に分割するには、ディスクのパーティション設定ユーティリティーを使用します。これにより、パーティションごとに個別の管理が可能になります。

2.1. パーティションの概要

ハードディスクは、パーティションテーブルの各ディスクパーティションの場所とサイズに関する情報を保存します。パーティションテーブルからの情報を使用して、オペレーティングシステムは各パーティションを論理ディスクとして扱います。ディスクパーティション設定の利点は以下のとおりです。

  • 物理ボリュームの管理の超過の可能性を下げる
  • 十分なバックアップがあることを確認する。
  • 効率的なディスク管理を実現

2.2. ディスクのパーティション変更前の留意事項

ディスクパーティションの作成、削除、またはサイズ変更前に、以下の点を考慮してください。

デバイスでは、パーティションテーブルのタイプによって、個々のパーティションの最大数とサイズが決まります。

パーティションの最大数:

  • マスターブートレコード(MBR) パーティションテーブルでフォーマットしたデバイスには、以下を設定できます。

    • 最大 4 つのプライマリーパーティション。
    • 最大 3 つのプライマリーパーティション、1 つの拡張パーティション

      • 拡張パーティション内の複数の論理パーティション
  • GUID パーティションテーブル(GPT) でフォーマットしたデバイスには、以下を設定できます。

    • parted ユーティリティーを使用している場合は、最大 128 パーティション。

      • GPT 仕様では、パーティションテーブルの予約サイズを増やすことで、より多くのパーティションを作成できますが、parted ユーティリティーは 128 パーティションに必要な領域を制限します。

パーティションの最大サイズ:

  • マスターブートレコード(MBR) パーティションテーブルでフォーマットしたデバイスの最大サイズは 2 TiB です。
  • GUID パーティションテーブル(GPT) でフォーマットしたデバイスの最大サイズは 8 ZiB です。

parted ユーティリティーを使用すると、パーティションのサイズを指定する際に、異なる接尾辞が複数あります。

  • MiB、GiB、または TiB

    • サイズは 2 のべき乗で表示されます。
    • パーティションの開始点は、サイズが指定する正確なセクターに調整されます。
    • 終了点は、指定されたサイズから 1 セクターを引いたサイズに調整されます。
  • MB、GB、または TB:

    • サイズは 10 のべき乗で表示されます。
    • 開始点と終了点は、指定されたユニットの半分内に調整されます。たとえば、接尾辞 MB を使用する場合は gitops500KB になります。
注記

このセクションでは、IBM Z アーキテクチャーに固有の DASD パーティションテーブルを説明しません。

2.3. パーティションテーブルの種類の比較

デバイスでパーティションを有効にするには、さまざまな種類のパーティションテーブルでブロックデバイスをフォーマットします。以下の表は、ブロックデバイスに作成可能なさまざまな種類のパーティションテーブルのプロパティーを比較します。

表2.1 パーティションテーブルの種類

パーティションテーブルパーティションの最大数パーティションの最大サイズ

マスターブートレコード (MBR)

4 つのプライマリーパーティション、または 3 つのプライマリーパーティションと、12 の論理パーティションを持つ 1 拡張パーティション

2TiB

GUID パーティションテーブル (GPT)

128

8ZiB

2.4. MBR ディスクパーティション

パーティションテーブルは、ファイルシステムまたはユーザーデータの前にディスクの先頭に保管されます。より明確な例として、パーティションテーブルは以下の図で区切られています。

図2.1 MBR パーティションテーブルがあるディスク

未使用のパーティションドライブ

上記の図で示したように、パーティションテーブルは 4 つの未使用のプライマリーパーティションの 4 つのセクションに分けられます。プライマリーパーティションは、1 つの論理ドライブ(またはセクション)のみを含むハードドライブのパーティションです。各論理ドライブは、1 つのパーティションの定義に必要な情報を保持しています。つまり、パーティションテーブルでは 4 つ以上のプライマリーパーティションを定義できません。

各パーティションテーブルエントリーには、パーティションの重要な特徴があります。

  • ディスク上のパーティションの開始点と終了点
  • 1 つのパーティションのみが アクティブであるとフラグ付けできるため、パーティションの状態。
  • パーティションのタイプ

開始点と終了点は、ディスク上のパーティションのサイズと場所を定義します。一部のオペレーティングシステムブートローダーは、active フラグを使用します。つまり、「active」とマークされているパーティションのオペレーティングシステムが起動します。

タイプは、パーティションの予想される使用方法を特定する数字です。一部のオペレーティングシステムでは、パーティションの種類を使用して以下を行います。

  • 特定のファイルシステムタイプを示します。
  • 特定のオペレーティングシステムに関連付けられているパーティションにフラグを付けます。
  • パーティションに起動可能なオペレーティングシステムが含まれていることを示します。

以下の図は、パーティションが 1 つあるドライブの例を示しています。この例では、最初のパーティションには DOS パーティションタイプのラベルが付けられます。

図2.2 1 つのパーティションを持つディスク

DOS 単一パーティション

2.5. 拡張 MBR パーティション

追加のパーティションを作成するには、必要に応じてタイプを extended に設定します。

拡張パーティションは、ディスクドライブに似ています。1 つ以上の論理パーティションを参照する独自のパーティションテーブルがあります。このパーティションテーブルには、拡張パーティション内にすべて含まれています。以下の図は、2 つのプライマリーパーティションを持つディスクドライブと、2 つの論理パーティションを含む 1 つの拡張パーティションと、パーティションが分割されていない空き領域を示しています。

図2.3 2 つのプライマリーパーティションと拡張 MBR パーティションの両方を備えたディスク

拡張パーティション

最大 4 つのプライマリーパーティションと拡張パーティションのみを使用できますが、論理パーティションの数に制限はありません。Linux がパーティションにアクセスする制限として、1 つのディスクドライブで最大 15 の論理パーティションが許可されます。

2.6. MBR パーティションタイプ

以下の表は、一般的に使用される MBR パーティションタイプと、それらを表す 16 進数のリストを示しています。

表2.2 MBR パーティションタイプ

MBR パーティションタイプ

MBR パーティションタイプ

Empty

00

Novell Netware 386

65

DOS 12 ビット FAT

01

PIC/IX

75

XENIX root

O2

旧 MINIX

80

XENIX usr

O3

Linux/MINUX

81

DOS 16 ビット (32M 以下)

04

Linux swap

82

Extended

05

Linux ネイティブ

83

DOS 16 ビット (32 以上)

06

Linux 拡張

85

OS/2 HPFS

07

Amoeba

93

AIX

08

Amoeba BBT

94

AIX ブート可能

09

BSD/386

a5

OS/2 Boot Manager

0a

OpenBSD

a6

Win95 FAT32

0b

NEXTSTEP

a7

Win95 FAT32 (LBA)

0c

BSDI fs

b7

Win95 FAT16 (LBA)

0e

BSDI swap

b8

Win95 Extended (LBA)

0f

Syrinx

c7

Venix 80286

40

CP/M

db

Novell

51

DOS アクセス

e1

PRep Boot

41

DOS R/O

e3

GNU HURD

63

DOS セカンダリー

f2

Novell Netware 286

64

BBT

ff

2.7. GUID パーティションテーブル

GUID パーティションテーブル(GPT)は、Globally Unique Identifier(GUID)に基づくパーティション設定スキームです。

GPT は MBR パーティションテーブルの制限に対応します。MBR パーティションテーブルは、2 TiB を超えるストレージに対応できません。これは、約 2.2 TB に相当します。代わりに、GPT は容量が大きいハードディスクをサポートします。アドレス可能な最大ディスクサイズは 2.2 ZiB です。デフォルトでは、GPT は最大 128 のプライマリーパーティションの作成に対応します。この数は、パーティションテーブルにより多くの領域を割り当てることで拡張できます。

注記

GPT には GUID に基づくパーティションタイプがあります。特定のパーティションには特定の GUID が必要です。たとえば、EFI ブートローダーのシステムパーティションには GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B が必要です。

GPT ディスクは、論理ブロックアドレス指定(LBA)とパーティションレイアウトを以下のように使用します。

  • MBR ディスクとの後方互換性のために、GPT の最初のセクター(LBA 0)は MBR データ用に予約され、「保護 MBR」と呼ばれます。
  • プライマリー GPT

    • ヘッダーは、デバイスの 2 番目の論理ブロック(LBA 1)から始まります。ヘッダーには、ディスク GUID、プライマリーパーティションテーブルの場所、セカンダリ GPT ヘッダーの場所、および CRC32 チェックサム、およびプライマリーパーティションテーブルが含まれます。また、テーブルにあるパーティションエントリーの数も指定します。
    • デフォルトでは、プライマリー GPT には 128 パーティションエントリーが含まれます。各パーティションには、128 バイトのエントリーサイズ、パーティションタイプ GUID と一意のパーティション GUID があります。
  • セカンダリー GPT

    • リカバリーの場合は、プライマリーパーティションテーブルが破損した場合にバックアップテーブルとして便利です。
    • セカンダリー GPT ヘッダーは、プライマリーヘッダーが破損した場合に、ディスクの最後の論理セクターにあり、GPT 情報を復元します。
    • これには、以下が含まれます。

      • ディスク GUID
      • セカンダリーパーティションテーブルとプライマリー GPT ヘッダーの場所
      • それ自体の CRC32 チェックサム
      • セカンダリーパーティションテーブル
      • 可能なパーティションエントリーの数

図2.4 GUID パーティションテーブルを含むディスク

gpt パーティション
重要

GPT ディスクにブートローダーを正常にインストールするには、BIOS 起動パーティションが存在する必要があります。ディスクに BIOS ブートパーティションがすでに含まれている場合は、再使用できます。これには、Anaconda インストールプログラムで初期化されるディスクが含まれます。

2.8. パーティションタイプ

パーティションタイプを管理する方法は複数あります。

  • fdisk ユーティリティーは、16 進数コードを指定することで、あらゆる種類のパーティションタイプに対応します。
  • systemd-gpt-auto-generator はユニットジェネレーターユーティリティーで、パーティションタイプを使用してデバイスを自動的に識別し、マウントします。
  • parted ユーティリティーは、パーティションタイプを フラグ でマッピングします。parted ユーティリティーは、LVM、swap、RAID など、パーティションタイプのみを処理します。

    parted ユーティリティーは、以下のフラグの設定に対応します。

    • boot
    • root
    • swap
    • hidden
    • raid
    • lvm
    • lba
    • legacy_boot
    • irst
    • esp
    • palo

parted 3.5 を使用する Red Hat Enterprise Linux 9 では、追加のフラグ chromeos_kernel および bls_boot を使用できます。

parted ユーティリティーは、パーティションの作成中に、オプションでファイルシステムタイプの引数を受け付けます。必要な条件の一覧については、「 parted でのパーティションの作成 」を参照してください。値を使用して以下を行います。

  • MBR にパーティションフラグを設定します。
  • GPT にパーティションの UUID タイプを設定します。たとえば、ファイルシステムタイプの swapfat、または hfs には、異なる GUID が設定されます。デフォルト値は Linux Data GUID です。

この引数では、パーティションのファイルシステムは変更されません。サポートされているフラグと GUID だけを区別します。

次のファイルシステムのタイプがサポートされています。

  • xfs
  • ext2
  • ext3
  • ext4
  • fat16
  • fat32
  • hfs
  • hfs+
  • linux-swap
  • ntfs
  • reiserfs

2.9. パーティション命名スキーム

Red Hat Enterprise Linux はファイルベースの命名スキームを使用し、ファイル名の形式は /dev/xxyNです

デバイスおよびパーティション名は、以下の構造で構成されています。

/dev/
すべてのデバイスファイルが含まれるディレクトリーの名前。ハードディスクにはパーティションが含まれるため、すべてのパーティションを表すファイルは /dev にあります。
xx
パーティション名の最初の 2 文字は、パーティションを含むデバイスのタイプを示します。
y
この文字は、パーティションを含む特定のデバイスを示します。たとえば、/dev/sda は最初のハードディスク、/dev/sdb は 2 番目のハードディスクの場合は /dev/sda です。26 を超えるドライブを持つシステムでは、より多くの文字を使用できます(例: /dev/sdaa1 )。
N
最後の文字は、パーティションを表す数字を示します。最初の 4 つ (プライマリもしくは拡張) のパーティションには、1 から 4 までの数字が付けられます。論理パーティションは 5 から始まります。たとえば、/dev/sda3 は 1 番目のハードディスクの 3 番目のプライマリーパーティションまたは拡張パーティションで、2 番目のハードディスク上の 2 番目の論理パーティション /dev/sdb6 です。ドライブのパーティション番号は、MBR パーティションテーブルにのみ適用されます。N は常にパーティションを意味するものではないことに注意してください。
注記

Red Hat Enterprise Linux が すべて のタイプのディスクパーティションを識別して参照できる場合でも、ファイルシステムを読み取れないため、すべてのパーティションタイプに保存されているデータにアクセスできます。ただし、多くの場合、別のオペレーティングシステム専用のパーティション上にあるデータには問題なくアクセスすることができます。

2.10. マウントポイントとディスクパーティション

Red Hat Enterprise Linux では、各パーティションは、ファイルおよびディレクトリーの単一セットをサポートするのに必要なストレージの一部を形成します。パーティションをマウントすると、マウントポイント と呼ばれる指定されたディレクトリーから、そのパーティションのストレージを使用できるようになります。

たとえば、パーティション /dev/sda5/usr/ にマウントされている場合は、/usr/ の下にあるすべてのファイルおよびディレクトリーが /dev/sda5 に物理的に存在することを意味します。/usr/share/doc/FAQ/txt/Linux-FAQ ファイルは /dev/sda5 にありますが、/etc/gdm/custom.conf ファイルは保存されません。

さらにこの例では、/usr/ 以下の 1 つまたは複数のディレクトリーを別のパーティションのマウントポイントとすることも可能です。たとえば、 /usr/local /man/whatis は、/dev/sda5 ではなく /dev/sda7 にあります。/usr/local にマウントされた /dev/sda7 パーティションが含まれます。

第3章 パーティションの使用

ディスクパーティション設定を使用して、ディスクを 1 つ以上の論理領域に分割し、各パーティションで個別に作業できるようにします。ハードディスクは、パーティションテーブルの各ディスクパーティションの場所とサイズに関する情報を保存します。この表を使用すると、各パーティションはオペレーティングシステムへの論理ディスクとして表示されます。次に、これらの個々のディスクに読み取りおよび書き込みを行うことができます。

ブロックデバイスでパーティションを使用する長所と短所の概要 は、「LUN でのパーティション使用における長所と短所」を参照 してください。

3.1. parted でディスクにパーティションテーブルを作成

parted ユーティリティーを使用して、パーティションテーブルでブロックデバイスのフォーマットをより簡単に実行できます。

警告

パーティションテーブルを使用してブロックデバイスをフォーマットすると、そのデバイスに保存されているすべてのデータが削除されます。

手順

  1. インタラクティブな parted シェルを起動します。

    # parted block-device
  2. デバイスにパーティションテーブルがあるかどうかを確認します。

    # (parted) print

    デバイスにパーティションが含まれている場合は、次の手順でパーティションを削除します。

  3. 新しいパーティションテーブルを作成します。

    # (parted) mklabel table-type
    • table-type を、使用するパーティションテーブルの種類に置き換えます。

      • msdo (MBR の場合)
      • gpt (GPT の場合)

    例3.1 GUID パーティションテーブル(GPT)テーブルの作成

    ディスクに GPT テーブルを作成するには、次のコマンドを使用します。

    # (parted) mklabel gpt

    この変更については、このコマンドの入力後に適用が開始されます。

  4. パーティションテーブルを表示して、そのテーブルが作成されたことを確認します。

    # (parted) print
  5. parted シェルを終了します。

    # (parted) quit

関連情報

  • parted(8) man ページ

3.2. parted でパーティションテーブルの表示

ブロックデバイスのパーティションテーブルを表示して、パーティションレイアウトと個々のパーティションに関する詳細を確認します。parted ユーティリティーを使用して、ブロックデバイスのパーティションテーブルを表示できます。

手順

  1. parted ユーティリティーを起動します。たとえば、次の出力は、デバイス /dev/sda を表示します。

    # parted /dev/sda
  2. パーティションテーブルを表示します。

    # (parted) print
    
    Model: ATA SAMSUNG MZNLN256 (scsi)
    Disk /dev/sda: 256GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags:
    
    Number  Start   End     Size    Type      File system  Flags
     1      1049kB  269MB   268MB   primary   xfs          boot
     2      269MB   34.6GB  34.4GB  primary
     3      34.6GB  45.4GB  10.7GB  primary
     4      45.4GB  256GB   211GB   extended
     5      45.4GB  256GB   211GB   logical
  3. オプション:次に調べるデバイスに切り替えます。

    # (parted) select block-device

print コマンドの出力の詳細な説明は、以下を参照してください。

Model:ATA SAMSUNG MZNLN256 (scsi)
ディスクタイプ、製造元、モデル番号、およびインターフェース。
Disk /dev/sda:256GB
ブロックデバイスへのファイルパスとストレージ容量。
Partition Table: msdos
ディスクラベルの種類。
Number
パーティション番号。たとえば、マイナー番号 1 のパーティションは、/dev/sda1 に対応します。
Start および End
デバイスにおけるパーティションの開始場所と終了場所。
Type
有効なタイプは、メタデータ、フリー、プライマリー、拡張、または論理です。
File system
ファイルシステムの種類。ファイルシステムの種類が不明な場合は、デバイスの File system フィールドに値が表示されません。parted ユーティリティーは、暗号化されたデバイスのファイルシステムを認識できません。
Flags
パーティションのフラグ設定一覧。利用可能なフラグは、bootrootswaphiddenraidlvm、または lba です。

関連情報

  • parted(8) man ページ

3.3. parted でパーティションの作成

システム管理者は、parted ユーティリティーを使用してディスクに新しいパーティションを作成できます。

注記

必要なパーティションは、swap/boot/、および /(root) です。

前提条件

  • ディスクのパーティションテーブル。
  • 作成するパーティションを 2TiB を超える場合は、GPT(GUID Partition Table) でディスクをフォーマットします。

手順

  1. parted ユーティリティーを起動します。

    # parted block-device
  2. 現在のパーティションテーブルを表示し、十分な空き領域があるかどうかを確認します。

    # (parted) print
    • 空き領域が十分でない場合に備えてパーティションのサイズを変更します。
    • パーティションテーブルから、以下を確認します。

      • 新しいパーティションの開始点と終了点。
      • MBR で、どのパーティションタイプにすべきか
  3. 新しいパーティションを作成します。

    # (parted) mkpart part-type name fs-type start end
    • part-type を、プライマリー論理、または 拡張 に置き換えます。これは MBR パーティションテーブルにのみ適用されます。
    • name を、任意のパーティション名に置き換えます。これは GPT パーティションテーブルに必要です。
    • fs-typexfsext2ext3ext4fat16fat32hfshfs+linux-swapntfs、または reiserfs に置き換えます。fs-type パラメーターは任意です。parted ユーティリティーは、パーティションにファイルシステムを作成しません。
    • startend を、パーティションの開始点と終了点を決定するサイズに置き換えます(ディスクの開始からカウントします)。512MiB20GiB1.5TiB などのサイズサフィックスを使用できます。デフォルトのサイズはメガバイト単位です。

    例3.2 小さなプライマリーパーティションの作成

    MBR テーブルに 1024MiB から 2048MiB までのプライマリーパーティションを作成するには、次のコマンドを使用します。

    # (parted) mkpart primary 1024MiB 2048MiB

    変更は、コマンドの入力後に適用を開始します。

  4. パーティションテーブルを表示して、作成されたパーティションのパーティションタイプ、ファイルシステムタイプ、サイズが、パーティションテーブルに正しく表示されていることを確認します。

    # (parted) print
  5. parted シェルを終了します。

    # (parted) quit
  6. 新規デバイスノードを登録します。

    # udevadm settle
  7. カーネルが新しいパーティションを認識していることを確認します。

    # cat /proc/partitions

3.4. fdisk でパーティションタイプの設定

disks ユーティリティーを使用してパーティションタイプまたはフラグを設定できます。

前提条件

  • ディスク上のパーティション。

手順

  1. インタラクティブな fdisk シェルを起動します。

    # fdisk block-device
  2. 現在のパーティションテーブルを表示して、パーティションのマイナー番号を確認します。

    Command (m for help): print

    現在のパーティションタイプは Type 列で、それに対応するタイプ ID は Id 列で確認できます。

  3. パーティションタイプコマンドを入力し、マイナー番号を使用してパーティションを選択します。

    Command (m for help): type
    Partition number (1,2,3 default 3): 2
  4. オプション:16 進数コードでリストを表示します。

    Hex code (type L to list all codes): L
  5. パーティションタイプを設定します。

    Hex code (type L to list all codes): 8e
  6. 変更を書き込み、fdisk シェルを終了します。

    Command (m for help): write
    The partition table has been altered.
    Syncing disks.
  7. 変更を確認します。

    # fdisk --list block-device

3.5. parted でパーティションのサイズ変更

parted ユーティリティーを使用して、パーティションを拡張して未使用のディスク領域を利用したり、パーティションを縮小して、さまざまな目的で容量を使用します。

前提条件

  • パーティションを縮小する前にデータをバックアップします。
  • 作成するパーティションを 2TiB を超える場合は、GPT(GUID Partition Table) でディスクをフォーマットします。
  • パーティションを縮小する場合は、サイズを変更したパーティションより大きくならないように、まずファイルシステムを縮小します。
注記

XFS は縮小に対応していません。

手順

  1. parted ユーティリティーを起動します。

    # parted block-device
  2. 現在のパーティションテーブルを表示します。

    # (parted) print

    パーティションテーブルから、以下を確認します。

    • パーティションのマイナー番号。
    • 既存のパーティションの場所と、サイズ変更後の新しい終了点。
  3. パーティションのサイズを変更します。

    # (parted) resizepart 1 2GiB
    • 1 は、サイズを変更するパーティションのマイナー番号に置き換えます。
    • 2 を、サイズ変更後のパーティションの新しい終了点を決定するサイズ(ディスクの開始からカウント)に置き換えます。512MiB20GiB1.5TiB などのサイズサフィックスを使用できます。デフォルトのサイズはメガバイト単位です。
  4. パーティションテーブルを表示して、サイズ変更したパーティションのサイズが、パーティションテーブルで正しく表示されていることを確認します。

    # (parted) print
  5. parted シェルを終了します。

    # (parted) quit
  6. カーネルが新しいパーティションを登録していることを確認します。

    # cat /proc/partitions
  7. オプション:パーティションを拡張した場合は、そこにあるファイルシステムも拡張します。

3.6. parted でパーティションの削除

parted ユーティリティーを使用すると、ディスクパーティションを削除して、ディスク領域を解放することができます。

警告

パーティションを削除すると、そのパーティションに保存されているすべてのデータが削除されます。

手順

  1. インタラクティブな parted シェルを起動します。

    # parted block-device
  2. 現在のパーティションテーブルを表示して、削除するパーティションのマイナー番号を確認します。

    # (parted) print
  3. パーティションを削除します。

    # (parted) rm minor-number
    • minor-number を、削除するパーティションのマイナー番号に置き換えます。

    このコマンドを実行するとすぐに変更の適用が開始されます。

  4. パーティションテーブルからパーティションが削除されたことを確認します。

    # (parted) print
  5. parted シェルを終了します。

    # (parted) quit
  6. カーネルが、パーティションが削除されていることを確認します。

    # cat /proc/partitions
  7. パーティションが存在する場合は、/etc/fstab ファイルからパーティションを削除します。削除したパーティションを宣言している行を見つけ、ファイルから削除します。
  8. システムが新しい /etc/fstab 設定を登録するように、マウントユニットを再生成します。

    # systemctl daemon-reload
  9. swap パーティションを削除したり、LVM の一部を削除した場合は、/etc/default/grub ファイルのカーネルコマンドラインからパーティションへの参照をすべて削除し、GRUB 設定を再生成します。

    • BIOS ベースのシステムの場合:

      # grub2-mkconfig --output=/etc/grub2.cfg
    • UEFI ベースのシステムの場合:

      # grub2-mkconfig --output=/etc/grub2-efi.cfg
  10. アーリーブートシステムに変更を登録するには、initramfs ファイルシステムを再構築します。

    # dracut --force --verbose

関連情報

  • parted(8) man ページ

第4章 ディスクを再構成するストラテジー

ディスクを再パーティションする方法は複数あります。これらには以下が含まれます。

  • パーティションが分割されていない空き領域が利用できる。
  • 未使用のパーティションが利用できる。
  • アクティブに使用されているパーティションの空き領域が利用できる。
注記

以下の例は分かりやすく、実際に Red Hat Enterprise Linux をインストールする際の正確なパーティションレイアウトを反映しません。

4.1. パーティションが分割されていない空き領域の使用

すでに定義されていてハードディスク全体にまたがる訳ではなく、定義されたパーティションの一部ではない未割り当ての領域をそのまま残します。以下の図は、これがどのようになるかを示しています。

図4.1 パーティションが分割されていない空き領域があるディスク

パーティションが分割されていない領域

最初の図は、1 つのプライマリーパーティションを持つディスクと、空き領域が割り当てられていない未定義のパーティションを表します。2 つ目の図は、領域が割り当てられた 2 つの定義されたパーティションを持つディスクを表します。

未使用のハードディスクもこのカテゴリーに分類されます。唯一の違いは、すべて の領域が定義されたパーティションの一部ではないことです。

新規ディスクでは、未使用の領域から必要なパーティションを作成できます。ほとんどのオペレーティングシステムは、ディスクドライブ上の利用可能な領域をすべて取得するように設定されています。

4.2. 未使用パーティションの領域の使用

以下の例では、最初の図は未使用のパーティションを持つディスクを表します。2 つ目の図は、Linux 用の未使用パーティションの実際の配置を示しています。

図4.2 未使用のパーティションがあるディスク

未使用パーティション

未使用のパーティションに割り当てられた領域を使用するには、パーティションを削除してから、適切な Linux パーティションを作成します。または、インストールプロセス時に未使用のパーティションを削除し、新しいパーティションを手動で作成します。

4.3. アクティブなパーティションの空き領域の使用

すでに使用されているアクティブなパーティションには、必要な空き領域が含まれているため、このプロセスの管理が困難な場合があります。ほとんどの場合、ソフトウェアが事前にインストールされているコンピューターのハードディスクには、オペレーティングシステムとデータを保持する大きなパーティションが 1 つ含まれます。

警告

アクティブなパーティションでオペレーティングシステム(OS)を使用する場合は、OS を再インストールする必要があります。事前にインストールされたソフトウェアを含む一部のコンピューターには、元の OS を再インストールするためのインストールメディアを含めないことに注意してください。元のパーティションと OS インストールを破棄する前に、OS に適用されるかどうかを確認します。

利用可能な空き領域の使用を最適化するには、破壊的な再構成または非破壊的な再構成方法を使用できます。

4.3.1. 破壊的な再構成

破壊的な再パーティション設定は、ハードドライブのパーティションを破棄し、代わりにいくつかの小さなパーティションを作成します。この方法は完全なコンテンツを削除するため、元のパーティションから必要なデータをバックアップします。

既存のオペレーティングシステム用に小規模なパーティションを作成したら、以下が可能になります。

  • ソフトウェアを再インストールします。
  • データを復元します。
  • Red Hat Enterprise Linux インストールを開始します。

以下の図は、破壊的な再パーティション方法を使用する簡易表示です。

図4.3 ディスク上での破壊的な再パーティション処理

破壊的な再パーティション処理
警告

このメソッドは、元のパーティションに保存されたデータをすべて削除します。

4.3.2. 非破壊的な再パーティション

非破壊的なパーティション再パーティション化は、データの損失なしにパーティションのサイズを変更します。この方法は信頼性がありますが、大規模なドライブでは処理に時間がかかります。

以下は、破壊的な再パーティション作成の開始に役立つメソッドの一覧です。

  • 既存データの圧縮

一部のデータのストレージの場所を変更することはできません。これにより、パーティションのサイズを必要なサイズに変更しないようにし、最終的に破壊的な再パーティション処理が発生する可能性があります。既存のパーティションでデータを圧縮すると、必要に応じてパーティションのサイズを変更できます。また、利用可能な空き容量を最大化することもできます。

以下の図は、このプロセスを簡素化した表現です。

図4.4 ディスクのデータ圧縮

圧縮

データ損失の可能性を回避するには、圧縮プロセスを続行する前にバックアップを作成します。

  • 既存パーティションのサイズ

既存のパーティションのサイズを変更すると、より多くの領域を解放できます。ソフトウェアのサイズ変更によっては、結果が異なる場合があります。多くの場合、元のパーティションと同じタイプのフォーマットされていない新しいパーティションを作成できます。

サイズ変更後に行う手順は、使用するソフトウェアによって異なります。以下の例では、新しい DOS(Disk Operating System)パーティションを削除し、代わりに Linux パーティションを作成します。サイズ変更プロセスを開始する前に、ディスクに最適なものを確認します。

図4.5 ディスク上でのパーティションのサイズ変更

パーティションのサイズ変更
  • オプション:新規パーティションの作成

ソフトウェアのサイズ変更の一部は、Linux ベースのシステムに対応します。この場合、サイズ変更後に新たに作成されたパーティションを削除する必要はありません。新しいパーティションの作成は、使用するソフトウェアによって異なります。

以下の図は、新しいパーティションの作成前後のディスクの状態を示しています。

図4.6 最終パーティション構成のディスク

非破壊的な最終パーティション

第5章 iSCSI ターゲットの設定

Red Hat Enterprise Linux では、コマンドラインインターフェースとして targetcli シェルを使用し、以下の操作を行います。

  • iSCSI ハードウェアを使用できるように iSCSI ストレージ相互接続を追加、削除、表示、監視します。
  • ファイル、ボリューム、ローカル SCSI デバイス、またはリモートシステムへの RAM ディスクで対応しているローカルストレージリソースをエクスポートします。

targetcli ツールには、組み込みタブ補完、自動補完サポート、インラインドキュメントなどのツリーベースのレイアウトがあります。

5.1. targetcli のインストール

targetcli ツールをインストールして、iSCSI ストレージの相互接続を追加、監視、削除します。

手順

  1. targetcli ツールをインストールします。

    # dnf install targetcli
  2. ターゲットサービスを起動します。

    # systemctl start target
  3. システムの起動時にターゲットサービスが起動するように設定するには、次のコマンドを実行します。

    # systemctl enable target
  4. ファイアウォールの 3260 ポートを開き、ファイアウォール設定を再読み込みします。

    # firewall-cmd --permanent --add-port=3260/tcp
    Success
    
    # firewall-cmd --reload
    Success

検証

  • targetcli レイアウトを表示します。

    # targetcli
    /> ls
    o- /........................................[...]
      o- backstores.............................[...]
      | o- block.................[Storage Objects: 0]
      | o- fileio................[Storage Objects: 0]
      | o- pscsi.................[Storage Objects: 0]
      | o- ramdisk...............[Storage Objects: 0]
      o- iscsi...........................[Targets: 0]
      o- loopback........................[Targets: 0]

関連情報

  • man ページの targetcli(8)

5.2. iSCSI ターゲットの作成

iSCSI ターゲットを作成すると、クライアントの iSCSI イニシエーターが、サーバーのストレージデバイスにアクセスできるようになります。ターゲットとイニシエーターにはどちらも一意の識別名があります。

前提条件

手順

  1. iSCSI ディレクトリーに移動します。

    /> iscsi/
    注記

    cd コマンドは、ディレクトリーを変更したり、移動するパスの一覧を表示するために使用されます。

  2. iSCSI ターゲットを作成するには、以下のいずれかのオプションを使用します。

    1. デフォルトのターゲット名を使用した iSCSI ターゲットの作成:

      /iscsi> create
      
      Created target
      iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff
      Created TPG1
    2. 特定の名前を使用した iSCSI ターゲットの作成:

      /iscsi> create iqn.2006-04.com.example:444
      
      Created target iqn.2006-04.com.example:444
      Created TPG1
      Here iqn.2006-04.com.example:444 is target_iqn_name

      iqn.2006-04.com.example:444 を、特定のターゲット名に置き換えます。

  3. 新たに作成されたターゲットを確認します。

    /iscsi> ls
    
    o- iscsi.......................................[1 Target]
        o- iqn.2006-04.com.example:444................[1 TPG]
            o- tpg1...........................[enabled, auth]
               o- acls...............................[0 ACL]
                o- luns...............................[0 LUN]
               o- portals.........................[0 Portal]

関連情報

  • man ページの targetcli(8)

5.3. iSCSI バックストア

iSCSI バックストアは、エクスポートした LUN のデータをローカルマシンに保存するさまざまな方法に対応します。ストレージオブジェクトを作成して、バックストアが使用するリソースを定義します。

管理者は、LIO (Linux-IO) が対応する以下のバックストアデバイスのいずれかを選択できます。

fileio バックストア
ローカルファイルシステム上の通常のファイルをディスクイメージとして使用する場合は、fileio ストレージオブジェクトを作成します。fileio バックストアの作成については、Creating a fileio storage object を参照してください。
block バックストア
ローカルのブロックデバイスおよび論理デバイスを使用している場合には、ブロック ストレージオブジェクトを作成します。block バックストアの作成については、Creating a block storage object を参照してください。
pscsi バックストア
ストレージオブジェクトが SCSI コマンドの直接パススルーに対応している場合は、pscsi ストレージオブジェクトを作成します。pscsi バックストアの作成については、Creating a pscsi storage object を参照してください。
ramdisk バックストア
一時的な RAM 対応デバイスを作成する場合は、ramdisk ストレージオブジェクトを作成します。ramdisk バックストアの作成については、Creating a Memory Copy RAM disk storage object を参照してください。

関連情報

  • man ページの targetcli(8)

5.4. fileio ストレージオブジェクトの作成

fileio ストレージオブジェクトは、write_back 操作または write_ thru 操作のいずれかに対応します。write_back 操作では、ローカルファイルシステムキャッシュが有効になります。これにより、パフォーマンスが向上しますが、データの損失のリスクが高まります。

write_thru 操作を優先させるために、write_back=false を使用して write_back 操作を無効にすることが推奨されます。

前提条件

手順

  1. backstores/ ディレクトリーから fileio/ に移動します。

    /> backstores/fileio
  2. fileio ストレージオブジェクトを作成します。

    /backstores/fileio> create file1 /tmp/disk1.img 200M write_back=false
    
    Created fileio file1 with size 209715200

検証

  • 作成された fileio ストレージオブジェクトを確認します。

    /backstores/fileio> ls

関連情報

  • man ページの targetcli(8)

5.5. ブロックストレージオブジェクトの作成

ブロックドライバーを使用すると、/sys/block/ ディレクトリーにあるブロックデバイスを LIO (Linux-IO) で使用できます。これには、HDD、SSD、CD、DVD などの物理デバイス、およびソフトウェアやハードウェアの RAID ボリューム、LVM ボリュームなどの論理デバイスが含まれます。

前提条件

手順

  1. backstores/ ディレクトリーから block/ に移動します。

    /> backstores/block/
  2. block バックストアを作成します。

    /backstores/block> create name=block_backend dev=/dev/sdb
    
    Generating a wwn serial.
    Created block storage object block_backend using /dev/vdb.

検証

  • 作成された block ストレージオブジェクトを確認します。

    /backstores/block> ls
    注記

    block バックストアは、論理ボリュームにも作成できます。

関連情報

  • man ページの targetcli(8)

5.6. pscsi ストレージオブジェクトの作成

SCSI エミュレーションなしで SCSI コマンドの直接パススルーに対応するストレージオブジェクト、および /proc/scsi/scsilsscsi とともに表示される基盤の SCSI デバイス (SAS ハードドライブなど) で SCSI コマンドの直接パススルーに対応するストレージオブジェクトは、バックストアとして設定できます。このサブシステムでは、SCSI-3 以降に対応しています。

警告

pscsi は、上級ユーザーのみが使用してください。非対称論理ユニット割り当て (ALUA) や永続予約 (VMware ESX や vSphere で使用される永続予約など) は、通常はデバイスのファームウェアに実装されず、誤作動やクラッシュが発生する原因となることがあります。確信が持てない場合は、実稼働の設定に block バックストアを使用してください。

前提条件

手順

  1. backstores/ ディレクトリーから pscsi/ に移動します。

    /> backstores/pscsi/
  2. この例では、/dev/sr0 を使用して物理 SCSI デバイスである TYPE_ROM デバイスの pscsi バックストアを作成します。

    /backstores/pscsi> create name=pscsi_backend dev=/dev/sr0
    
    Generating a wwn serial.
    Created pscsi storage object pscsi_backend using /dev/sr0

検証

  • 作成した pscsi ストレージオブジェクトを確認します。

    /backstores/pscsi> ls

関連情報

  • man ページの targetcli(8)

5.7. メモリーコピーの RAM ディスクストレージオブジェクトの作成

メモリーコピー RAM ディスク (ramdisk) は、完全な SCSI エミュレーションと、イニシエーターのメモリーコピーを使用した個別のメモリーマッピングが含まれる RAM ディスクを提供します。これにより、マルチセッションの機能を利用できます。これは、特に実稼働環境での高速で不揮発性の大容量ストレージで有用です。

前提条件

手順

  1. backstores/ ディレクトリーから ramdisk/ に移動します。

    /> backstores/ramdisk/
  2. 1GB RAM ディスクバックストアを作成します。

    /backstores/ramdisk> create name=rd_backend size=1GB
    
    Generating a wwn serial.
    Created rd_mcp ramdisk rd_backend with size 1GB.

検証

  • 作成した ramdisk ストレージオブジェクトを確認します。

    /backstores/ramdisk> ls

関連情報

  • man ページの targetcli(8)

5.8. iSCSI ポータルの作成

iSCSI ポータルを作成すると、ターゲットの有効性を維持するターゲットに IP アドレスとポートが追加されます。

前提条件

  • targetcli をインストールして、実行している。詳細は、targetcli のインストール を参照してください。
  • ターゲットポータルグループ (TPG) に関連付けられた iSCSI ターゲット。詳細は、Creating an iSCSI target を参照してください。

手順

  1. TPG ディレクトリーに移動します。

    /iscsi> iqn.2006-04.example:444/tpg1/
  2. iSCSI ポータルを作成するには、以下のいずれかのオプションを使用します。

    1. デフォルトポータルを作成するには、デフォルトの iSCSI ポート 3260 を使用し、ターゲットがそのポートのすべての IP アドレスをリッスンできるようにします。

      /iscsi/iqn.20...mple:444/tpg1> portals/ create
      
      Using default IP port 3260
      Binding to INADDR_Any (0.0.0.0)
      Created network portal 0.0.0.0:3260
      注記

      iSCSI ターゲットが作成されると、デフォルトのポータルも作成されます。このポータルは、デフォルトのポート番号を持つすべての IP アドレスをリッスンするように設定されています。0.0.0.0:3260.

      デフォルトのポータルを削除するには、次のコマンドを使用します。

      /iscsi/iqn-name/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260
    2. 特定の IP アドレスを使用したポータルの作成:

      /iscsi/iqn.20...mple:444/tpg1> portals/ create 192.168.122.137
      
      Using default IP port 3260
      Created network portal 192.168.122.137:3260

検証

  • 新たに作成されたポータルを確認します。

    /iscsi/iqn.20...mple:444/tpg1> ls
    
    o- tpg.................................. [enambled, auth]
        o- acls ......................................[0 ACL]
        o- luns ......................................[0 LUN]
        o- portals ................................[1 Portal]
           o- 192.168.122.137:3260......................[OK]

関連情報

  • man ページの targetcli(8)

5.9. iSCSI LUN の作成

論理ユニット番号 (LUN) は、iSCSI バックストアで対応している物理デバイスです。各 LUN には固有の番号があります。

前提条件

  • targetcli をインストールして、実行している。詳細は、targetcli のインストール を参照してください。
  • ターゲットポータルグループ (TPG) に関連付けられた iSCSI ターゲット。詳細は、Creating an iSCSI target を参照してください。
  • 作成したストレージオブジェクト。詳細は、iSCSI Backstore を参照してください。

手順

  1. 作成したストレージオブジェクトの LUN を作成します。

    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/ramdisk/rd_backend
    Created LUN 0.
    
    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/block/block_backend
    Created LUN 1.
    
    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/fileio/file1
    Created LUN 2.
  2. 作成した LUN を確認します。

    /iscsi/iqn.20...mple:444/tpg1> ls
    
    o- tpg.................................. [enambled, auth]
        o- acls ......................................[0 ACL]
        o- luns .....................................[3 LUNs]
        |  o- lun0.........................[ramdisk/ramdisk1]
        |  o- lun1.................[block/block1 (/dev/vdb1)]
        |  o- lun2...................[fileio/file1 (/foo.img)]
        o- portals ................................[1 Portal]
            o- 192.168.122.137:3260......................[OK]

    デフォルトの LUN 名は 0 から始まります。

    重要

    デフォルトでは、読み書きパーミッションを持つ LUN が作成されます。ACL の作成後に新しい LUN が追加されると、LUN は自動的に利用可能なすべての ACL にマッピングされ、セキュリティー上のリスクが発生します。読み取り専用パーミッションで LUN を作成するには、「読み取り専用 の iSCSI LUN の 作成」を参照してください。

  3. ACL を設定します。詳細は、Creating an iSCSI ACL を参照してください。

関連情報

  • man ページの targetcli(8)

5.10. 読み取り専用の iSCSI LUN の作成

デフォルトでは、読み書きパーミッションを持つ LUN が作成されます。この手順では、読み取り専用の LUN を作成する方法を説明します。

前提条件

  • targetcli をインストールして、実行している。詳細は、targetcli のインストール を参照してください。
  • ターゲットポータルグループ (TPG) に関連付けられた iSCSI ターゲット。詳細は、Creating an iSCSI target を参照してください。
  • 作成したストレージオブジェクト。詳細は、iSCSI Backstore を参照してください。

手順

  1. 読み取り専用パーミッションを設定します。

    /> set global auto_add_mapped_luns=false
    
    Parameter auto_add_mapped_luns is now 'false'.

    これにより、LUN が既存の ACL へ自動的にマッピングされないようになり、LUN を手動でマッピングできるようになります。

  2. initiator_iqn_name ディレクトリーに移動します。

    /> iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name/
  3. LUN を作成します。

    /iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name> create mapped_lun=next_sequential_LUN_number tpg_lun_or_backstore=backstore write_protect=1

    たとえば、以下のようになります。

    /iscsi/target_iqn_name/tpg1/acls/2006-04.com.example.foo:888> create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1
    
    Created LUN 1.
    Created Mapped LUN 1.
  4. 作成した LUN を確認します。

    /iscsi/target_iqn_name/tpg1/acls/2006-04.com.example.foo:888> ls
     o- 2006-04.com.example.foo:888 .. [Mapped LUNs: 2]
     | o- mapped_lun0 .............. [lun0 block/disk1 (rw)]
     | o- mapped_lun1 .............. [lun1 block/disk2 (ro)]

    (mapped_lun0 の (rw) とは異なり) mapped_lun1 行の最後に (ro) が表示されますが、これは、読み取り専用であることを表しています。

  5. ACL を設定します。詳細は、Creating an iSCSI ACL を参照してください。

関連情報

  • man ページの targetcli(8)

5.11. iSCSI ACL の作成

targetcli では、アクセス制御リスト (ACL) は、アクセスルールの定義に使用され、各イニシエーターは LUN への排他的なアクセスを持ちます。

ターゲットとイニシエーターにはどちらも一意の識別名があります。ACL を設定するには、イニシエーターの一意の名前を知っている必要があります。iSCSI イニシエーターは /etc/iscsi/initiatorname.iscsi ファイルで確認できます。

前提条件

  • targetcli をインストールして、実行している。詳細は、targetcli のインストール を参照してください。
  • ターゲットポータルグループ (TPG) に関連付けられた iSCSI ターゲット。詳細は、Creating an iSCSI target を参照してください。

手順

  1. acls ディレクトリーへ移動

    /iscsi/iqn.20...mple:444/tpg1> acls/
  2. ACL を作成するには、以下のいずれかのオプションを指定します。

    1. イニシエーターの /etc/iscsi/initiatorname.iscsi ファイルからのイニシエーター名の使用。
    2. 覚えやすい名前を使用する方法は、Creating an iSCSI initiator を参照して、ACL がイニシエーターと一致することを確認してください。

      /iscsi/iqn.20...444/tpg1/acls> create iqn.2006-04.com.example.foo:888
      
      Created Node ACL for iqn.2006-04.com.example.foo:888
      Created mapped LUN 2.
      Created mapped LUN 1.
      Created mapped LUN 0.
      注記

      前述の例で使用したグローバル設定の auto_add_mapped_luns は、作成した ACL に自動的にマッピングします。

      ターゲットサーバーの TPG ノードに、ユーザーが作成した ACL を設定します。

      /iscsi/iqn.20...scsi:444/tpg1> set attribute generate_node_acls=1

検証

  • 作成した ACL を確認します。

    /iscsi/iqn.20...444/tpg1/acls> ls
    
    o- acls .................................................[1 ACL]
        o- iqn.2006-04.com.example.foo:888 ....[3 Mapped LUNs, auth]
            o- mapped_lun0 .............[lun0 ramdisk/ramdisk1 (rw)]
            o- mapped_lun1 .................[lun1 block/block1 (rw)]
            o- mapped_lun2 .................[lun2 fileio/file1 (rw)]

関連情報

  • man ページの targetcli(8)

5.12. ターゲットのチャレンジハンドシェイク認証プロトコルの設定

Challenge-Handshake Authentication Protocol (CHAP) を使用すると、パスワードでターゲットを保護できます。イニシエーターは、このパスワードでターゲットに接続できることを認識している必要があります。

前提条件

手順

  1. 属性認証を設定します。

    /iscsi/iqn.20...mple:444/tpg1> set attribute authentication=1
    
    Parameter authentication is now '1'.
  2. useridpassword を設定します。

    /tpg1> set auth userid=redhat
    Parameter userid is now 'redhat'.
    
    /iscsi/iqn.20...689dcbb3/tpg1> set auth password=redhat_passwd
    Parameter password is now 'redhat_passwd'.

関連情報

  • man ページの targetcli(8)

5.13. targetcli ツールで iSCSI オブジェクトの削除

この手順では、targetcli ツールを使用して iSCSI オブジェクトを削除する方法を説明します。

手順

  1. ターゲットからログオフします。

    # iscsiadm -m node -T iqn.2006-04.example:444 -u

    ターゲットへのログイン方法は、Creating an iSCSI initiator を参照してください。

  2. ACL、LUN、およびポータルのすべてを含め、ターゲット全体を削除します。

    /> iscsi/ delete iqn.2006-04.com.example:444

    iqn.2006-04.com.example:444 を target_iqn_name に置き換えます。

    • iSCSI バックストアを削除するには、次のコマンドを実行します。

      /> backstores/backstore-type/ delete block_backend
      • backstore-typefileioblockpscsi、または ramdisk に置き換えます。
      • block_backend を、削除する バックストア名 に置き換えます。
    • ACL などの iSCSI ターゲットの一部を削除するには、次のコマンドを実行します。

      /> /iscsi/iqn-name/tpg/acls/ delete iqn.2006-04.com.example:444

検証

  • 変更を表示します。

    /> iscsi/ ls

関連情報

  • man ページの targetcli(8)

第6章 iSCSI イニシエーターの設定

iSCSI イニシエーターは iSCSI ターゲットに接続するセッションを形成します。デフォルトでは、iSCSI サービスは起動に時間がかかり、iscsiadm コマンドの実行後にサービスが起動します。root が iSCSI デバイスにない場合や、node.startup = automatic でマークされたノードがない場合は、iscsiadm コマンドが実行するまで iSCSI サービスが起動しなくなります。これには、カーネルモジュール iscsid または iscsi の起動が必要になります。

root で systemctl start iscsid.service コマンドを実行し、iscsid デーモンを強制的に実行して、iSCSI カーネルモジュールを読み込みます。

6.1. iSCSI イニシエーターの作成

本セクションでは、iSCSI イニシエーターを作成する方法を説明します。

前提条件

  • サーバーマシンに targetcli をインストールし、実行している。詳細は、targetcli のインストール を参照してください。
  • iSCSI ターゲットがサーバーマシンの Target Portal Groups (TPG) に関連付けられている。詳細は、Creating an iSCSI target を参照してください。
  • iSCSI ACL を作成している。詳細は、Creating an iSCSI ACL を参照してください。

手順

  1. クライアントマシンに iscsi-initiator-utils をインストールします。

    # dnf install iscsi-initiator-utils
  2. イニシエーター名を確認します。

    # cat /etc/iscsi/initiatorname.iscsi
    
    InitiatorName=2006-04.com.example.foo:888
  3. iSCSI ACL の作成 でカスタムネームが指定されている場合は、それに応じて /etc/iscsi/initiatorname.iscsi ファイルを変更します。

    # vi /etc/iscsi/initiatorname.iscsi
  4. ターゲットを検出し、表示されたターゲット IQN でターゲットにログインします。

    # iscsiadm -m discovery -t st -p 10.64.24.179
        10.64.24.179:3260,1 iqn.2006-04.example:444
    
    # iscsiadm -m node -T iqn.2006-04.example:444 -l
        Logging in to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] (multiple)
        Login to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] successful.

    10.64.24.179 を、target-ip-address に置き換えます。

    この手順では、iSCSI ACL の作成 で説明されているように、それぞれのイニシエーター名が ACL に追加されている場合は、同じターゲットに接続されている任意の数のイニシエータに対してこの手順を使用できます。

  5. iSCSI ディスク名を確認して、この iSCSI ディスクにファイルシステムを作成します。

    # grep "Attached SCSI" /var/log/messages
    
    # mkfs.ext4 /dev/disk_name

    disk_name を、/var/log/messages ファイルに記載されている iSCSI ディスク名に置き換えます。

  6. ファイルシステムをマウントします。

    # mkdir /mount/point
    
    # mount /dev/disk_name /mount/point

    /mount/point を、パーティションのマウントポイントに置き換えます。

  7. システムの起動時にファイルシステムを自動的にマウントするように /etc/fstab を編集します。

    # vi /etc/fstab
    
    /dev/disk_name /mount/point ext4 _netdev 0 0

    disk_name を iSCSI ディスク名に置き換え、/mount/point を、パーティションのマウントポイントに置き換えます。

関連情報

  • man ページの targetcli(8) および iscsiadm(8)

6.2. イニシエーター用のチャレンジハンドシェイク認証プロトコルの設定

Challenge-Handshake Authentication Protocol (CHAP) を使用すると、パスワードでターゲットを保護できます。イニシエーターは、このパスワードでターゲットに接続できることを認識している必要があります。

前提条件

手順

  1. iscsid.conf ファイルで CHAP 認証を有効にします。

    # vi /etc/iscsi/iscsid.conf
    
    node.session.auth.authmethod = CHAP

    デフォルトでは、node.session.auth.authmethodNone に設定されています。

  2. ターゲットの usernamepasswordiscsid.conf ファイルに追加します。

    node.session.auth.username = redhat
    node.session.auth.password = redhat_passwd
  3. iscsid デーモンを起動します。

    # systemctl start iscsid.service

関連情報

  • man ページの iscsiadm(8)

6.3. iscsiadm ユーティリティーで iSCSI セッションの監視

この手順では、iscsiadm ユーティリティーを使用して iscsi セッションを監視する方法を説明します。

デフォルトでは、iSCSI サービスの起動は lazily で、iscsiadm コマンドの実行後にサービスが起動します。root が iSCSI デバイスにない場合や、node.startup = automatic でマークされたノードがない場合は、iscsiadm コマンドが実行するまで iSCSI サービスが起動しなくなります。これには、カーネルモジュール iscsid または iscsi の起動が必要になります。

root で systemctl start iscsid.service コマンドを実行し、iscsid デーモンを強制的に実行して、iSCSI カーネルモジュールを読み込みます。

手順

  1. クライアントマシンに iscsi-initiator-utils をインストールします。

    # dnf install iscsi-initiator-utils
  2. 実行中のセッションに関する情報を検索します。

    # iscsiadm -m session -P 3

    このコマンドは、セッションまたはデバイスの状態、セッション ID (sid)、いくつかのネゴシエートしたパラメーター、およびセッション経由でアクセス可能な SCSI デバイスを表示します。

    • より短い出力 (たとえば sid-to-node 間のマッピングのみの表示) には、次のコマンドを実行します。

      # iscsiadm -m session -P 0
              or
      # iscsiadm -m session
      
      tcp [2] 10.15.84.19:3260,2 iqn.1992-08.com.netapp:sn.33615311
      tcp [3] 10.15.85.19:3260,3 iqn.1992-08.com.netapp:sn.33615311

      このコマンドは、driver [sid] target_ip:port,target_portal_group_tag proper_target_name の形式で実行中のセッションの一覧を表示します。

関連情報

  • /usr/share/doc/iscsi-initiator-utils-version/README ファイル
  • man ページの iscsiadm(8)

6.4. DM Multipath がデバイスタイムアウトの上書き

recovery_tmo sysfs オプションは、特定の iSCSI デバイスのタイムアウトを制御します。次のオプションは、システム全体の recovery_tmo 値を上書きします。

  • replacement_timeout 設定オプションは、システム全体で全 iSCSI デバイスの recovery_tmo 値を上書きします。
  • DM Multipath が管理するすべての iSCSI デバイスで、DM Multipath の fast_io_fail_tmo オプションは、システム全体の recovery_tmo 値を上書きします。

    DM Multipath の fast_io_fail_tmo オプションは、ファイバーチャネルデバイスの fast_io_fail_tmo オプションを上書きします。

DM Multipath の fast_io_fail_tmo オプションは replacement_timeout よりも優先します。Red Hatでは、replacement_timeou を使用して、DM Multipathが管理するデバイスの recovery_tmo を上書きすることは推奨しません。これは、multipathd サービスが再読み込みを行うと、DM Multipath が常に recovery_tmo をリセットするためです。

第7章 ファイバーチャネルデバイスの使用

Red Hat Enterprise Linux 9 は、以下のネイティブファイバーチャネルドライバーを提供します。

  • lpfc
  • qla2xxx
  • zfcp

7.1. ファイバーチャネル論理ユニットのサイズ変更

システム管理者は、ファイバーチャネルの論理ユニットのサイズを変更できます。

手順

  1. multipath 論理ユニットのパスとなるデバイスを特定します。

    multipath -ll
  2. マルチパスを使用するシステムで、ファイバーチャネル論理ユニットを再スキャンします。

    $ echo 1 > /sys/block/sdX/device/rescan

関連情報

  • man ページの multipath(8)

7.3. ファイバーチャネル設定ファイル

以下は、ユーザー空間の API をファイバーチャネルに提供する /sys/class/ ディレクトリーの設定ファイルの一覧です。

項目は以下の変数を使用します。

H
ホスト番号
B
バス番号
T
ターゲット
L
論理ユニット (LUN)
-R
リモートポート番号
重要

マルチパスソフトウェアを使用している場合は、このセクションに記載される値のいずれかを変更する前に、ハードウェアベンダーにお問い合わせになることが推奨されます。

/sys/class/fc_transport/targetH:B:T/ のトランスポート設定

port_id
24 ビットのポート ID/アドレス
node_name
64 ビットのノード名
port_name
64 ビットのポート名

/sys/class/fc_remote_ports/rport-H:B-R/ のリモートポート設定

  • port_id
  • node_name
  • port_name
  • dev_loss_tmo

    scsi デバイスがシステムから削除されるタイミングを制御します。dev_loss_tmo がトリガーされると、scsi デバイスが削除されます。multipath.conf ファイルでは、dev_loss_tmoinfinity に設定できます。

    Red Hat Enterprise Linux 9 では、fast_io_fail_tmo オプションを設定しないと、dev_loss_tmo600 秒に制限されます。デフォルトでは、multipathd サービスが実行している場合は、Red Hat Enterprise Linux 9 で fast_io_fail_tmo5 秒に設定されています。それ以外の場合は off に設定されます。

  • fast_io_fail_tmo

    リンクに「bad」のマークが付くまでの待機秒数を指定します。リンクに「bad」のマークが付けられると、対応するパス上の既存の実行中の I/O または新しい I/O が失敗します。

    I/O がブロックされたキューに存在する場合は、dev_loss_tmo の期限が切れ、キューのブロックが解除されるまでエラーを起こしません。

    fast_io_fail_tmo を off 以外の値に設定すると、dev_loss_tmo は取得されません。fast_io_fail_tmo を off に設定すると、システムからデバイスが削除されるまで I/O は失敗します。fast_io_fail_tmo に数値を設定すると、fast_io_fail_tmo タイムアウトが発生するとすぐに I/O が失敗します。

/sys/class/fc_host/hostH/ のホスト設定

  • port_id
  • node_name
  • port_name
  • issue_lip

    リモートポートを再検出するようにドライバーに指示します。

7.4. DM Multipath がデバイスタイムアウトの上書き

recovery_tmo sysfs オプションは、特定の iSCSI デバイスのタイムアウトを制御します。次のオプションは、システム全体の recovery_tmo 値を上書きします。

  • replacement_timeout 設定オプションは、システム全体で全 iSCSI デバイスの recovery_tmo 値を上書きします。
  • DM Multipath が管理するすべての iSCSI デバイスで、DM Multipath の fast_io_fail_tmo オプションは、システム全体の recovery_tmo 値を上書きします。

    DM Multipath の fast_io_fail_tmo オプションは、ファイバーチャネルデバイスの fast_io_fail_tmo オプションを上書きします。

DM Multipath の fast_io_fail_tmo オプションは replacement_timeout よりも優先します。Red Hatでは、replacement_timeou を使用して、DM Multipathが管理するデバイスの recovery_tmo を上書きすることは推奨しません。これは、multipathd サービスが再読み込みを行うと、DM Multipath が常に recovery_tmo をリセットするためです。

第8章 RDMA を使用した NVMe over fabrics

NVMe over RDMA (NVMe/RDMA) 設定では、NVMe ターゲットと NVMe イニシエーターを設定します。

システム管理者として、次のタスクを実行して NVMe/RDMA 設定をデプロイします。

8.1. NVMe over fabric デバイスの概要

Non-volatile Memory Express (NVMe) は、ホストソフトウェアユーティリティーがソリッドステートドライブと通信できるようにするインターフェースです。

次の種類のファブリックトランスポートを使用して、NVMe over fabric デバイスを設定します。

NVMe over Remote Direct Memory Access (NVMe/RDMA)
NVMe/RDMA の設定方法の詳細は、NVMe over fabrics using RDMA を参照してください。
NVMe over Fibre Channel (FC-NVMe)
FC-NVMe の設定方法の詳細は、NVMe over fabrics using FC を参照してください。

ファイバーチャネル (FC) およびリモートダイレクトメモリーアクセス (RDMA) を使用する場合は、ソリッドステートドライブをシステムに対してローカルにする必要はありません。また、FC または RDMA コントローラーを介してリモートで設定できます。

8.2. configfs で NVMe/RDMA ターゲットの設定

この手順に従って、configfs を使用して NVMe/RDMA ターゲットを設定します。

前提条件

  • nvmet サブシステムに割り当てるブロックデバイスがあることを確認します。

手順

  1. nvmet-rdma サブシステムを作成します。

    # modprobe nvmet-rdma
    
    # mkdir /sys/kernel/config/nvmet/subsystems/testnqn
    
    # cd /sys/kernel/config/nvmet/subsystems/testnqn

    testnqn を、サブシステム名に置き換えます。

  2. ホストがこのターゲットに接続することを許可します。

    # echo 1 > attr_allow_any_host
  3. namespace を設定します。

    # mkdir namespaces/10
    
    # cd namespaces/10

    10 を、namespace の数値に置き換えます。

  4. NVMe デバイスへのパスを設定します。

    # echo -n /dev/nvme0n1 > device_path
  5. namespace を有効にします。

    # echo 1 > enable
  6. NVMe ポートでディレクトリーを作成します。

    # mkdir /sys/kernel/config/nvmet/ports/1
    
    # cd /sys/kernel/config/nvmet/ports/1
  7. mlx5_ib0 の IP アドレスを表示します。

    # ip addr show mlx5_ib0
    
    8: mlx5_ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 4092 qdisc mq state UP group default qlen 256
        link/infiniband 00:00:06:2f:fe:80:00:00:00:00:00:00:e4:1d:2d:03:00:e7:0f:f6 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
        inet 172.31.0.202/24 brd 172.31.0.255 scope global noprefixroute mlx5_ib0
           valid_lft forever preferred_lft forever
        inet6 fe80::e61d:2d03:e7:ff6/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  8. ターゲットのトランスポートアドレスを設定します。

    # echo -n 172.31.0.202 > addr_traddr
  9. RDMA をトランスポートタイプとして設定します。

    # echo rdma > addr_trtype
    
    # echo 4420 > addr_trsvcid
  10. ポートのアドレスファミリーを設定します。

    # echo ipv4 > addr_adrfam
  11. ソフトリンクを作成します。

    # ln -s /sys/kernel/config/nvmet/subsystems/testnqn   /sys/kernel/config/nvmet/ports/1/subsystems/testnqn

検証

  • NVMe ターゲットが指定のポートでリッスンし、接続リクエストの準備ができていることを確認します。

    # dmesg | grep "enabling port"
    [ 1091.413648] nvmet_rdma: enabling port 1 (172.31.0.202:4420)

関連情報

  • man ページの nvme(1)

8.3. nvmetcli を使用した NVMe/RDMA ターゲットの設定

nvmetcli ユーティリティを使用して、NVMe ターゲットを編集、表示、および起動します。nvmetcli ユーティリティーには、コマンドラインと対話式のシェルオプションが用意されています。この手順を使用して、nvmetcli で NVMe/RDMA ターゲットを設定します。

前提条件

  • nvmet サブシステムに割り当てるブロックデバイスがあることを確認します。
  • root で、以下のnvmetcli 操作を実行します。

手順

  1. nvmetcli パッケージをインストールします。

    # dnf install nvmetcli
  2. rdma.json ファイルをダウンロードします。

    # wget http://git.infradead.org/users/hch/nvmetcli.git/blob_plain/0a6b088db2dc2e5de11e6f23f1e890e4b54fee64:/rdma.json
  3. rdma.json ファイルを編集して、traddr の値を 172.31.0.202 に変更します。
  4. NVMe ターゲット設定ファイルを読み込んでターゲットを設定します。

    # nvmetcli restore rdma.json
注記

NVMe ターゲット設定ファイル名を指定しない場合は、nvmetcli/etc/nvmet/config.json ファイルを使用します。

検証

  • NVMe ターゲットが指定のポートでリッスンし、接続リクエストの準備ができていることを確認します。

    # dmesg | tail -1
    [ 4797.132647] nvmet_rdma: enabling port 2 (172.31.0.202:4420)
  • オプション:現在の NVMe ターゲットをクリアします。

    # nvmetcli clear

関連情報

  • man ページの nvmetcli および nvme(1)

8.4. NVMe/RDMA クライアントの設定

この手順を使用して、NVMe 管理コマンドラインインターフェース (nvme-cli) ツールを使用して NVMe/RDMA クライアントを設定します。

手順

  1. nvme-cli ツールをインストールします。

    # dnf install nvme-cli
  2. nvme-rdma モジュールが読み込まれていない場合は、読み込みます。

    # modprobe nvme-rdma
  3. NVMe ターゲットで利用可能なサブシステムを検出します。

    # nvme discover -t rdma -a 172.31.0.202 -s 4420
    
    Discovery Log Number of Records 1, Generation counter 2
    =====Discovery Log Entry 0======
    trtype:  rdma
    adrfam:  ipv4
    subtype: nvme subsystem
    treq:    not specified, sq flow control disable supported
    portid:  1
    trsvcid: 4420
    subnqn:  testnqn
    traddr:  172.31.0.202
    rdma_prtype: not specified
    rdma_qptype: connected
    rdma_cms:    rdma-cm
    rdma_pkey: 0x0000
  4. 検出されたサブシステムに接続します。

    # nvme connect -t rdma -n testnqn -a 172.31.0.202 -s 4420
    
    # lsblk
    NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda                            8:0    0 465.8G  0 disk
    ├─sda1                         8:1    0     1G  0 part /boot
    └─sda2                         8:2    0 464.8G  0 part
      ├─rhel_rdma--virt--03-root 253:0    0    50G  0 lvm  /
      ├─rhel_rdma--virt--03-swap 253:1    0     4G  0 lvm  [SWAP]
      └─rhel_rdma--virt--03-home 253:2    0 410.8G  0 lvm  /home
    nvme0n1
    
    # cat /sys/class/nvme/nvme0/transport
    rdma

    testnqn を、NVMe サブシステムの名前に置き換えます。

    172.31.0.202 を、目的の IP アドレスに置き換えます。

    4420 を、ポート番号に置き換えます。

検証

  • 現在接続されている NVMe デバイスの一覧を表示します。

    # nvme list
  • オプション:ターゲットからの接続を解除します。

    # nvme disconnect -n testnqn
    NQN:testnqn disconnected 1 controller(s)
    
    # lsblk
    NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda                            8:0    0 465.8G  0 disk
    ├─sda1                         8:1    0     1G  0 part /boot
    └─sda2                         8:2    0 464.8G  0 part
      ├─rhel_rdma--virt--03-root 253:0    0    50G  0 lvm  /
      ├─rhel_rdma--virt--03-swap 253:1    0     4G  0 lvm  [SWAP]
      └─rhel_rdma--virt--03-home 253:2    0 410.8G  0 lvm  /home

関連情報

第9章 FC を使用した NVMe over fabrics

特定の Broadcom Emulex および Marvell Qlogic Fibre Channel アダプターで使用する場合は、イニシエーターモードで NVMe over Fibre Channel (FC-NVMe) トランスポートに完全に対応しています。システム管理者として、以下のセクションのタスクを完了し、FC-NVMe 設定をデプロイします。

9.1. NVMe over fabric デバイスの概要

Non-volatile Memory Express (NVMe) は、ホストソフトウェアユーティリティーがソリッドステートドライブと通信できるようにするインターフェースです。

次の種類のファブリックトランスポートを使用して、NVMe over fabric デバイスを設定します。

NVMe over Remote Direct Memory Access (NVMe/RDMA)
NVMe/RDMA の設定方法の詳細は、NVMe over fabrics using RDMA を参照してください。
NVMe over Fibre Channel (FC-NVMe)
FC-NVMe の設定方法の詳細は、NVMe over fabrics using FC を参照してください。

ファイバーチャネル (FC) およびリモートダイレクトメモリーアクセス (RDMA) を使用する場合は、ソリッドステートドライブをシステムに対してローカルにする必要はありません。また、FC または RDMA コントローラーを介してリモートで設定できます。

9.2. Broadcom アダプターの NVMe イニシエーターの設定

この手順を使用して、NVMe 管理コマンドラインインターフェース (nvme-cli) ツールを使用し、Broadcom アダプタークライアントの NVMe イニシエーターを設定します。

手順

  1. nvme-cli ツールをインストールします。

    # dnf install nvme-cli

    これにより、/etc/nvme/ ディレクトリーに hostnqn ファイルが作成されます。hostnqn ファイルは、NVMe ホストを識別します。

    新しいhostnqnを生成するには、以下のコマンドを実行します。

    # nvme gen-hostnqn
  2. ローカルポートおよびリモートポートの WWNN 識別子および WWPN 識別子を見つけ、この出力を使用してサブシステム NQN を見つけます。

    # cat /sys/class/scsi_host/host*/nvme_info
    
    NVME Initiator Enabled
    XRI Dist lpfc0 Total 6144 IO 5894 ELS 250
    NVME LPORT lpfc0 WWPN x10000090fae0b5f5 WWNN x20000090fae0b5f5 DID x010f00 ONLINE
    NVME RPORT       WWPN x204700a098cbcac6 WWNN x204600a098cbcac6 DID x01050e TARGET DISCSRVC ONLINE
    
    NVME Statistics
    LS: Xmt 000000000e Cmpl 000000000e Abort 00000000
    LS XMIT: Err 00000000  CMPL: xb 00000000 Err 00000000
    Total FCP Cmpl 00000000000008ea Issue 00000000000008ec OutIO 0000000000000002
        abort 00000000 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000
    FCP CMPL: xb 00000000 Err 00000000
    # nvme discover --transport fc \
                    --traddr nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 \
                    --host-traddr nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5
    
    Discovery Log Number of Records 2, Generation counter 49530
    =====Discovery Log Entry 0======
    trtype:  fc
    adrfam:  fibre-channel
    subtype: nvme subsystem
    treq:    not specified
    portid:  0
    trsvcid: none
    subnqn:  nqn.1992-08.com.netapp:sn.e18bfca87d5e11e98c0800a098cbcac6:subsystem.st14_nvme_ss_1_1
    traddr:  nn-0x204600a098cbcac6:pn-0x204700a098cbcac6

    nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 を、traddr に置き換えます。

    nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5 を、host-traddr に置き換えます。

  3. nvme-cli を使用して NVMe ターゲットに接続します。

    # nvme connect --transport fc \
                   --traddr nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 \
                   --host-traddr nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5 \
                   -n nqn.1992-08.com.netapp:sn.e18bfca87d5e11e98c0800a098cbcac6:subsystem.st14_nvme_ss_1_1

    nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 を、traddr に置き換えます。

    nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5 を、host-traddr に置き換えます。

    nqn.1992-08.com.netapp:sn.e18bfca87d5e11e98c0800a098cbcac6:subsystem.st14_nvme_ss_1_1 を、subnqn に置き換えます。

検証

  • 現在接続されている NVMe デバイスの一覧を表示します。

    # nvme list
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     80BgLFM7xMJbAAAAAAAC NetApp ONTAP Controller                  1         107.37  GB / 107.37  GB      4 KiB +  0 B   FFFFFFFF
    # lsblk |grep nvme
    nvme0n1                     259:0    0   100G  0 disk

関連情報

9.3. QLogic アダプターの NVMe イニシエーターの設定

この手順を使用して、NVMe 管理コマンドラインインターフェース (nvme-cli) ツールを使用し、Qlogic アダプタークライアントの NVMe イニシエーターを設定します。

手順

  1. nvme-cli ツールをインストールします。

    # dnf install nvme-cli

    これにより、/etc/nvme/ ディレクトリーに hostnqn ファイルが作成されます。hostnqn ファイルは、NVMe ホストを識別します。

    新しいhostnqnを生成するには、以下のコマンドを実行します。

    # nvme gen-hostnqn
  2. qla2xxx を再読み込みします。

    # rmmod qla2xxx
    # modprobe qla2xxx
  3. ローカルポートおよびリモートポートの WWNN 識別子および WWPN 識別子を検索します。

    # dmesg |grep traddr
    
    [    6.139862] qla2xxx [0000:04:00.0]-ffff:0: register_localport: host-traddr=nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 on portID:10700
    [    6.241762] qla2xxx [0000:04:00.0]-2102:0: qla_nvme_register_remote: traddr=nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 PortID:01050d

    これらの host-traddrtraddr の値を使用して、NQN のサブシステムを検索します。

    # nvme discover --transport fc \
                    --traddr nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 \
                    --host-traddr nn-0x20000024ff19bb62:pn-0x21000024ff19bb62
    
    Discovery Log Number of Records 2, Generation counter 49530
    =====Discovery Log Entry 0======
    trtype:  fc
    adrfam:  fibre-channel
    subtype: nvme subsystem
    treq:    not specified
    portid:  0
    trsvcid: none
    subnqn:  nqn.1992-08.com.netapp:sn.c9ecc9187b1111e98c0800a098cbcac6:subsystem.vs_nvme_multipath_1_subsystem_468
    traddr:  nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6

    nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 を、traddr に置き換えます。

    nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 を、host-traddr に置き換えます。

  4. nvme-cli ツールを使用して NVMe ターゲットに接続します。

    # nvme connect  --transport fc \
                    --traddr nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 \
                    --host-traddr nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 \
                    -n nqn.1992-08.com.netapp:sn.c9ecc9187b1111e98c0800a098cbcac6:subsystem.vs_nvme_multipath_1_subsystem_468

    nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 を、traddr に置き換えます。

    nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 を、host-traddr に置き換えます。

    nqn.1992-08.com.netapp:sn.c9ecc9187b1111e98c0800a098cbcac6:subsystem.vs_nvme_multipath_1_subsystem_468 を、subnqn に置き換えます。

検証

  • 現在接続されている NVMe デバイスの一覧を表示します。

    # nvme list
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     80BgLFM7xMJbAAAAAAAC NetApp ONTAP Controller                  1         107.37  GB / 107.37  GB      4 KiB +  0 B   FFFFFFFF
    
    # lsblk |grep nvme
    nvme0n1                     259:0    0   100G  0 disk

関連情報

第10章 NVMe デバイスでのマルチパスの有効化

ファイバーチャネル(FC)などのファブリックトランスポートを介して、システムに接続されている NVMe デバイスをマルチパスすることができます。複数のマルチパスソリューションを選択することができます。

10.1. ネイティブ NVMe マルチパスと DM Multipath

NVMeデバイスは、ネイティブなマルチパス機能をサポートしています。NVMe にマルチパスを設定する場合、標準のDM Multipath フレームワークと NVMe のネイティブなマルチパスのどちらかを選択できます。

DM Multipath と NVMe のネイティブマルチパスは、どちらも NVMe デバイスのマルチパス方式である ANA(Asymmetric Namespace Access)に対応しています。ANAは、ターゲットとイニシエーター間の最適なパスを特定し、パフォーマンスを向上させます。

ネイティブ NVMe マルチパスを有効にすると、すべての NVMe デバイスにグローバルに適用されます。より高いパフォーマンスを提供できますが、DM Multipath が提供するすべての機能は含まれていません。例えば、ネイティブの NVMe マルチパスは、failoverround-robin のパス選択方法のみをサポートしています。

デフォルトでは、NVMe マルチパスは Red Hat Enterprise Linux 9 で有効になっており、これは推奨されるマルチパスソリューションです。

10.2. ネイティブ NVMe マルチパスの実現

この手順では、ネイティブの NVMe マルチパスソリューションを使用して、接続された NVMe デバイスでマルチパスを有効にします。

前提条件

  • NVMe デバイスがシステムに接続されていることを確認します。

    ファブリックトランスポートを介した NVMe の接続の詳細については、Overview of NVMe over fabric devices を参照してください。

手順

  1. カーネルでネイティブ NVMe マルチパスが有効になっているかどうかを確認します。

    # cat /sys/module/nvme_core/parameters/multipath

    コマンドは以下のいずれかを表示します。

    N
    ネイティブ NVMe マルチパスは無効です。
    Y
    ネイティブ NVMe マルチパスは有効です。
  2. ネイティブ NVMe マルチパスが無効になっている場合は、以下のいずれかの方法で有効にしてください。

    • カーネルオプションの使用

      1. カーネルのコマンドラインに nvme_core.multipath=Y オプションを追加します。

        # grubby --update-kernel=ALL --args="nvme_core.multipath=Y"
      2. 64 ビットの IBM Z アーキテクチャでは、ブートメニューを更新します。

        # zipl
      3. システムを再起動します。
    • カーネルモジュール設定ファイルの使用

      1. 以下の内容で /etc/modprobe.d/nvme_core.conf 設定ファイルを作成します。

        options nvme_core multipath=Y
      2. initramfs ファイルシステムをバックアップします。

        # cp /boot/initramfs-$(uname -r).img \
             /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
      3. initramfs ファイルシステムを再構築します。

        # dracut --force --verbose
      4. システムを再起動します。
  3. オプション:実行中のシステムで、NVMe デバイスの I/O ポリシーを変更して、利用可能なすべてのパスに I/O を分散させます。

    # echo "round-robin" > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
  4. オプション:udev ルールを使用して I/O ポリシーを永続的に設定します。以下の内容で /etc/udev/rules.d/71-nvme-io-policy.rules ファイルを作成します。

    ACTION=="add|change", SUBSYSTEM=="nvme-subsystem", ATTR{iopolicy}="round-robin"

検証

  1. システムが NVMe デバイスを認識していることを確認します。

    # nvme list
    
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme0n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
  2. 接続されているすべての NVMe サブシステムをリストアップします。

    # nvme list-subsys
    
    nvme-subsys0 - NQN=testnqn
    \
     +- nvme0 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme1 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme2 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
     +- nvme3 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live

    アクティブトランスポートタイプを確認します。例えば、nvme0 fc はファイバーチャネルトランスポートで接続されていることを示し、nvme tcp は TCP で接続されていることを示しています。

  3. カーネルオプションを編集した場合は、カーネルのコマンドラインでネイティブ NVMe マルチパスが有効になっていることを確認してください。

    # cat /proc/cmdline
    
    BOOT_IMAGE=[...] nvme_core.multipath=Y
  4. DM Multipath が NVMe 名前空間を、たとえば nvme0n1 から nvme3n1 として ではなく、たとえばnvme0c0n1 から nvme0c3n1 として報告することを確認します。

    # multipath -e -ll | grep -i nvme
    
    uuid.8ef20f70-f7d3-4f67-8d84-1bb16b2bfe03 [nvme]:nvme0n1 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
    
    uuid.44c782b4-4e72-4d9e-bc39-c7be0a409f22 [nvme]:nvme0n2 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
  5. I/O ポリシーを変更した場合は、NVMe デバイスでround-robin がアクティブな I/O ポリシーになっていることを確認してください。

    # cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
    
    round-robin

10.3. NVMe デバイスでの DM Multipath の有効化

この手順では、DM Multipath ソリューションを使用して、接続された NVMe デバイスでマルチパスを有効にします。

前提条件

  • NVMe デバイスがシステムに接続されていることを確認します。

    ファブリックトランスポートを介した NVMe の接続の詳細については、Overview of NVMe over fabric devices を参照してください。

手順

  1. ネイティブ NVMe マルチパスが無効になっていることを確認します。

    # cat /sys/module/nvme_core/parameters/multipath

    コマンドは以下のいずれかを表示します。

    N
    ネイティブ NVMe マルチパスは無効です。
    Y
    ネイティブ NVMe マルチパスは有効です。
  2. ネイティブ NVMe マルチパスが有効な場合は、無効にします。

    1. カーネルのコマンドラインから nvme_core.multipath=Y オプションを削除しました。

      # grubby --update-kernel=ALL --remove-args="nvme_core.multipath=Y"
    2. 64 ビットの IBM Z アーキテクチャでは、ブートメニューを更新します。

      # zipl
    3. options nvme_core multipath=Y 行が存在する場合は、/etc/modprobe.d/nvme_core.conf ファイルから削除します。
    4. システムを再起動します。
  3. DM Multipathが有効になっていることを確認してください。

    # systemctl enable --now multipathd.service
  4. 利用可能なすべてのパスに I/O を分配します。/etc/multipath.conf ファイルに以下の内容を追加します。

    device {
      vendor "NVME"
      product ".*"
      path_grouping_policy    group_by_prio
    }
    注記

    DM Multipath が NVMe デバイスを管理する場合、/sys/class/nvme-subsystem/nvme-subsys0/iopolicy 設定ファイルは I/O ディストリビューションには影響を与えません。

  5. 設定の変更を適用するために、multipathd サービスをリロードします。

    # multipath -r
  6. initramfs ファイルシステムをバックアップします。

    # cp /boot/initramfs-$(uname -r).img \
         /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
  7. initramfs ファイルシステムを再構築します。

    # dracut --force --verbose

検証

  1. システムが NVMe デバイスを認識していることを確認します。

    # nvme list
    
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme0n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme1n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme1n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme2n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme2n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme3n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme3n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
  2. 接続されているすべての NVMe サブシステムを一覧表示します。コマンドがそれらを、たとえば、nvme0c0n1 から nvme0c3n1 としてではなく、たとえば、nvme0n1 から nvme3n2として報告することを確認します。

    # nvme list-subsys
    
    nvme-subsys0 - NQN=testnqn
    \
     +- nvme0 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme1 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme2 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
     +- nvme3 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
    # multipath -ll
    
    mpathae (uuid.8ef20f70-f7d3-4f67-8d84-1bb16b2bfe03) dm-36 NVME,Linux
    size=233G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=50 status=active
      |- 0:1:1:1  nvme0n1 259:0   active ready running
      |- 1:2:1:1  nvme1n1 259:2   active ready running
      |- 2:3:1:1  nvme2n1 259:4   active ready running
      `- 3:4:1:1  nvme3n1 259:6   active ready running
    
    mpathaf (uuid.44c782b4-4e72-4d9e-bc39-c7be0a409f22) dm-39 NVME,Linux
    size=233G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=50 status=active
      |- 0:1:2:2  nvme0n2 259:1   active ready running
      |- 1:2:2:2  nvme1n2 259:3   active ready running
      |- 2:3:2:2  nvme2n2 259:5   active ready running
      `- 3:4:2:2  nvme3n2 259:7   active ready running

第11章 スワップの使用

このセクションでは、スワップ領域の概要と、スワップ領域の追加および削除方法を説明します。

11.1. スワップ領域の概要

Linux の スワップ領域 は、物理メモリー (RAM) が不足すると使用されます。システムに多くのメモリーリソースが必要で、RAM が不足すると、メモリーの非アクティブなページがスワップ領域に移動します。スワップ領域は、RAM が少ないマシンで役に立ちますが、RAM の代わりに使用しないようにしてください。

スワップ領域はハードドライブにあり、そのアクセス速度は物理メモリーに比べると遅くなります。スワップ領域の構成は、専用のスワップパーティション (推奨)、スワップファイル、またはスワップパーティションとスワップファイルの組み合せが考えられます。

過去数年、推奨されるスワップ領域のサイズは、システムの RAM サイズに比例して増加していました。しかし、最近のシステムには通常、数百ギガバイトの RAM が含まれます。結果として、推奨されるスワップ領域は、システムのメモリーではなく、システムメモリーのワークロードの機能とみなされます。

スワップ領域の追加

以下は、さまざまな方法でスワップ領域を追加する方法です。

スワップ領域の削除

スワップ領域を削除するには、以下の異なる方法を使用します。

11.3. LVM2 論理ボリュームでのスワップ領域の拡張

この手順では、既存の LVM2 論理ボリュームでスワップ領域を拡張する方法を説明します。ここでは、2 GB 拡張するボリュームを /dev/VolGroup00/LogVol01 とします。

前提条件

  • 十分なディスク領域がある。

手順

  1. 関連付けられている論理ボリュームのスワップ機能を無効にします。

    # swapoff -v /dev/VolGroup00/LogVol01
  2. LVM2 論理ボリュームのサイズを 2 GB 増やします。

    # lvresize /dev/VolGroup00/LogVol01 -L +2G
  3. 新しいスワップ領域をフォーマットします。

    # mkswap /dev/VolGroup00/LogVol01
  4. 拡張論理ボリュームを有効にします。

    # swapon -v /dev/VolGroup00/LogVol01

検証

  • スワップ論理ボリュームが正常に拡張され、アクティブになったかをテストするには、次のコマンドを使用して、アクティブなスワップ領域を調べます。

    $ cat /proc/swaps
    $ free -h

11.4. スワップの LVM2 論理ボリュームの作成

この手順では、スワップ用に LVM2 論理ボリュームを作成する方法を説明します。ここでは、追加するスワップボリュームを /dev/VolGroup00/LogVol02 とします。

前提条件

  • 十分なディスク領域がある。

手順

  1. サイズが 2 GB の LVM2 論理ボリュームを作成します。

    # lvcreate VolGroup00 -n LogVol02 -L 2G
  2. 新しいスワップ領域をフォーマットします。

    # mkswap /dev/VolGroup00/LogVol02
  3. 次のエントリーを /etc/fstab ファイルに追加します。

    /dev/VolGroup00/LogVol02 swap swap defaults 0 0
  4. システムが新しい設定を登録するように、マウントユニットを再生成します。

    # systemctl daemon-reload
  5. 論理ボリュームでスワップをアクティブにします。

    # swapon -v /dev/VolGroup00/LogVol02

検証

  • スワップ論理ボリュームが正常に作成され、アクティブになったかをテストするには、次のコマンドを使用して、アクティブなスワップ領域を調べます。

    $ cat /proc/swaps
    $ free -h

11.5. スワップファイルの作成

この手順では、スワップファイルの作成方法を説明します。

前提条件

  • 十分なディスク領域がある。

手順

  1. 新しいスワップファイルのサイズをメガバイト単位で指定してから、そのサイズに 1024 をかけてブロック数を指定します。たとえばスワップファイルのサイズが 64 MB の場合は、ブロック数が 65536 になります。
  2. 空のファイルの作成:

    # dd if=/dev/zero of=/swapfile bs=1024 count=65536

    65536 を、目的のブロックサイズと同じ値に置き換えます。

  3. 次のコマンドでスワップファイルをセットアップします。

    # mkswap /swapfile
  4. スワップファイルのセキュリティーを変更して、全ユーザーで読み込みができないようにします。

    # chmod 0600 /swapfile
  5. システムの起動時にスワップファイルを有効にするには、次のエントリーを使用して/etc/fstab ファイルを編集します。

    /swapfile swap swap defaults 0 0

    次にシステムが起動すると新しいスワップファイルが有効になります。

  6. システムが新しい /etc/fstab 設定を登録するように、マウントユニットを再生成します。

    # systemctl daemon-reload
  7. すぐにスワップファイルをアクティブにします。

    # swapon /swapfile

検証

  • 新しいスワップファイルが正常に作成され、有効になったかをテストするには、次のコマンドを使用して、アクティブなスワップ領域を調べます。

    $ cat /proc/swaps
    $ free -h

11.6. LVM2 論理ボリュームでのスワップ領域の縮小

この手順では、LVM2 論理ボリュームでスワップを減らす方法を説明します。ここでは、縮小するボリュームを /dev/VolGroup00/LogVol01 とします。

手順

  1. 関連付けられている論理ボリュームのスワップ機能を無効にします。

    # swapoff -v /dev/VolGroup00/LogVol01
  2. LVM2 論理ボリュームのサイズを変更して 512 MB 削減します。

    # lvreduce /dev/VolGroup00/LogVol01 -L -512M
  3. 新しいスワップ領域をフォーマットします。

    # mkswap /dev/VolGroup00/LogVol01
  4. 論理ボリュームでスワップをアクティブにします。

    # swapon -v /dev/VolGroup00/LogVol01

検証

  • スワップ論理ボリュームが正常に削減されたかをテストするには、次のコマンドを使用して、アクティブなスワップ領域を調べます。

    $ cat /proc/swaps
    $ free -h

11.7. スワップの LVM2 論理ボリュームの削除

この手順では、スワップ用に LVM2 論理ボリュームを削除する方法を説明します。削除するスワップボリュームを /dev/VolGroup00/LogVol02 とします。

手順

  1. 関連付けられている論理ボリュームのスワップ機能を無効にします。

    # swapoff -v /dev/VolGroup00/LogVol02
  2. LVM2 論理ボリュームを削除します。

    # lvremove /dev/VolGroup00/LogVol02
  3. 次の関連エントリーを /etc/fstab ファイルから削除します。

    /dev/VolGroup00/LogVol02 swap swap defaults 0 0
  4. システムが新しい設定を登録するように、マウントユニットを再生成します。

    # systemctl daemon-reload

検証

  • 論理ボリュームが正常に削除されたかをテストするには、次のコマンドを使用して、アクティブなスワップ領域を調べます。

    $ cat /proc/swaps
    $ free -h

11.8. スワップファイルの削除

この手順では、スワップファイルを削除する方法を説明します。

手順

  1. シェルプロンプトで次のコマンドを実行してスワップファイルを無効にします (スワップファイルの場所が /swapfile であるとします)。

    # swapoff -v /swapfile
  2. /etc/fstab ファイルからエントリーを削除します。
  3. システムが新しい設定を登録するように、マウントユニットを再生成します。

    # systemctl daemon-reload
  4. 実際のファイルを削除します。

    # rm /swapfile

第12章 Fibre Channel over Ethernet の設定

IEEE T11 FC-BB-5 標準に基づく Fibre Channel over Ethernet (FCoE) は、イーサネットネットワーク上でファイバーチャネルフレームを送信するためのプロトコルです。通常、データセンターには専用の LAN およびストレージエリアネットワーク (SAN) があり、各個別設定に分けられます。FCoE は、これらのネットワークを単一のネットワーク構成とコンバージドネットワーク構成に統合します。FCoE の利点 (ハードウェアおよび電力の低さなど) の利点は以下のとおりです。

12.1. RHEL でハードウェア FCoE HBA の使用

RHEL では、ハードウェアの Fibre Channel over Ethernet (FCoE) Host Bus Adapter (HBA) を使用できます。これは、以下のドライバーでサポートされています。

  • qedf
  • bnx2fc
  • fnic

このような HBA を使用する場合は、HBA の設定で FCoE を設定します。詳細は、アダプターのドキュメントを参照してください。

HBA を設定すると、Storage Area Network (SAN) からエクスポートした論理ユニット番号 (LUN) が、/dev/sd* デバイスとして RHEL で自動的に利用可能になります。ローカルストレージデバイスと同様に、これらのデバイスを使用できます。

12.2. ソフトウェア FCoE デバイスの設定

ソフトウェア FCoE デバイスを使用すると、FCoE オフロードを部分的にサポートするイーサネットアダプターを使用し、FCoE を介して論理ユニット番号 (LUN) にアクセスできます。

重要

RHEL は、fcoe.ko カーネルモジュールを必要とするソフトウェア FCoE デバイスに対応していません。

この手順を完了すると、ストレージエリアネットワーク (SAN) からのエクスポート LUN は、/dev/sd* デバイスとして RHEL で利用可能になります。このようなデバイスは、ローカルストレージデバイスと同様に使用できます。

前提条件

  • VLAN に対応するようにネットワークスイッチを設定している。
  • SAN は VLAN を使用して、通常のイーサネットトラフィックからストレージトラフィックを分離します。
  • サーバーの HBA が BIOS で設定されている。
  • HBA がネットワークに接続されており、リンクが起動している。詳細は、HBA のドキュメントを参照してください。

手順

  1. fcoe-utils パッケージをインストールします。

    # dnf install fcoe-utils
  2. /etc/fcoe/cfg-ethx テンプレートファイルを /etc/fcoe/cfg-interface_name にコピーします。たとえば、FCoE を使用するように enp1s0 インターフェースを設定する場合は、以下のコマンドを実行します。

    # cp /etc/fcoe/cfg-ethx /etc/fcoe/cfg-enp1s0
  3. fcoe サービスを有効にして起動します。

    # systemctl enable --now fcoe
  4. インターフェース enp1s0 で FCoE VLAN を検出し、検出された VLAN のネットワークデバイスを作成して、イニシエーターを起動します。

    # fipvlan -s -c enp1s0
    Created VLAN device enp1s0.200
    Starting FCoE on interface enp1s0.200
    Fibre Channel Forwarders Discovered
    interface       | VLAN | FCF MAC
    ------------------------------------------
    enp1s0          | 200  | 00:53:00:a7:e7:1b
  5. オプション:検出されたターゲット、LUN、および LUN に関連付けられたデバイスの詳細を表示します。

    # fcoeadm -t
    Interface:        enp1s0.200
    Roles:            FCP Target
    Node Name:        0x500a0980824acd15
    Port Name:        0x500a0982824acd15
    Target ID:        0
    MaxFrameSize:     2048 bytes
    OS Device Name:   rport-11:0-1
    FC-ID (Port ID):  0xba00a0
    State:            Online
    
    LUN ID  Device Name   Capacity   Block Size  Description
    ------  -----------  ----------  ----------  ---------------------
         0  sdb           28.38 GiB      512     NETAPP LUN (rev 820a)
         ...

    この例では、SAN からの LUN 0 が /dev/sdb デバイスとしてホストに割り当てられていることを示しています。

検証

  • アクティブなすべての FCoE インターフェースの情報を表示します。

    # fcoeadm -i
    Description:      BCM57840 NetXtreme II 10 Gigabit Ethernet
    Revision:         11
    Manufacturer:     Broadcom Inc. and subsidiaries
    Serial Number:    000AG703A9B7
    
    Driver:           bnx2x Unknown
    Number of Ports:  1
    
        Symbolic Name:     bnx2fc (QLogic BCM57840) v2.12.13 over enp1s0.200
        OS Device Name:    host11
        Node Name:         0x2000000af70ae935
        Port Name:         0x2001000af70ae935
        Fabric Name:       0x20c8002a6aa7e701
        Speed:             10 Gbit
        Supported Speed:   1 Gbit, 10 Gbit
        MaxFrameSize:      2048 bytes
        FC-ID (Port ID):   0xba02c0
        State:             Online

関連情報

第13章 テープデバイスの管理

テープデバイスは、データが保存され、順次アクセスされるテープです。データは、テープドライブのヘルプを使ってこのテープデバイスに書き込まれます。テープデバイスにデータを保存するためにファイルシステムを作成する必要はありません。テープドライブは、SCSI、FC、USB、SATA などのさまざまなインターフェースを備えたホストコンピューターに接続できます。

13.1. テープデバイスの種類

以下は、さまざまなタイプのテープデバイスの一覧です。

  • /dev/st0 は、テープの再構築デバイスです。
  • /dev/nst0 は、再構築されていないテープデバイスです。日次バックアップには、非レスキューデバイスを使用します。

テープデバイスを使用する利点は複数あります。コスト効率と安定性が維持されます。テープデバイスはデータ破損に対して回復性があり、データの保持に適しています。

13.2. テープドライブ管理ツールのインストール

mt コマンドを使用して、データを送受信します。mt ユーティリティーはテープドライブの操作を制御します。st ユーティリティーは SCSI テープドライバーに使用されます。この手順では、テープドライブの操作用に mt-st パッケージをインストールする方法を説明します。

手順

  • mt-st パッケージをインストールします。

    # dnf install mt-st

関連情報

  • mt(1) および st(4) の man ページ

13.3. テープデバイスのリワッピングへの書き込み

再構築されたテープデバイスは、すべての操作の後にテープを再ワインします。データをバックアップするには、tar コマンドを使用できます。デフォルトでは、テープデバイスでは ブロックサイズ は 10KB(bs=10k)です。export tap E =/dev/st0属性を使用して tapE 環境変数を設定できます。代わりに -f device オプションを使用してテープデバイスファイルを指定します。このオプションは、複数のテープデバイスを使用する場合に役に立ちます。

前提条件

  1. mt-st パッケージがインストールされている。詳細は、テープドライブ管理ツールのインストール を参照してください。
  2. テープドライブを読み込みます。

    # mt -f /dev/st0 load

手順

  1. テープヘッドを確認します。

    # mt -f /dev/st0 status
    
    SCSI 2 tape drive:
    File number=-1, block number=-1, partition=0.
    Tape block size 0 bytes. Density code 0x0 (default).
    Soft error count since last status=0
    General status bits on (50000):
     DR_OPEN IM_REP_EN

    ここでは、以下のようになります。

    • 現在の ファイル番号 は -1 です。
    • block number はテープヘッドを定義します。デフォルトでは、-1 に設定されます。
    • block size 0 は、テープデバイスのブロックサイズが固定されていないことを示します。
    • Soft error count は、mt status コマンドの実行後に発生したエラーの数を示します。
    • General status bits は、テープデバイスの統計を表示します。
    • DR_OPEN は、ドアが開き、テープデバイスが空であることを示します。IM_REP_EN は即時レポートモードです。
  2. テープデバイスが空でない場合は、それを上書きします。

    # tar -czf /dev/st0 _/source/directory

    このコマンドは、テープデバイスのデータを /source/directory の内容で上書きします。

  3. /source/directory をテープデバイスにバックアップします。

    # tar -czf /dev/st0 _/source/directory
    tar: Removing leading `/' from member names
    /source/directory
    /source/directory/man_db.conf
    /source/directory/DIR_COLORS
    /source/directory/rsyslog.conf
    [...]
  4. テープデバイスのステータスを表示します。

    # mt -f /dev/st0  status

検証手順

  • テープデバイスにあるすべてのファイルの一覧を表示します。

    # tar -tzf /dev/st0
    /source/directory/
    /source/directory/man_db.conf
    /source/directory/DIR_COLORS
    /source/directory/rsyslog.conf
    [...]

関連情報

13.4. テープ以外のデバイスへの書き込み

特定のコマンドの実行を完了した後、テープ以外のテープデバイスは、テープを現在のステータスに残します。たとえば、バックアップ後に、アンワッキング以外のテープデバイスにさらにデータを追加できます。また、これを使用して予期しない再帰を回避することもできます。

前提条件

  1. mt-st パッケージがインストールされている。詳細は、テープドライブ管理ツールのインストール を参照してください。
  2. テープドライブを読み込みます。

    # mt -f /dev/nst0 load

手順

  1. 再構築されていないテープデバイス /dev/nst0 のテープヘッドを確認します。

    # mt -f /dev/nst0 status
  2. ヘッドまたはテープの最後でポインターを指定します。

    # mt -f /dev/nst0 rewind
  3. テープデバイスにデータを追加します。

    # mt -f /dev/nst0 eod
    # tar -czf /dev/nst0 /source/directory/
  4. /source/directory/ をテープデバイスにバックアップします。

    # tar -czf /dev/nst0 /source/directory/
    tar: Removing leading `/' from member names
    /source/directory/
    /source/directory/man_db.conf
    /source/directory/DIR_COLORS
    /source/directory/rsyslog.conf
    [...]
  5. テープデバイスのステータスを表示します。

    # mt -f /dev/nst0  status

検証手順

  • テープデバイスにあるすべてのファイルの一覧を表示します。

    # tar -tzf /dev/nst0
    /source/directory/
    /source/directory/man_db.conf
    /source/directory/DIR_COLORS
    /source/directory/rsyslog.conf
    [...]

関連情報

13.5. テープデバイスでのテープヘッドの切り替え

以下の手順に従って、テープデバイス内のテープヘッドを切り替えます。

前提条件

  1. mt-st パッケージがインストールされている。詳細は、テープドライブ管理ツールのインストール を参照してください。
  2. データはテープデバイスに書き込まれます。詳細は、「テープデバイスの 作成」または「テープ 以外のテープデバイス への書き込み」を参照 してください。

手順

  • テープポインターの現在の場所を表示するには、次のコマンドを実行します。

    # mt -f /dev/nst0 tell
  • テープヘッドを切り替えるには、テープデバイスにデータを追加します。

    # mt -f /dev/nst0 eod
  • 前のレコードに移動するには、以下を実行します。

    # mt -f /dev/nst0 bsfm 1
  • レコードに移動するには、以下を行います。

    # mt -f /dev/nst0 fsf 1

関連情報

  • mt(1) man page

13.6. テープデバイスからのデータの復元

テープデバイスからデータを復元するには、tar コマンドを使用します。

前提条件

  1. mt-st パッケージがインストールされている。詳細は、テープドライブ管理ツールのインストール を参照してください。
  2. データはテープデバイスに書き込まれます。詳細は、「テープデバイスを 再作成するための書き方、またはアンワッキング 以外のテープデバイス への書き込み」 を参照してください。

手順

  • テープデバイス /dev/st0 を再構築するには、次のコマンドを実行します。

    • /source/directory/ を復元します。

      # tar -xzf /dev/st0 /source/directory/
  • 再構築されていないテープデバイス /dev/nst0 の場合:

    • テープデバイスの巻き戻し:

      # mt -f /dev/nst0 rewind
    • etc ディレクトリーを復元します。

      # tar -xzf /dev/nst0 /source/directory/

関連情報

  • mt(1) および tar(1) の man ページ

13.7. テープデバイスのデータの消去

テープデバイスからデータを削除するには、Erase オプションを使用します。

前提条件

  1. mt-st パッケージがインストールされている。詳細は、テープドライブ管理ツールのインストール を参照してください。
  2. データはテープデバイスに書き込まれます。詳細は、「テープデバイスを 再作成するための書き方、またはアンワッキング 以外のテープデバイス への書き込み」 を参照してください。

手順

  1. テープデバイスからデータを削除します。

    # mt -f /dev/st0 erase
  2. テープデバイスのアンロード:

    mt -f /dev/st0 offline

関連情報

  • mt(1) man page

13.8. テープコマンド

以下は、一般的な mt コマンドです。

表13.1 mt コマンド

Command説明

mt -f /dev/st0 status

テープデバイスの状態を表示します。

mt -f /dev/st0 erase

テープ全体を消去します。

mt -f /dev/nst0 rewind

テープデバイスを巻き戻します。

mt -f /dev/nst0 fsf n

テープヘッドを正引きレコードに切り替えます。ここで、n はオプションのファイル数です。ファイル数を指定すると、テープヘッドはレコード n 件をスキップします。

mt -f /dev/nst0 bsfm n

テープヘッドを以前のレコードに切り替えます。

mt -f /dev/nst0 eod

テープヘッドをデータの最後に切り替えます。