본문 바로가기
Linux/Linux

Linux) Online 상태에서 스토리지 추가

by LILO 2021. 4. 26.
반응형

OS에서 Storage, Disk 온라인 상태에서 추가

 

앞 글에서 파일 시스템 증설 작업을 할 때는 VM을 이용해서 작업을 할 때는 디스크를 추가하자마자 OS에서 인식하는 것을 볼 수 있었습니다.

 

하지만 실무에서는 SAN Switch에서 조닝작업을 한 후에 OS에 다수의 Path를 던져 Multipath 작업을 할 경우, 온라인 상태에서 Physical Storage(Disk)를 추가로 넣을 경우가 많습니다. 이와 같이 온라인 상태에서 스토리지를 추가할 경우 Linux에서 인식을 하지 못합니다. 

 

Down Time을 가질 경우는 서버를 재기동을 하면 자동으로 디스크가 잡히지만 대부분이 PM(재기동) 작업이 없는 이상 온라인 상태에서 작업을 하는 경우가 대다수입니다.

 

 

 

OS에서 Storage, Disk 온라인 상태에서 추가 - LAB

 

가상환경에서 최대한 구현하기 위해 OS 상에서만 해당 디스크를 인식하지 못하게 하는 작업을 하였습니다.

# fdisk -l

 

/dev/sdb라는 디스크를 가지고 LAB을 구성했습니다. 지금은 잘 보이고 추가되어있는 상태입니다.

 

 

이 디스크에 delete 시그널을 줘서 OS 단에서만 임시적으로 장치 제거를 하기 위해 타깃 번호를 찾아줍니다.

# ll /sys/block

lrwxrwxrwx. 1 root root 0 Apr 26 04:56 sdb -> ../devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdc

scsi_host가 3번이고 target은 3:0:0:0을 가지고 있구나라는 예측을 할 수 있습니다.

 

 

 

이 디스크에 delete 시그널을 줘서 OS 단에서만 임시적으로 장치 제거를 합니다.

(해당 작업은 절대 실장비에서 하면 안됩니다. 테스트용으로만 하시기 바랍니다.)

# echo " - - - " > /sys/class/scsi_host/host3/device/target3\:0\:0/3\:0\:0\:0/delete

rescan 명령을 쳐서 확인해도 해당 타킷에 대한 정보는 보이지 않고 Physical Volume에서도 정보가 사라진 것을 볼 수 있습니다.

rescan-scsi-bus.sh라는 명령이 RHEL 7.X부터는 기본 Command로 등록이 되어있습니다. 본래의 목적은 echo "- - -" 시그널을 보내지 않고 써도 된다는 목적이지만 안탑깝게도 안되는 경우가 많습니다. 그러므로 "ls -l /sys/block"과 "lspci"를 참고해서 해당 scsi_host에 echo "- - -" 시그널을 보내주는 작업을 해야됩니다.

※ OS 상에서만 디스크가 절제된 것으로 보이게한 것이지 물리적으로 빠진 것이 아닙니다.

 

 

 

이제 scan 시그널을 보내서 디스크를 온라인 상테에서 인식하는 작업을 합니다.

# echo " - - - " > /sys/class/scsi_host/host3/scan
# fdisk -l

정상적으로 잘 추가되었음을 확인할 수 있습니다.

 

사실 간단하게 생각하면 host1~n까지 다 스캔 시그널을 보내면 다 인식이 되긴합니다. 하지만 이 글에서 중요한 포인트는 현재 운영중인 서버이다보니 최대한 정확한 host를 찾아 스캔 시그널을 보내는 것입니다.

아무래도 서비스를 운영하고 있는 디스크에 스캔 시그널을 보내는 것보다는 새로 들어온 깡통인 디스크에 정확히 보내는 것이 좋겠죠?

 

스캐닝 방법은 host0~n까지 모두 시그널을 보내는 방식(while 문)과 PCI 슬릇을 확인해서 최대한 정확한 곳에 스캔 시그널을 보내는 방법이 있습니다.

권장 드리는 방법은 lspci 명령과 "/sys/block/" 디렉토리를 확인해서 정확히 스캐닝하는 방법입니다.

※ " - - -"의 의미: 세 가지 값은 채널, SCSI 대상 ID 및 LUN을 나타내고 대시는 "모두 다시 검색"을 의미하는 와일드 카드 역할을합니다

 

 

 

OS에서 Storage, Disk 온라인 상태에서 추가 (반복문 이용)

 

위에서 언급된 방법으로 host0~hostN까지의 scsi_host를 모두 스캐닝 하는 방법입니다.

원리는 while 문을 이용해서 존재하는 scsi_host를 전부 scan 시그널을 주는 방법입니다.

# ls /sys/class/scsi_host/ | while read host ; do echo "- - -" > /sys/class/scsi_host/$host/scan ; done

 

 

 

반응형