Ubuntu Server 18.04 LTS 기반에서 iSCSI Target을 이용한 diskless system을 만들려고 한다. iSCSI Target의 설치 및 설정 과정은 다음과 같이 진행된다. 여기서는, btrfs 서브 볼륨 및 이미지 생성을 다룬다. 



2-2 btrfs subvolume 및 이미지 생성


iSCSI Target이 제공할 디스크의 이미지를 생성하여야 한다. 다음은 필자의 서버에서 준비된 디스크 장치의 정보를 "lsblk" 명령을 통해 보인 것이다. 


root@server:/home/user# lsblk



256GB의 SSD가 총 6개 준비되어 있고, 이들은 각각 2개씩 Raid 0으로 설정되어서 사용할 수 있는 디스크의 파티션 크기는 512GB(476.7GiB)가 3개이고, btrfs 파일시스템으로 포맷되어 있다. 각 파티션은 /iscsi1/, /iscsi2/, /iscsi3/ 에 mount 되어 있다. 3개의 파티션에 iSCSI Target 을 통해 iSCSI Initiator(클라이언트)에게 제공할 디스크의 이미지를 준비할 것이다. 

각 파티션의 마운트 경로에 다음과 같이 새로운 btrfs subvolume을 만든다. 만들어진 btrfs subvolume은 디렉토리 형태로 보인다. 


root@server:/home/user# btrfs subvolume create /iscsi1/disk1

Create subvolume '/iscsi1/disk1'

root@server:/home/user# btrfs subvolume create /iscsi2/disk2

Create subvolume '/iscsi2/disk2'

root@server:/home/user# btrfs subvolume create /iscsi3/disk3

Create subvolume '/iscsi3/disk3'

각 btrfs subvolume의 소유 및 권한을 변경한다. 해당 명령은 다음과 같다. 


root@server:/home/user# chmod 755 /iscsi1/disk1

root@server:/home/user# chmod 755 /iscsi2/disk2

root@server:/home/user# chmod 755 /iscsi3/disk3


각 btrfs subvolume에 새로운 이미지를 생성한다. Raid 0으로 준비한 파티션의 크기기는 512GB (476.7GiB) 이지만, 필자는 그 중, 360GiB 크기의 이미지를 생성할 것이다. 그 이유는 iSCSI Initiator에게 제공된 이미지를 사용자가 사용하면서, 얼마든지 새로운 소프트웨어 등을 구성하는 파일들이 추가될 수 있다. 이 때, 과도하게 많이 사용하게 되면, 파티션의 크기를 초과하는 예외 상황이 발생하게 되어 Ubuntu와 iSCSI Target의 정책에 따라 시스템 오류 발생 및 예외 처리가 될 것이다. 필자는 과거 Ubuntu 14.04 LTS 버전, iscsitarget 1.4.20.3+svn499 버전에서 이미지 크랙되는 현상까지 경험한 적이 있다. 따라서, 충분한 여유 용량이 요구되기 때문에 필자는 이미지의 크기를 75% 수준인 360GiB로 결정한 것이다. 여기서, 360GiB의 크기로 만들면, 360x2^9 이 되어서 사용자 PC에서는 360GB의 디스크로 인식된다. 

예를 들어, 이미지의 크기가 360GiB이면, 사용자 PC에서 디스크 용량은 360GB로 인식된다. 여기에 200GB 정도의 파일들이 존재한다면, 160GB 만큼 여유가 있는 상태이다. 이 때, 사용자가, 160 기가를 다 사용 한다면, 360GiB + 160GiB = 520GiB > 512GB (476.7GiB) 의 조건이 되어 이미지가 크랙되는 것이다. iSCSI Target에 접속된 iSCSI Initiator의 사용자 PC가 100 대 이고, PC 당 1GB만 사용하여도 100GB 가 된다. 사용자들이 얼마나 추가적인 파일들을 쓸지는 알 수 없으므로 충분한 여유 용량을 가지면서 최대한 이미지 크기를 키울 수 있는 iSCSI Target 이 제공하는 이미지 크기를 설정할 필요가 있다. 


root@server:/home/user# dd if=/dev/zero of=/iscsi1/disk1/disk.img bs=1G count=360

360+0 records in
360+0 records out
386547056640 bytes (387 GB, 360 GiB) copied, 439.99 s, 879 MB/s

root@server:/home/user# dd if=/dev/zero of=/iscsi2/disk2/disk.img bs=1G count=360

360+0 records in
360+0 records out
386547056640 bytes (387 GB, 360 GiB) copied, 435.344 s, 888 MB/s

root@server:/home/user# dd if=/dev/zero of=/iscsi3/disk3/disk.img bs=1G count=360

360+0 records in
360+0 records out
386547056640 bytes (387 GB, 360 GiB) copied, 896.021 s, 431 MB/s


위 명령 실행 결과에서 경과 시간은 물리적인 SSD의 한계 속도를 가늠할 수 있게 해주고, 또한, SSD의 물리적인 특성상 새로운 정보 '0'으로 쓰기하는 중 해당 bit를 지우는 시간이 추가되어 느려진 것으로 판단된다. 단위가 MB/s 이므로, Mb/s 로 환산하였을때, 3.2Gb/s 수준이고, 기가랜과 서버 및 클라이언트 하드웨어 속도에서 전혀 문제되지 않을 것이다. 

아래 그림은 이미지 생성 후, 해당 파티션 경로의 공간 정보를 "df -h" 명령으로 확인 한 것이다. 




Posted by 두리PC
,