Red Hat Enterprise Linux で複数の LUN を設定するにはどうすればよいですか?
Environment
- Red Hat Enterprise Linux
- Red Hat Enterprise Linux 8 以降のカーネル
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 4
- Red Hat Enterprise Linux 3
Issue
- Red Hat Enterprise Linux で複数の LUN を設定するにはどうすればよいですか?
-
次のメッセージが表示されます。
kernel: scsi: On host 3 channel 0 id 1 only 511 (max_scsi_report_luns) of 522 luns reported, try increasing max_scsi_report_luns -
デフォルト設定である 511 を超える LUN を認識させる必要があります (RHEL 5、6)。
- デフォルト設定である 16,383 を超える LUN を認識させる必要があります (RHEL 7)。
- scsi_mod カーネルモジュールの max_luns および max_report_luns を設定するにはどうすればよいですか?
- RHEL 5 以前のリリースでは、/etc/modprobe.conf を編集することで、max_luns や max_report_luns などの scsi_mod モジュールパラメーターを変更できました。RHEL 6 および RHEL 7 で同じことを行うにはどうすればよいですか?
- max_luns パラメーターを増やすにはどうすればよいですか?
Resolution
- SCSI コアモジュールには、複数の LUN の数を制御するためのパラメーターがあります。
- 複数の LUN を設定する手順を以下に示します。
Red Hat Enterprise Linux 8 以降のカーネルの場合
注記: max_report_luns の値は scsi_report_lun_scan のコードから削除されており、報告されなくなりました。 デフォルトのバッファーで返せるよりも多くの LUN 値をデバイスが持っている場合、LUN データのバッファーを自動的に拡張して REPORT_LUNS コマンドを再試行するように、カーネルの SCSI スキャンコードが変更されました。
max_luns の値を変更するには、/etc/default/grub のカーネルオプションの行を変更する必要があります。 変更する必要がある /etc/default/grub 内のカーネルオプションの行は、GRUB_CMDLINE_LINUX= で始まるものです。注記: /boot/grub2/grub.cfg を直接編集しないでください。
-
多数の LUN を持つデバイスでより多くの LUN を検出させるための
max_report_lunsパラメーターは、不要になりました。 -
ストレージが REPORT LUNS コマンドをサポートしていないことは非常にまれであるため、通常
max_lunsパラメーターを変更する必要はありません。max_lunsは、REPORT LUNS コマンドの送信時にストレージが失敗ステータスを返した場合に、デバイス (lun 0、1、...max_luns) をポーリングするためにのみ使用されます。 ストレージが SCSI コマンドの REPORT LUNS をサポートしておらず、ホストに提示される最大の LUN 識別子 番号 がデフォルトの 512 (cat /sys/module/scsi_mod/parameters/max_luns) より大きい場合、許可される LUN 識別子の最大値を引き上げる必要があります。/etc/default/grubファイル内のGRUB_CMDLINE_LINUX=行に以下を追加します。GRUB_CMDLINE_LINUX=" ... rd.lvm.lv=vg_rhel7/root crashkernel=auto ... scsi_mod.max_luns=xxx ... " -
/etc/default/grub内に変更が加えられたため、ブートパーティション内の grub2 メニューファイルを再ビルドする必要があります。以下のように grub2-mkconfig -o コマンドを実行し、
/boot/grub2/grub.cfgファイルを再ビルドします。- BIOS ベースのマシン:
~]# grub2-mkconfig -o /boot/grub2/grub.cfg - UEFI ベースのマシン:
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
- BIOS ベースのマシン:
-
システムを再起動します。再起動後、追加の LUN が表示されるはずです。 変更内容は再起動後も保持されます。
Red Hat Enterprise Linux 7 の場合
注記: RHEL 7 の場合、デフォルトの max_report_luns 値は 16,383 です。 通常、この値を増やす必要はありません。
max_report_luns または max_luns の値を変更するには、/etc/default/grub のカーネルオプションの行を変更する必要があります。 パラメーターを変更する際、/usr/share/doc/kernel-doc-3.10.0/Documentation/kernel-parameters.txt に記載されている命名規則 (<module-name>.<parameter>=<value>) を使用する必要があります。 変更する必要がある /etc/default/grub 内のカーネルオプションの行は、GRUB_CMDLINE_LINUX= で始まるものです。注記: /boot/grub2/grub.cfg を直接編集しないでください。
-
SCSI REPORT LUNS コマンドで返されるリスト内の LUN の数 (カウント) が、デフォルトの 16,383 (
cat /sys/module/scsi_mod/parameters/max_report_luns) より大きい場合、report luns エントリーの値を引き上げる必要があります。/etc/default/grubファイル内のGRUB_CMDLINE_LINUX=行に変更を追加します。xxx は、単一のストレージターゲットが返す LUN の数以上の値に変更してください。GRUB_CMDLINE_LINUX=" ... rd.lvm.lv=vg_rhel7/root crashkernel=auto scsi_mod.max_report_luns=xxx ..." -
ストレージが REPORT LUNS コマンドをサポートしていないことは非常にまれであるため、通常
max_lunsパラメーターを変更する必要はありません。max_lunsは、REPORT LUNS コマンドの送信時にストレージが失敗ステータスを返した場合に、デバイス (lun 0、1、...max_luns) をポーリングするためにのみ使用されます。 ストレージが SCSI コマンドの REPORT LUNS をサポートしておらず、ホストに提示される最大の LUN 識別子 番号 がデフォルトの 512 (cat /sys/module/scsi_mod/parameters/max_luns) より大きい場合、許可される LUN 識別子の最大値を引き上げる必要があります。/etc/default/grubファイル内のGRUB_CMDLINE_LINUX=行に以下を追加します。GRUB_CMDLINE_LINUX=" ... rd.lvm.lv=vg_rhel7/root crashkernel=auto ... scsi_mod.max_luns=xxx ... " -
/etc/default/grub内に変更が加えられたため、ブートパーティション内の grub2 メニューファイルを再ビルドする必要があります。以下のように grub2-mkconfig -o コマンドを実行し、
/boot/grub2/grub.cfgファイルを再ビルドします。- BIOS ベースのマシン:
~]# grub2-mkconfig -o /boot/grub2/grub.cfg - UEFI ベースのマシン:
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
- BIOS ベースのマシン:
-
システムを再起動します。再起動後、追加の LUN が表示されるはずです。 変更内容は再起動後も保持されます。
Red Hat Enterprise Linux 6 の場合
scsi_mod がカーネルに組み込まれるようになり、バージョン 5 以前のようにロード可能なモジュールではなくなりました。カーネルのドキュメント (/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt) を参照してください。次のように記載されています。
Module parameters for modules that are built into the kernel image
are specified on the kernel command line with the module name plus
'.' plus parameter name, with '=' and value if appropriate, such as:
usbcore.blinkenlights=1
scsi_mod はカーネルにコンパイルされるようになったため、max_report_luns または max_luns の値を変更するには、上記のカーネルのドキュメントに記載されている命名規則 (<module-name>.<parameter>=<value>) を使用して /boot/grub/grub.conf 内のカーネルオプションの行を変更する必要があります。
-
SCSI REPORT LUNS コマンドで返されるリスト内の LUN の数 (カウント) が、デフォルトの 511 (
cat /sys/module/scsi_mod/parameters/max_report_luns) より大きい場合、report luns エントリーの値を引き上げる必要があります。引き上げる必要がある場合は、パラメーターを grub.conf のカーネル行にも追加します。xxx は、単一のストレージターゲットが返す LUN の数以上の値に変更してください。scsi_mod.max_report_luns=xxx -
ストレージが REPORT LUNS コマンドをサポートしていないことは非常にまれであるため、通常
max_lunsパラメーターを変更する必要はありません。max_lunsは、REPORT LUNS コマンドの送信時にストレージが失敗ステータスを返した場合に、デバイス (lun 0、1、...max_luns) をポーリングするためにのみ使用されます。 ストレージが SCSI コマンドの REPORT LUNS をサポートしておらず、ホストに提示される最大の LUN 識別子 番号 がデフォルトの 512 (cat /sys/module/scsi_mod/parameters/max_luns) より大きい場合、許可される LUN 識別子の最大値を引き上げる必要があります。grub.conf の 'kernel' 行に以下を追加します。
scsi_mod.max_luns=xxx -
システムを再起動します。再起動後、追加の LUN が表示されるはずです。 変更内容は再起動後も保持されます。
例:
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_rhel60-lv_root rd_LVM_LV=vg_rhel60/lv_root rd_LVM_LV=vg_rhel60/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet scsi_mod.max_report_luns=<yourvalue> scsi_mod.max_luns=<yourvalue>
Red Hat Enterprise Linux 3、4、5 の場合
-
カーネルモジュールの設定ファイルを変更します。
Red Hat Enterprise Linux 4 および 5 では、/etc/modprobe.conf が使用されます。
options scsi_mod max_report_luns=xxx options scsi_mod max_luns=xxxRed Hat Enterprise Linux 3 では、/etc/modules.conf を変更する必要があります。次の行を追加します。
options scsi_mod max_scsi_luns=xxx -
変更を実装するための初期 RAM ディスクを作成します。
# mkinitrd -f /boot/newimage-2.6.xx 2.6.xx(xx の代わりに、使用している正確なカーネルバージョンを追加してください)
-
システムを再起動します。再起動後、LUN が表示されるはずです。
注記: ドライバー内で HBA の最大 LUN 値を増やす必要がある場合もあります。
たとえば、Emulex または Qlogic ファイバーチャネルドライバーでこれを行う手順については、Red Hat Enterprise Linux reports lun
has a LUN larger than allowed by the host adapter を参照してください。
Root Cause
Diagnostic Steps
再起動後、次の方法で現在の数を確認できます。
cat /sys/module/scsi_mod/parameters/max_luns cat /sys/module/scsi_mod/parameters/max_report_luns
多くの場合、ホストに提示およびエクスポートされている LUN 値のセットを明確に特定することが役立ちます。 sg3_utils パッケージから利用できる SCSI REPORT LUNS コマンド (sg_luns) を使用して、LUN のリストを取得できます。
sg_luns は一意の h:c:t:* ストレージターゲットの組み合わせに対してのみ実行する必要がありますが、以下ではレビューに必要なすべてのデータを収集します。
[root@host ~]# lsscsi > sg_luns.log
[root@host ~]# ls -1c /dev/sd*[!0-9] | sort >> sg_luns.log
[root@host ~]# ls -1c /dev/sd*[!0-9] | sort | xargs -I {} sg_luns -vv {} &>> sg_luns.logsg_luns の出力をレビューして、予想されるすべての LUN が存在することを確認します。 たとえば、sda が SCSI アドレス 1:0:0:0 であり、そのストレージターゲット (1:0:0) から次の情報を取得したとします。
[root@host ~]# sg_luns -vv /dev/sda
open /dev/sda with flags=0x802
# sg_luns -vvd /dev/sdi
open /dev/sdi with flags=0x802
report luns cdb: a0 00 00 00 00 00 00 01 00 00 00 00
Lun list length = 80 which imples 10 lun entries
Output response in hex
00 00 00 00 50 00 00 00 00 00 02 00 00 00 00 00 00
10 00 03 00 00 00 00 00 00 00 04 00 00 00 00 00 00
20 00 05 00 00 00 00 00 00 00 06 00 00 00 00 00 00
30 00 07 00 00 00 00 00 00 00 08 00 00 00 00 00 00
40 00 09 00 00 00 00 00 00 00 0a 00 00 00 00 00 00
50 00 0b 00 00 00 00 00 00
Report luns [select_report=0]:
0002000000000000
Peripheral device addressing: lun=2
0003000000000000
Peripheral device addressing: lun=3
0004000000000000
Peripheral device addressing: lun=4
0005000000000000
Peripheral device addressing: lun=5
0006000000000000
Peripheral device addressing: lun=6
0007000000000000
Peripheral device addressing: lun=7
0008000000000000
Peripheral device addressing: lun=8
0009000000000000
Peripheral device addressing: lun=9
000a000000000000
Peripheral device addressing: lun=10
000b000000000000
Peripheral device addressing: lun=11
この場合、そのストレージターゲットはこのホストに 10 個の LUN (2 - 11) を提示しています。 しかし、ストレージから 15 個の LUN が提供されると想定していたのであれば、このホストへの LUN の提示に関してストレージ側の問題があり、まずその問題に対処する必要があります。
sg_luns のデータを使用して、LUN 識別子の最大値と、いずれかの report luns リスト内の LUN の最大数を特定できます。 さらに、返された LUN リストを使用して、欠落している、またはホストによって見落とされた LUN の数や、ホストの設定から欠落している LUN 番号を突き止めることができます。
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments