Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

13.2.3.8. SCSI 장치를 사용하는 vHBA 기반 스토리지 풀

참고
가상 머신 관리자를 사용하여 SCSI 장치를 사용하여 vHBA 기반 스토리지 풀을 생성할 수 없습니다.
권장 사항
NPIV(N_Port ID Virtualization)는 단일 물리 파이버 채널 버스 어댑터(HBA)를 공유할 수 있는 소프트웨어 기술입니다. 이를 통해 여러 게스트가 여러 물리적 호스트의 동일한 스토리지를 볼 수 있으므로 스토리지에 대한 마이그레이션 경로가 쉬워집니다. 따라서 올바른 스토리지 경로가 지정된 경우 스토리지를 생성하거나 복사하기 위해 마이그레이션이 필요하지 않습니다.
가상화에서 가상 호스트 버스 어댑터 또는 vHBA 는 가상 시스템의 논리 단위 번호(LUN)를 제어합니다. 호스트에서 여러 KVM 게스트 간에 하나의 파이버 채널 장치 경로를 공유하려면 각 가상 머신에 대해 vHBA를 생성해야 합니다. 여러 KVM 게스트에서 단일 vHBA를 사용해서는 안 됩니다.
NPIV의 각 vHBA는 부모 HBA와 WWNN (WWNN) 및 WWNN(WWNN) 및 WWPN(W Wide Port Name)에 의해 식별됩니다. 스토리지 경로는 WWNN 및 WWPN 값에 따라 결정됩니다. 상위 HBA는 scsi_host# 또는 WWNN/WWPN 쌍으로 정의할 수 있습니다.
참고
상위 HBA가 scsi_host# 으로 정의되고 하드웨어가 호스트 시스템에 추가되면 scsi_host# 할당이 변경될 수 있습니다. 따라서 WWNN/WWPN 쌍을 사용하여 상위 HBA를 정의하는 것이 좋습니다.
vHBA 구성을 유지하므로 vHBA를 기반으로 libvirt 스토리지 풀을 정의하는 것이 좋습니다.
libvirt 스토리지 풀을 사용하면 다음과 같은 두 가지 주요 이점이 있습니다.
  • libvirt 코드는 virsh 명령 출력을 사용하여 LUN의 경로를 쉽게 찾을 수 있습니다.
  • 가상 머신 마이그레이션은 대상 머신에서 동일한 vHBA 이름으로 스토리지 풀을 정의하고 시작해야 합니다. 이렇게 하려면 가상 머신의 XML 구성에 vHBA LUN, libvirt 스토리지 풀 및 볼륨 이름을 지정해야 합니다. 예를 들어 13.2.3.8절. “SCSI 장치를 사용하는 vHBA 기반 스토리지 풀” 을 참조하십시오.
참고
vHBA를 만들기 전에 호스트 LUN에서 SAN(Storage array) 측 zoning을 구성하여 게스트 간에 격리를 제공하고 데이터 손상 가능성을 방지하는 것이 좋습니다.
영구 vHBA 구성을 만들려면 먼저 아래 형식을 사용하여 libvirt 'scsi' 스토리지 풀 XML 파일을 만듭니다. 동일한 물리적 HBA에서 스토리지 풀을 사용하는 단일 vHBA를 생성할 때는 시스템의 /dev/disk/by-{path|id|uuid} 위치 중 하나와 같은 <path> 값에 안정적인 위치를 사용하는 것이 좋습니다.
동일한 물리 HBA에서 스토리지 풀을 사용하는 여러 vHBA를 생성하는 경우 <path> 필드의 값은 /dev/ 여야 합니다. 그렇지 않으면 스토리지 풀 볼륨은 vHBA 중 하나에만 표시되고 호스트의 장치는 NPIV 구성을 사용하여 여러 게스트에 노출할 수 없습니다.
<path><target> 의 요소에 대한 자세한 내용은 업스트림 libvirt 문서를 참조하십시오.
사전 요구 사항
SCSI 장치로 vHBA 기반 스토리지 풀을 생성하기 전에 vHBA를 생성합니다.

