13.3.6.3. 게스트에 SCSI LUN 기반 스토리지 추가
호스트 SCSI LUN을 전체적으로 게스트에 노출하는 방법은 여러 가지가 있습니다. SCSI LUN을 게스트에 노출하면 게스트의 LUN에 SCSI 명령을 직접 실행할 수 있습니다. 이는 게스트 간에 LUN을 공유하고 호스트 간에 파이버 채널 스토리지를 공유하는 수단으로 유용합니다.
SCSI LUN 기반 스토리지에 대한 자세한 내용은 SCSI 장치를 사용하는 vHBA 기반 스토리지 풀을 참조하십시오.
중요
선택 사항인
sgio
속성은 device='lun'
디스크에 대해 권한이 없는 SCSI 일반 I/O(SG_IO) 명령이 필터링되는지 여부를 제어합니다. sgio
특성은 'filtered' 또는 'filtered'
로 지정할 수 있지만 영구 예약 의 게스트를 통해 SG_IO ioctl 명령을 전달할 수 있도록 '필터되지
않음
'으로 설정해야 합니다.
sgio='unfiltered'
를 설정하는 것 외에도 게스트 간에 LUN을 공유하도록 <shareable>
요소를 설정해야 합니다. 지정되지 않은 경우 sgio
속성은 기본적으로 'filtered'
로 설정됩니다.
<disk>
XML 특성 device='lun'
은 다음 게스트 디스크 구성에 유효합니다.
type='block'
for<source dev=
'/dev/disk/by-{path|id|uuid|label}'
/><disk type='block' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b85ad1d7-lun-0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
참고<source>
장치 이름의 콜론 앞에 백슬래시가 필요합니다.type='network'
for<source protocol='iscsi'... />
<disk type='network' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-net-pool/1'> <host name='example.com' port='3260'/> <auth username='myuser'> <secret type='iscsi' usage='libvirtiscsi'/> </auth> </source> <target dev='sda' bus='scsi'/> <shareable/> </disk>
- iSCSI 또는 NPIV/vHBA 소스 풀을 SCSI 소스 풀로 사용하는 경우
type='volume'
입니다.다음 예제 XML에서는 iSCSI 소스 풀(예: iscsi-net-pool)을 SCSI 소스 풀로 사용하는 게스트를 보여줍니다.<disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='iscsi-net-pool' volume='unit:0:0:1' mode='host'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
참고<source>
태그 내의mode=
옵션은 선택 사항이지만, 사용하는 경우 'host'가'direct'
가 아닌'host'
로 설정해야 합니다.'host'
로 설정하면 libvirt에서 로컬 호스트에서 장치 경로를 찾습니다.'direct'
로 설정하면 libvirt에서 소스 풀의 소스 호스트 데이터를 사용하여 장치 경로를 생성합니다.위 예제의 iSCSI 풀(iscsi-net-pool)에는 다음과 유사한 구성이 있습니다.# virsh pool-dumpxml iscsi-net-pool <pool type='iscsi'> <name>iscsi-net-pool</name> <capacity unit='bytes'>11274289152</capacity> <allocation unit='bytes'>11274289152</allocation> <available unit='bytes'>0</available> <source> <host name='192.168.122.1' port='3260'/> <device path='iqn.2013-12.com.example:iscsi-chap-netpool'/> <auth type='chap' username='redhat'> <secret usage='libvirtiscsi'/> </auth> </source> <target> <path>/dev/disk/by-path</path> <permissions> <mode>0755</mode> </permissions> </target> </pool>
iSCSI 소스 풀에서 사용 가능한 LUN의 세부 정보를 확인하려면 다음 명령을 입력합니다.# virsh vol-list iscsi-net-pool Name Path ------------------------------------------------------------------------------ unit:0:0:1 /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-1 unit:0:0:2 /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-2
- NPIV/vHBA 소스 풀을 SCSI 소스 풀로 사용하는 경우
type='volume'
입니다.다음 예제 XML에서는 NPIV/vHBA 소스 풀(이름 vhbapool_host3)을 SCSI 소스 풀로 사용하는 게스트를 보여줍니다.<disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:1:0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
위 예제의 NPIV/vHBA 풀(vhbapool_host3)에는 다음과 유사한 구성이 있습니다.# virsh pool-dumpxml vhbapool_host3 <pool type='scsi'> <name>vhbapool_host3</name> <capacity unit='bytes'>0</capacity> <allocation unit='bytes'>0</allocation> <available unit='bytes'>0</available> <source> <adapter type='fc_host' parent='scsi_host3' managed='yes' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee045d'/> </source> <target> <path>/dev/disk/by-path</path> <permissions> <mode>0700</mode> <owner>0</owner> <group>0</group> </permissions> </target> </pool>
vHBA에서 사용 가능한 LUN의 세부 정보를 확인하려면 다음 명령을 입력합니다.# virsh vol-list vhbapool_host3 Name Path ------------------------------------------------------------------------------ unit:0:0:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0 unit:0:1:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016844602198-lun-0
SCSI 장치에서 NPIV vHBA를 사용하는 방법에 대한 자세한 내용은 13.2.3.8절. “SCSI 장치를 사용하는 vHBA 기반 스토리지 풀” 을 참조하십시오.
다음 절차에서는 SCSI LUN 기반 스토리지 장치를 게스트에 추가하는 방법을 보여줍니다. 위의
<disk device='lun'>
게스트 디스크 구성 중 하나를 이 방법으로 연결할 수 있습니다. 환경에 따라 구성을 대체합니다.
절차 13.13. 게스트에 SCSI LUN 기반 스토리지 연결
- 새 파일에 <disk> 요소를 작성하여 장치 파일을 생성하고 XML 확장자(이 예에서는 sda.xml)를 사용하여 이 파일을 저장합니다.
# cat sda.xml <disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:1:0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
- sda.xml 에서 생성된 장치를 게스트 가상 시스템과 연결합니다(예:Guest1 ).
# virsh attach-device --config Guest1 ~/sda.xml
참고--config
옵션을 사용하여 virsh attach-device 명령을 실행하려면 게스트를 다시 부팅하여 게스트에 영구적으로 장치를 추가해야 합니다. 또는 게스트에 장치를 핫플러그하는 데 사용할 수도 있는--config
대신--persistent
옵션을 사용할 수 있습니다.
또는 virt-manager 를 사용하여 게스트에서 SCSI LUN 기반 스토리지를 연결하거나 구성할 수 있습니다. virt-manager 를 사용하여 이를 구성하려면 버튼을 클릭하고 필수 매개 변수가 있는 가상 디스크를 추가하거나 이 창에서 기존 SCSI LUN 장치의 설정을 변경합니다. Red Hat Enterprise Linux 7.2 이상에서는 virt-manager 에서 SGIO 값을 구성할 수도 있습니다.
그림 13.21. virt-manager를 사용하여 SCSI LUN 스토리지 구성
하드웨어 장애 후 노출된 LUN에 다시 연결
하드웨어(예: 호스트 버스 어댑터) 오류가 발생하여 노출된 파이버 채널(FC) LUN에 대한 연결이 손실된 경우 게스트의 노출된 LUN은 하드웨어 오류가 수정된 후에도 계속 실패할 수 있습니다. 이를 방지하려면
dev_loss_tmo
및 fast_io_fail_tmo
커널 옵션을 편집합니다.
dev_loss_tmo
는 SCSI 장치가 실패하는 후 실패한 것으로 표시하기 전에 SCSI 계층을 대기하는 시간을 제어합니다. 시간 제한을 방지하려면 옵션을2147483647
인 최대 값으로 설정하는 것이 좋습니다.fast_io_fail_tmo
는 I/O로 실패하기 전에 SCSI 장치가 실패한 후 SCSI 계층을 대기하는 시간을 제어합니다. 커널에서dev_loss_tmo
를 무시하지 않도록 하려면 이 옵션의 값을dev_loss_tmo
값보다 낮은 수로 설정합니다.
dev_loss_tmo
및 fast_io_fail
값을 수정하려면 다음 중 하나를 수행합니다.
/etc/multipath.conf
파일을 편집하고defaults
섹션에 값을 설정합니다.defaults { ... fast_io_fail_tmo 20 dev_loss_tmo infinity }
- 다음과 같이 FC 호스트 또는 원격 포트 수준에서
dev_loss_tmo
및fast_io_fail
를 설정합니다.# echo 20 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/fast_io_fail_tmo # echo 2147483647 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
dev_loss_tmo
및 fast_io_fail
의 새 값이 활성화되었는지 확인하려면 다음 명령을 사용합니다.
# find /sys -name dev_loss_tmo -print -exec cat {} \;
매개변수가 올바르게 설정된 경우 출력은
pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_port-1:0-0:0-0:0-0/fc_remote_port-1:0-0
: 대신 적절한 장치 또는 장치를 사용하여 이 값과 유사합니다.
# find /sys -name dev_loss_tmo -print -exec cat {} \;
...
/sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
2147483647
...