GNU/Linux >> Linux の 問題 >  >> Linux

Linux iSCSI ストレージ ターゲットとリモート クライアント アクセスをセットアップする方法

iSCSI は Internet Small Computer System Interface の略です。

これは TCP/IP レイヤーで機能し、SCSI コマンドをローカル エリア ネットワーク (LAN) 経由で送信できるようにします。

ブロックレベルのデータ転送を使用して、TCP/IP 経由でネットワーク上のストレージにアクセスするために使用されます。

NFS と iSCSI はよく比較されます。主な違いは、NFS はファイル レベルの実装であるのに対し、iSCSI はブロック レベルの実装であることです。

iSCSI やファイバー チャネルなどのブロック レベルの実装では、ストレージ アレイがブロックのコレクションをクライアントに提供し、クライアントは使用することを決定した任意のファイル システムで未加工のストレージをフォーマットします。

iSCSI 経由でストレージにアクセスするには、次のコンポーネントが必要です:

<オール>
  • iSCSI イニシエーター (ハードウェア/ソフトウェア) – これは、TCP/IP ネットワーク経由で iSCSI コマンドを送信できる iSCSI クライアントです。これは通常、サーバー上の NIC アダプターであり、ストレージ アレイの iscsi インターフェースと同じサブネット上に構成された IP を使用して物理的または仮想的にすることができます。
  • iSCSI ターゲット (ストレージ ノード) – これは、独自に構成できるストレージ ノードです。または、iSCSI 構成をサポートするベンダーの物理アレイにすることもできます
  • iSCSI スイッチ (オプション) – ここでは、iSCSI スイッチはオプションですが、エンタープライズ展開でホスト トラフィックを iSCSI トラフィックから分離するために、iSCSI トラフィック用に別のスイッチを使用することをお勧めします。
  • このチュートリアルでは、iSCSI 構成をサポートする独自のストレージ ノードをセットアップし、Centos 6 マシン上の iSCSI クライアントからストレージにアクセスする方法について説明します。

    RHEL 6 (CentOS 6) バージョンでも同じ手順が機能するはずです。 CentOS 7 の場合、別の記事で説明する targetcli を使用する手順が少し異なります。

    1. SCSI ターゲット ユーティリティをインストールし、tgtd を開始

    最初に、yum コマンドを使用して、ストレージ ノードに scsi-target-utils をインストールします。これは、iSCSI の構成に必要です。

    yum install scsi-target-utils
    

    システムに Perl がまだインストールされていない場合、上記のコマンドは perl と他のいくつかの依存関係 (例:sg3_utils) を自動的にインストールします。

    これにより、以下に示すように tgtadm コマンドがインストールされます。

    # which tgtadm
    /usr/sbin/tgtadm
    

    以下に示すように、SCSI ターゲット デーモンにスターを付けます。

    # service tgtd start
    Starting SCSI target daemon: [ OK ]
    

    chkconfig コマンドを使用して、システムの起動時に自動的に起動することを確認してください。

    chkconfig tgtd on
    

    2. tgtadm を使用して新しい iSCSI ターゲットを追加

    tgtadm コマンドを使用して、次の構文を使用して新しい iSCSI ターゲットをストレージ ノードに追加します:

    tgtadm --lld --mode target --op new --tid --targetname
    

    次の例では、以下の iqn でターゲット ID 1 のターゲットを作成します。

    tgtadm --lld iscsi --op new --mode target --tid 1 \
           -T iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
    

    上記のコマンドで:

    • tgtadm コマンドは Linux SCSI ターゲット管理ユーティリティです
    • –lld iscsi は、iscsi ドライバーを使用していることを指定します (–lld の代わりに -L を使用することもできます)
    • –op new は操作を指定します。この場合、新しいターゲットを作成しています (–op の代わりに -o を使用することもできます)
    • –mode target は、ターゲットを作成していることを示します。その他の可能なモードは、logicalunit、account、portal、conn、sys です。 (–mode の代わりに -m を使用することもできます)
    • –tid 1 はターゲット ID を指定します。この例では 1 です (–tid の代わりに -t を使用することもできます)
    • -T はターゲット名を指定します (-T の代わりに –targetname を使用することもできます)

    3. iSCSI ターゲット構成を表示する

    ターゲットが作成されると、以下に示すように「表示」操作を使用して詳細を表示できます。これにより、システム情報と、システムで利用可能なすべてのターゲットの LUN 情報が提供されます。

    次の出力からわかるように、1 つの LUN (LUN 0) を持つ iSCSI ドライバーである 1 つのターゲット (ターゲット 1) しかありません。

    # tgtadm --lld iscsi --op show --mode target
    Target 1: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
    System information:
    Driver: iscsi
    State: ready
    I_T nexus information:
    LUN information:
    LUN: 0
    Type: controller
    SCSI ID: IET 00010000
    SCSI SN: beaf10
    Size: 0 MB, Block size: 1
    Online: Yes
    Removable media: No
    Prevent removal: No
    Readonly: No
    Backing store type: null
    Backing store path: None
    Backing store flags:
    Account information:
    ACL information:
    

    注:上記の出力では、物理ストレージ パスをこの iSCSI にまだ関連付けていないため、「バッキング ストア パス」は現在 [なし] になっています。

    4. LUN を iSCSI ターゲットに追加

    次の例では、ストレージ ノードにマウントされ、使用可能な既存の LUN /storage/lun01 を、作成した iSCSI ターゲットに追加します。

    既存の LUN (/storage/lun01) については、以下に示すように SELinux コンテキストも適切に設定する必要があります。

    semanage fcontext -a -t tgtd_var_lib_t /storage/lun01
    
    restorecon -Rv /storage/lun01
    

    「無効なリクエスト」が表示される場合は、一時的なテスト目的で、SELinux を許容モードに設定して SELinux を無効にして、問題が解決するかどうかを確認し、問題を SELinux パーミッションに絞り込むことができます。

    ここで、tgtadm コマンドを使用して、以前に作成した iSCSI ターゲットに /storage/lun01 を追加します。

    tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \
           --lun 1 --backing-store /storage/lun01
    

    上記のコマンドで:

    • ほとんどのオプションは、上記の tgtadm コマンドで説明したものと同じです。
    • –モードの論理ユニット。以前はモードに「ターゲット」を使用していましたが、ここではモードに論理ユニットを使用していることに注意してください。
    • –lun は LUN ID を示します。この例では 1 です (–lun の代わりに -l を使用することもできます)
    • –backing-store は、ストレージ サーバー上の物理ストレージ パスを示します。この例では、/storage/lun01 です (–backing-store オプションの代わりに -b を使用することもできます)
    • –tid 1 は、この特定の LUN を、以前に作成した既存のターゲット ID 1 に接続することを示します。

    ここで、システム上の iSCSI の詳細を再度表示します。

    ただし、今回は、LUN 1 では、次の出力の「バッキング ストア パス」は、この iSCSI に関連付けたストレージ パスを指します。この例では、/storage/lun01 です。

    # tgtadm --lld iscsi --op show --mode target
    Target 1: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
    System information:
    Driver: iscsi
    State: ready
    I_T nexus information:
    LUN information:
    LUN: 1
    Type: disk
    SCSI ID: IET 00010001
    SCSI SN: beaf11
    Size: 5369 MB, Block size: 512
    Online: Yes
    Removable media: No
    Prevent removal: No
    Readonly: No
    Backing store type: rdwr
    Backing store path: /storage/lun01
    Backing store flags:
    Account information:
    ACL information:
    

    何らかの理由で、上記のコマンドを間違えて、上記で作成した LUN1 の関連付けを削除したい場合は、次のコマンドを使用してください。

    tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
    

    上記のコマンドで:

    • 前のコマンドとすべて同じです
    • しかし、ここでは -op (操作) は削除です。
    • これにより、iSCSI tid 1 (ターゲット 1) から lun1 が削除されます

    5. iSCSI の ACL 制限の設定

    次に、この scsi ターゲットにアクセスできるイニシエーターを許可するように ACL をセットアップする必要があります。

    tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
    

    上記のコマンドで:

    • ほとんどのオプションは、以前のコマンドとほとんど同じです
    • -I ALL オプションは、ターゲットがすべてのイニシエーターを受け入れることを許可していることを示します (-I の代わりに –initiator-address を使用することもできます)

    「show」操作を使用して iSCSI の詳細を表示すると、以下に示すように、出力の最後に ACL 情報が表示されます。

    # tgtadm --lld iscsi --op show --mode target
    ..
    ..
    Backing store path: /storage/lun01
    Backing store flags:
    Account information:
    ACL information:
    ALL
    

    ストレージにアクセスする必要があるクライアントのみを制限する場合は、次のコマンドを使用して特定の IP アドレスを指定できます。

    tgtadm --lld iscsi --mode target --op bind --tid 1 192.168.2.109
    

    特定のサブネットへのアクセスを制限したい場合は、以下に示すように、IP アドレスの代わりにサブネットを指定できます。

    tgtadm --lld iscsi --mode target --op bind --tid 1 192.168.2.0/24
    

    6.ポート 3260 へのアクセスを許可

    ip-tables を実行している場合は、ip-tables ルールを追加し、以下に示すようにポート 3260 を許可します。

    iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
    

    以下に示すように、netstat コマンドを使用して、ポート 3260 が開いていることを確認します。

    # netstat -tunlp | grep 3260
    tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 1248/tgtd
    tcp 0 0 :::3260 :::* LISTEN 1248/tgtd
    

    注:この時点まで、上記のコマンドはすべてストレージ サーバー ノードで実行されていました。これ以降、次のセクションのすべてのコマンドは、ストレージ サーバーに接続する必要があるクライアント マシンで実行されます。

    7.クライアント上:iSCSI の検出

    クライアントでは、iSCSI を検出するまで、新しい iSCSI ディスクは表示されません。たとえば、次の出力では何も表示されません。

    fdisk -l /dev/sdb
    

    これですべてのターゲット側の構成が完了し、クライアントから iscsi 経由で LUN にアクセスできるようになりました。以下の手順は、ストレージにアクセスするようにクライアント側を構成する方法を示しています。

    クライアント サーバーに、以下に示すように iscsi-initiator-utils パッケージをインストールします。

    yum install iscsi-initiator-utils
    

    次に、以下に示すように iscsiadm コマンドを使用して iSCSI ターゲットを検出します。

    [root@client ~]# iscsiadm --mode discovery --type sendtargets \
                    --portal 192.168.2.166
    

    上記のコマンドは、次の出力を表示します:

    192.168.2.166:3260,1 iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
    

    上記のコマンドで:

    • iscsiadm コマンドは open-iscsi 管理ユーティリティです
    • –mode discover は、ここで iSCSI サーバーを検出していることを示します。その他の可能なモードは、discoverydb、node、fw、host iface、または session です。 (–mode の代わりに -m を使用することもできます)
    • – 特定の sendtargets をここに入力します。その他の有効な値は、sendtargets、fw、および iSNS です。 sendtargets の代わりに st 省略形を使用することもできます。 (–type の代わりに -t を使用することもできます)
    • –portal は、以前にセットアップした iSCSI ストレージ ノードの IP アドレスを指定します (–portal の代わりに -p を使用することもできます)。
    • ip-address については、デフォルト以外のポート (3260 以外) で iSCSI を実行している場合は、ip-address の後に指定します。たとえば、192.168.2.166:3261

    注:「ホストへのルートがありません」というエラーが表示される場合は、ターゲットまたはクライアントの iptables が正しく構成されていません。

    8.クライアント:iSCSI ターゲット セッションにログイン

    検出プロセスが正常に完了したら、次のコマンドを使用して iSCSI ターゲット セッションにログインする必要があります:

    [root@client ~]# iscsiadm --mode node --targetname iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com \
                              --portal 192.168.2.166 --login
    

    上記のコマンドは、次の出力を表示します:

    Logging in to [iface: default, target: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com, portal: 192.168.2.166,3260] (multiple)
    Login to [iface: default, target: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com, portal: 192.168.2.166,3260] successful.
    

    上記のコマンドで:

    • ほとんどのオプションは前のコマンドと似ています。
    • モードについては、ここでは (検出ではなく) ノードを使用しています
    • -targetname は、ターゲット名を指定します。これは、iSCSI を作成したときにストレージ ノードで指定したターゲット名です (–targetname の代わりに -T を使用することもできます)
    • –login オプションは、検出されたすべてのターゲットにログインします。この場合、–portal オプションで指定されたストレージ iSCSI サーバーにログインします。

    これで、fdisk の出力に新しい iscsi デバイスが表示されるはずです。フォーマットして、lvm に追加し、必要に応じて使用できます。

    fdisk コマンドの出力にデバイスが表示されます。

    [root@client ~]# fdisk -l /dev/sdb
    Disk /dev/sdb: 5368 MB, 5368709120 bytes
    166 heads, 62 sectors/track, 1018 cylinders
    Units = cylinders of 10292 * 512 = 5269504 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000
    

    注:上記のディスクはクライアント マシンからのものではなく、iSCSI としてストレージ サーバーからのものです。


    Linux
    1. Ubuntu18.04LTSでiSCSIストレージサーバーをセットアップする方法

    2. Ubuntu20.04LTSでiSCSIストレージサーバーをセットアップする方法

    3. Linuxでローカルディレクトリとリモートディレクトリを同期する方法

    1. Debian 9StretchLinuxでNTPサーバーとクライアントをセットアップする方法

    2. CentOS / RHELおよびFedoraでVNCサーバー(Linuxリモートデスクトップアクセス)をセットアップする方法

    3. Rocky / AlmaLinux8でNFSサーバーとクライアントをセットアップする方法

    1. Windows10およびWSL2でLinuxファイルシステムにアクセスする方法

    2. LinuxデスクトップにPuttySSHクライアントをインストールして構成する方法

    3. SCP と Rsync を使用して Linux でファイルを転送する方法