절차 13.10. vHBA 생성

  1. 호스트 시스템에서 HBA 검색

    호스트 시스템에서 HBA를 찾으려면 virsh nodedev-list --cap vports 명령을 사용합니다.
    다음 예제에서는 vHBA를 지원하는 두 개의 HBA가 있는 호스트를 보여줍니다.
    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
    
  2. HBA의 세부 정보 확인

    virsh nodedev-dumpxml HBA_device 명령을 사용하여 HBA의 세부 정보를 확인합니다.
    # virsh nodedev-dumpxml scsi_host3
    명령의 출력에는 vHBA를 생성하는 데 사용되는 <name>, <wwnn><wwpn> 필드가 나열됩니다. <max_vports> 에는 지원되는 최대 vHBA 수가 표시됩니다. 예를 들면 다음과 같습니다.
    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>
    이 예에서 <max_vports> 값은 HBA 구성에서 사용할 수 있는 총 127개의 가상 포트가 있음을 보여줍니다. <vports> 값은 현재 사용 중인 가상 포트 수를 표시합니다. 이 값은 vHBA를 생성한 후 업데이트됩니다.
  3. vHBA 호스트 장치 만들기

    vHBA 호스트에 대해 다음 중 하나와 유사한 XML 파일을 만듭니다. 이 예에서 파일 이름은 vhba_host3.xml 입니다.
    이 예에서는 scsi_host3 을 사용하여 상위 vHBA를 설명합니다.
    # cat vhba_host3.xml
    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    이 예에서는 WWNN/WWPN 쌍을 사용하여 상위 vHBA를 설명합니다.
    # cat vhba_host3.xml
    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    참고
    WWNN 및 WWPN 값은 절차 13.10. “vHBA 생성” 에 표시된 HBA 세부 정보에 있는 값과 일치해야 합니다.
    <parent> 필드는 이 vHBA 장치와 연결할 HBA 장치를 지정합니다. <device> 태그의 세부 정보는 다음 단계에서 호스트에 대한 새 vHBA 장치를 만드는 데 사용됩니다. nodedev XML 형식에 대한 자세한 내용은 libvirt 업스트림 페이지를 참조하십시오.
  4. vHBA 호스트 장치에서 새 vHBA 생성

    vhba_host3 을 기반으로 vHBA를 생성하려면 virsh nodedev-create 명령을 사용합니다.
    # virsh nodedev-create vhba_host3.xml
    Node device scsi_host5 created from vhba_host3.xml
  5. vHBA 확인

    virsh nodedev-dumpxml 명령을 사용하여 새 vHBA의 세부 정보(scsi_host5)를 확인합니다.
    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>
vHBA를 확인한 후 스토리지 풀을 정의 하여 스토리지 풀을 계속 생성합니다.
매개 변수
다음 표에서는 vHBA 기반 스토리지 풀을 생성하기 위한 XML 파일, virsh pool-define-as 명령 및 Virtual Machine Manager 애플리케이션에 필요한 매개 변수 목록을 제공합니다.

표 13.8. vHBA 기반 스토리지 풀 매개변수

설명XMLpool-define-as
스토리지 풀의 유형입니다. <pool type='scsi'> scsi
스토리지 풀의 이름 <name>name</name> --adapter-name name
vHBA의 식별자입니다. 상위 속성은 선택 사항입니다.

<source>
  <adapter type='fc_host'
  [parent=parent_scsi_device]
  wwnn='WWNN'
  wwpn='WWPN' />
</source>

[--adapter-parent parent]
--adapter-wwnn wwnn
--adapter-wpnn wwpn

대상을 지정하는 경로입니다. 이는 스토리지 풀에 사용되는 경로입니다.

<target>
  <path>target_path</path>
</target>

