개요
Proxmox의 ZFS over iSCSI 스토리지는 ZFS 파일시스템과 iSCSI기능을 갖춘 시스템과 연동하여 스토리지를 구성하는 방식입니다. 평범한 iSCSI 스토리지와 비교할 때, ZFS를 이용하기 때문에 스냅샷 기능 등 ZFS 파일시스템의 기능을 적극적으로 활용할 수 있다는 장점이 있습니다.
또한, 단순한 iSCSI스토리지 위에 zvol을 사용할 시, 데이터를 쓸 때 ZFS 파일시스템과 LUN호스트가 각각 체크섬을 검증하며 성능이 많이 떨어지며, 재부팅 등의 이벤트 발생 시 재연결이 늦어지거나 LUN과의 연결이 끊어지는 경우도 있는데에 반해, ZFS over iSCSI 스토리지를 사용하면 LUN호스트는 체크섬 검증을 생략하고 원격 스토리지가 사용가능할때까지 대기하는 기능을 사용할 수 있게 됩니다.
그런데, Proxmox에서 기본적으로 제공하는 ZFS over iSCSI를 위한 API는 Comstar, istgt, IET, LIO 총 4가지이며, TrueNAS와는 호환되지 않습니다. 그래서 Github의 서드 파티 플러그인을 이용하여 구성해야 합니다.
플러그인 설치
먼저 기본적으로 Proxmox 호스트에서 최신 업데이트를 모두 진행합니다.
이후, SSH로 접속해 아래 명령어를 순차적으로 입력해 Proxmox-TrueNAS용 ZFS over iSCSI 플러그인을 설치합니다.
- repo 추가
keyring_location=/usr/share/keyrings/ksatechnologies-truenas-proxmox-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/ksatechnologies/truenas-proxmox/gpg.284C106104A8CE6D.key' | gpg --dearmor >> ${keyring_location}
cat << EOF > /etc/apt/sources.list.d/ksatechnologies-repo.list
# Source: KSATechnologies
# Site: https://cloudsmith.io
# Repository: KSATechnologies / truenas-proxmox
# Description: TrueNAS plugin for Proxmox VE - Production
deb [signed-by=${keyring_location}] https://dl.cloudsmith.io/public/ksatechnologies/truenas-proxmox/deb/debian any-version main
EOF
- 플러그인 설치
apt update
apt install freenas-proxmox
y를 입력하여 설치를 마무리 합니다. 이후 플러그인의 업데이트는 WEB GUI를 통해 업데이트할 때 함께 업데이트 됩니다.
TrueNAS 설정
ZFS over iSCSI 기능을 사용하기 위해 iSCSI Share를 설정해주어야 합니다.
Dataset 생성
보통 iSCSI설정 시에는 디스크 이미지를 생성하고 Target과 LUN을 모두 매핑한 후 게스트OS에서 생성된 디스크 이미지에 직접적으로 연결합니다.
그러나, ZFS over iSCSI는 '스토리지'이기 때문에, 디스크 이미지는 동적으로 생성되도록 내버려두고 데이터셋과 Target등만 설정해주면 됩니다.
먼저, Proxmox에서 스토리지로 사용할 Dataset을 생성해 줍니다.
예시에서는 test 풀 하위에 proxmox데이터셋을 생성했습니다.
iSCSI 설정
TrueNAS의 WEB UI에서 Shares탭으로 이동합니다.
상단의 Portals 탭 클릭 → Add 클릭하여 iSCSI연결에 사용될 네트워크 인터페이스(IP주소 형식)을 선택하고 추가합니다.
Portals 옆의 Initiators Groups탭을 클릭, Add를 클릭한 후 Allow all initiators를 체크하고 Save해 줍니다.
이 과정은, 일단 접속정보를 가지고 있는 클라이언트가 모두 접속할 수 있게 해주는 것으로, 추후 Proxmox에서 접속하면 Proxmox의 initiator 주소가 노출되게 되는데, 해당 주소만 allow하도록 수정할 수도 있습니다.
Targets 탭을 클릭하여 아래처럼 설정합니다.
Target name은 꼭 truenas일 필요는 없고, 자유롭게 정하시면 됩니다.
기타 그 외에 Extents와 Associated Targets는 동적으로 이미지가 생성될 때 자동으로 구성됩니다.
iSCSI 서비스 시작
Target Global Configuarition 탭에서 Base Name을 복사해 둡니다.
여기까지 진행했다면, iSCSI Shares 서비스를 시작해 줍니다.
root계정 Password Login설정하기
Proxmox에서 SSH Key를 등록할 때 비밀번호를 입력하는 과정을 거쳐야 하며, 추후 스토리지 연동시마다 root계정의 password가 필요합니다.
해당 과정을 위해 root계정의 비밀번호를 설정해주고 password login을 enabled해줍니다. 되도록 어려운 비밀번호를 추천합니다.
Proxmox 설정
SSH 키 복사
이 스토리지의 기본 작동방식은 SSH로 접속해 ZFS커맨드를 실행하는 것입니다. 따라서 원활한 실행을 위해 ssh key를 생성하고 truenas에 등록해줄 필요가 있습니다.
Proxmox 쉘에 접속해 아래와 같이 입력합니다(IP주소는 TrueNAS의 IP를 입력합니다).
mkdir /etc/pve/priv/zfs
ssh-keygen -f /etc/pve/priv/zfs/10.81.20.35_id_rsa
키 생성 시 암호화키를 묻는데, 반드시 그냥 Enter를 눌러 이 과정을 생략합니다. 키에 암호를 걸어버리면 Proxmox가 SSH를 수행할 때, 키 입력과정에 튕겨나옵니다.
생성 완료된 키를 이용해 TrueNAS에 복사합니다.
ssh-copy-id -i /etc/pve/priv/zfs/10.81.20.35_id_rsa.pub root@10.81.20.35
입력 시 최초 1회에 한해 TrueNAS의 root계정 비밀번호를 묻습니다. 위에서 설정해준 비밀번호를 입력하면 아래처럼 key등록을 마칠 수 있습니다.
이제 해당 SSH키를 이용해 TrueNAS에 접속해 봅니다.
ssh -i /etc/pve/priv/zfs/10.81.20.35_id_rsa root@10.81.20.35
문제 없이 TrueNAS Shell로 넘어가는 것을 볼 수 있습니다.
여기까지 진행했다면, 거의 성공한 겁니다. exit로 proxmox쉘로 빠져나옵니다.
ZFS over iSCSI 스토리지 추가하기
WEB GUI로 돌아온 뒤 새로고침을 1회 수행합니다.
이후 Storage → Add → iSCSI Provider를 클릭해보면 FreeNAS-API가 새로 생긴 것을 확인할 수 있습니다.
각각의 항목을 아래와 같이 채워줍니다.
- ID : Proxmox 호스트에서 스토리지명으로 사용할 이름(자유)
- Portal : TrueNAS IP
- Enable : 체크
- Pool : TrueNAS에서 생성했던 dataset경로 (이 글에서는 test/proxmox)
- Thin provision : 체크(권장, 해제해도 상관없음)
- Target : 위에서 복사했던 {Base Name}:{Targets}
(이 글에서는 iqn.2005-10.org.freenas.ctl:truenas) - Write Cache : 체크
- API use SSL : 체크 해제
- API IPv4 Host : Portal과 동일하게 TrueNAS IP
- API Username : root
- API Password : root계정 비밀번호
추가된 스토리지를 클릭해보면 아래처럼 전체 용량이 표시되어야 합니다.
그리고 VM Disks를 클릭했을 때 에러 메세지가 없어야 합니다.
디스크 이미지 생성하기
이제 위에서 설정한 ZFS over iSCSI 스토리지를 Proxmox에서 디스크 이미지 저장소로 사용할 수 있습니다.
아래는 테스트를 위해 임시로 생성한 디스크 이미지입니다.
이후 TrueNAS dataset을 확인해보면 Proxmox 디스크 이미지 형식으로 zvol이 생성된 것을 확인할 수 있고, iSCSI의 Extents와 Associated Targets가 자동으로 구성된 것을 확인할 수 있습니다.
이제 자유롭게 스토리지를 사용하면 됩니다.
추후 스토리지 연결 정보를 수정해야 할 때는 굳이 스토리지를 해제/재연결하지말고 /etc/pve/storage.cfg에서 수정하면 됩니다.
nano /etc/pve/storage.cfg
디스크 이미지 이동하기
TrueNAS의 다른 dataset으로 디스크 이미지를 옮겨야 할 경우 /etc/pve/storage.cfg에서 해당 정보를 복사해 아래에 하나 더 구성해두고 pool만 변경한 후 Proxmox에서 Move Storage를 수행하면 됩니다.
아래의 디스크를 proxmox2 dataset으로 옮겨야 할 경우를 예로 들겠습니다.
/etc/pve/storage.cfg에서 기존 ZFS over iSCSI스토리지 정보를 복붙한 뒤,
이름(zfsiscsi → zfsiscsi2)과 pool(test/proxmox → test/proxmox2)정도로 수정하겠습니다.
이후 WEB UI를 새로고침하면 새로운 스토리지가 생깁니다.
VM에서 Move Storage를 수행해 봅니다.
사용되지 않은 블럭에 대한 메세지가 출력되지만 무시해도 됩니다.
작업이 완료되면, 아래처럼 proxmox2데이터셋으로 이동된 zvol을 확인할 수 있습니다(용량의 변동은 Thin provisioning때문입니다).
문제 해결(Trouble-Shooting)
VM Disks 클릭 시 에러(exit code 255)
Vm Disks 클릭 시 아래와 같이 zfs명령 실행 에러가 발생할 수 있습니다.
command '/usr/bin/ssh -o 'BatchMode=yes' -i /etc/pve/priv/zfs/10.81.20.35_id_rsa root@10.81.20.35 zfs list -o name,volsize,origin,type,refquota -t volume,filesystem -d1 -Hp test/proxmox' failed: exit code 255 (500)
먼저, 생성한 SSH키로 Proxmox → TrueNAS쉘로 접속이 잘 되는지 확인하고, 생성한 키에 passphrase가 설정되었는지 확인합니다. 설정되어있다면 해당 키를 삭제하고 passphrase없는 키를 재생성하여 과정을 재진행합니다.
그럼에도 발생한다면, TrueNAS IP, root계정의 비밀번호, Target 등을 순차적으로 점검합니다.
출처
1. https://github.com/TheGrandWazoo/freenas-proxmox
GitHub - TheGrandWazoo/freenas-proxmox: ZFS over iSCSI to FreeNAS API's from Proxmox VE
ZFS over iSCSI to FreeNAS API's from Proxmox VE. Contribute to TheGrandWazoo/freenas-proxmox development by creating an account on GitHub.
github.com
2. https://pve.proxmox.com/wiki/Legacy:_ZFS_over_iSCSI
Legacy: ZFS over iSCSI - Proxmox VE
Note: This article was historically maintained by users, but may still contain some possible useful info. See Storage: ZFS over ISCSI for the official article from the Proxmox VE reference documentation Technology and features As of Proxmox 3.3 the ZFS sto
pve.proxmox.com