Thursday, March 14, 2019

Bash 쉘 프로그래밍 - 2. 쉘 스크립트(Shell Script)의 구조 #2 .새로운 디스크 스캔 예제

안녕하세요. 썬구루입니다.

쉘 프로그래밍(Shell Programming)에 흥미를 가지기 위해 간단한 스크립트를 만들어 보도록 하겠습니다. 리눅스 서버 시스템을 관리하다 보면 디스크를 추가해야 하는 경우가 있습니다. 서버 운영 시 디스크 추가가 가능하기 때문에 서버의 디스크 슬롯에 디스크를 장착하면 하드웨어적인 인식이 됩니다. 하지만 운영체제가 이를 사용하기 위해 디바이스 파일을 생성해줘야 하기 때문에 디스크 추가 후 디스크를 확인하면 바로 보이진 않죠. 윈도 서버 같은 경우 바로 보이지만요. 리눅스 운영체제에서 새 디스크를 인식시키기 위해 디스크 컨트롤러 scan 파일에 와일드 문자를 전달하면 관련 디바이스 파일이 생성되며 사용할 수 있게 됩니다. 디스크 추가를 위해 시스템 리부팅은 필요 없습니다. 테스트를 위해 VMware Workstation 기반에 설치된 리눅스를 사용하도록 하겠습니다. 일단 아래와 같이 디스크 컨트롤러 정보를 확인합니다.

[root@shell01 ~]# lspci | grep -i controller

00:0f.0 VGA compatible controller: VMware SVGA II Adapter
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
02:00.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)

SCSI Host를 재스캔(Rescan)하기 위해 사용되는 파일을 /sys/devices 디렉토리에서 검색합니다.

[root@shell01 ~]# find /sys/devices -name scan | grep 10.0

/sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0/scan

/sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0/scan 파일이 LSI Logic SCSI storage controller와 관련되어 있다는 것을 딱 봐도 아시겠죠. 이 파일에 와일드카드 문자를 전달하면 해당 컨트롤러에 연결된 디바이스들을 재스캔하게 됩니다.

[root@shell01 ~]# echo "- - -" > /sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0/scan

위와 같이 명령을 실행하면 새 디스크를 재스캔하게 됩니다. - 기호는 와일드카드 문자로 사용되며 첫 번째는 채널 (Channel), 두 번째는 SCSI Target ID, 세 번째는 LUN을 나타냅니다. 이것을 매번 하려면 귀찮죠.

실무 현장에서는 서버에 디스크 추가가 자주 일어나지 않습니다. 저희는 테스트를 위해 매번 가상머신에 디스크를 붙이는 작업하기 때문에 파일을 찾아 명령을 입력하기 귀찮기 때문에 그냥 쉘 스크립트 파일을 만들어 스크립트 파일을 실행하면 새로운 디스크가 바로 인식되도록 만들어 보겠습니다.

아래와 같이 find 명령을 사용하여 diskscan이라는 명령이 없는 것을 확인하고 root 사용자의 홈 디렉터리에 diskscan 파일을 만들어 실행 권한을 부여합니다.

[root@shell01 ~]# pwd

/root

[root@shell01 ~]# mkdir bin
[root@shell01 ~]# vi bin/diskscan.sh

#!/bin/bash
#
# Scan new disk for Linux based on VMware Workstation
# created by sunguru
# blog : http://sunguru-infra.blogspot.com
#
#Scan new disk
for y in `lspci | grep 'LSI Logic' | awk '{print $1}'`
do
FNAME=`find /sys/devices -name scan | grep $y`
echo '- - -' | sudo tee $FNAME 2>&1 > /dev/null
done
# Print HDD info
echo
lsblk | grep disk

[root@shell01 ~]# chmod 700 scripts/diskscan.sh

자 그럼.. 디스크를 추가한 후 diskscan.sh 쉘 스크립트 파일을 실행해보죠. 아래와 같이 lsblk 명령을 실행한 후 현재의 디스크 정보를 확인합니다. 그런 다음 가상머신에 10GB 디스크를 추가한 후 diskscan 쉘 스크립트 파일을 실행시킵니다. 그리고 lsblk 명령을 사용하여 다시 디스크 정보를 확인하면 sdb라는 10GB 디스크가 추가 인식된 것을 확인할 수 있습니다.

[root@shell01 ~]# lsblk | grep disk

fd0           2:0    1    4K  0 disk 
sda           8:0    0   10G  0 disk 

[root@shell01 ~]# diskscan.sh
[root@shell01 ~]# lsblk | grep disk

fd0           2:0    1    4K  0 disk 
sda           8:0    0   10G  0 disk 
sdb           8:16   0   10G  0 disk 

No comments:

Post a Comment