target path_to_pool
중요
<path> 필드가 /dev/ 이면 libvirt 는 볼륨 장치 경로에 고유한 짧은 장치 경로를 생성합니다. 예: /dev/sdc. 그렇지 않으면 물리적 호스트 경로가 사용됩니다. 예: /dev/disk/by-path/pci-0000:10:00.0-fc-0x500x5006016044602198-lun-0. 고유한 짧은 장치 경로를 사용하면 여러 스토리지 풀에서 동일한 볼륨을 여러 게스트에 나열할 수 있습니다. 여러 게스트에서 물리적 호스트 경로를 사용하는 경우 중복 장치 유형 경고가 발생할 수 있습니다.
참고
<adapter> 필드에서 parent 속성을 사용하여 다양한 경로에 따라 NPIV LUN을 사용할 수 있는 물리적 HBA 부모를 식별할 수 있습니다. 이 필드 scsi_hostNvportsmax_vports 속성과 결합하여 상위 ID를 완료합니다. parent, parent_wwnn, parent_wwpn 또는 parent_fabric_wwn 속성은 호스트가 동일한 HBA를 재부팅한 후 다양한 보장을 제공합니다.
  • parent 을 지정하지 않으면 libvirt 에서 NPIV를 지원하는 첫 번째 scsi_hostN 어댑터를 사용합니다.
  • parent 만 지정하면 구성에 추가 SCSI 호스트 어댑터가 추가되는 경우 문제가 발생할 수 있습니다.
  • parent_wwnn 또는 parent_wwpn 을 지정하면 호스트가 동일한 HBA를 재부팅한 후 사용됩니다.
  • parent_fabric_wwn 을 사용하는 경우, 호스트가 scsi_hostN 사용된 와 관계없이 동일한 패브릭의 HBA를 재부팅한 후 선택합니다.
virsh 를 사용하여 스토리지 풀을 생성하는 경우 스토리지 풀이 생성되었는지 계속 확인합니다.
다음은 vHBA 기반 스토리지 풀의 XML 파일의 예입니다. 첫 번째 예는 HBA의 유일한 스토리지 풀인 스토리지 풀의 예입니다. 두 번째 예는 단일 vHBA를 사용하고 상위 속성을 사용하여 SCSI 호스트 장치를 식별하는 여러 스토리지 풀 중 하나인 스토리지 풀에 대한 예입니다.
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
다음은 vHBA 기반 스토리지 풀을 생성하는 명령의 예입니다.
# virsh pool-define-as vhbapool_host3 scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/by-path
Pool vhbapool_host3 defined
참고
virsh 명령은 parent_wwnn, parent_wwpn 또는 parent_fabric_wwn 속성을 정의하는 방법을 제공하지 않습니다.
vHBA LUN을 사용하도록 가상 머신 구성
vHBA에 대한 스토리지 풀을 생성한 후 vHBA LUN을 가상 머신 구성에 추가해야 합니다.
  1. 가상 머신의 XML에 있는 가상 머신에 디스크 볼륨을 생성합니다.
  2. <source> 매개변수에 storage poolstorage volume 을 지정합니다.
다음은 예를 보여줍니다.
<disk type='volume' device='disk'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0'/>
  <target dev='hda' bus='ide'/>
</disk>
lun 대신 disk 장치를 지정하려면 다음 예제를 참조하십시오.
<disk type='volume' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0' mode='host'/>
  <target dev='sda' bus='scsi'/>
  <shareable />
</disk>
게스트에 SCSI LUN 기반 스토리지를 추가하는 XML 구성 예제는 13.3.6.3절. “게스트에 SCSI LUN 기반 스토리지 추가” 을 참조하십시오.
하드웨어 오류가 발생할 경우 LUN을 성공적으로 다시 연결하도록 하려면 fast_io_fail_tmodev_loss_tmo 옵션을 편집하는 것이 좋습니다. 자세한 내용은 하드웨어 오류 발생 후 노출된 LUN에 대한 연결을 참조하십시오.