Proxmox 호스트에 하드를 어떻게 마운트 시키는지는 UUID를 이용해 기기 마운트하는 법을 참고하시길.

LXC 컨테이너를 쓰든, VM을 쓰든 Proxmox에서 다른 하드를 마운트 시켜야 할 일이 있다. 주로 쓰는 방법이 몇가지 있다.

  1. LXC 컨테이너에 하드 마운트
  2. LXC 컨테이너에서 cifs 마운트
  3. LXC/VM 자체를 다른 하드에 설치
  4. VM에서 하드 공간 마운트
  5. VM에 하드 패스스루
  6. VM에서 cifs/nfs 마운트

1. LXC 컨테이너에 하드 마운트

Bindmount를 이용한다.
우선 마운트 시키고자 하는 폴더가 호스트의 /mnt/bindmounts/test 라고 치자.
컨테이너 내부에서 이 폴더를 /media/test 라는 폴더에 마운트 시키는 법은

vim /etc/pve/lxc/(컨테이너번호).conf

으로 컨테이너 conf 파일에 들어가서 끝에 다음과 같이 추가하면 된다.

mp0: /mnt/bindmounts/test,mp=/media/test

원하는게 폴더 하나 이상일 경우 mp1, mp2식으로 쭉 동일한 방법으로 진행해주면 된다.

컨테이너 내부에 미리 /media/test 폴더를 만들어 줄 필요는 없지만 호스트에 /mnt/bindmounts/test 폴더가 없을 시 컨테이너가 실행되지 않으므로 주의.

Unprivileged 컨테이너에선 이렇게 마운트시킬 경우 기본적으로 읽기밖에 할 수 없다. 호스트에서 폴더를 777 따위로 만들어주지 않으면 쓰기는 불가. 이런 식으로 하드 접근과 쓰기를 해야한다면 컨테이너는 privileged로 하는게 좋다.

2. LXC 컨테이너에서 cifs 마운트

그냥 컨테이너 내부에서 cifs-utils를 깔고 /etc/fstab을 수정하는 방법으론 안되고,

vim /etc/apparmor.d/lxc/lxc-default

으로 lxc 관련 앱아머에

allow mount fstype=cifs,

를 추가해 준 후 상기된 방법으로 cifs-utils 깔고 fstab 수정해주면 마운트 가능.

3. LXC/VM 자체를 다른 하드에 설치

ESXi의 개념으로 본다면 다른 데이터스토어를 추가해 거기에 컨테이너든 VM이든 설치한다고 보면 되겠다. 우선 Thin-lvm 설정을 해줘야한다.

fdisk -l

로 원하는 하드가 /dev/sdxx 어디에 마운트되었는지 확인 후,

pvcreate /dev/sdxx

로 physical volume을 설정해준다.

pvs

를 해보면 두개가 나올 것이다. 원래 있던 PV와 지금 생성한 PV.

vgcreate (VG이름) /dev/sdxx

로 volume group을 설정해준다. VG 이름은 pve만 아니면 된다. 원래 있는 vg 이름이 pve라서 그건 안된다. 마찬가지로

vgs

를 쓰면 원래 있던 pve와 방금 설정한 vg가 떠야 정상. 이제 Thin-lvm을 만들면 된다.

lvcreate -L (원하는 용량) --thinpool (lv이름) --poolmetadatasize (메타데이터 용량) (vg이름)

이게 가장 뭐가 많은데... 하나씩 살펴보자. 원하는 용량 부분이 500기가라면 500G 가 될 것이고, 지정하지 않고 하드 전체를 사용하고 싶다면 -l 100%FREE가 될 것이다. 대문자 L이 소문자 l (엘)로 바뀌었다는걸 잘 확인하자.

메타데이터 용량은 thin-lvm에만 있는 건데, 뭔지 정확히 모르지만 기본값은 이게 충분히 설정되지 않는다. 1테라 하드를 기준으로 대략 10기가 정도 메타데이터 용량을 주니 넉넉했는데, 추후에 바꾸기 정말 어려우니 처음부터 넉넉하게 주는걸 추천한다. 위와 마찬가지로 10G 등으로 넣어주면 된다.

LV이름은 본인이 원하는 것으로 짓고, vg이름은 위에서 지어놓은걸 써주면 된다. 두개가 동일한 이름이어도 상관 없다.

이제 Proxmox Web-UI에 접속해서, 왼편에 Datacenter을 클릭하고 Storage로 간다.

proxmox---Proxmox-Virtual-Environment

스샷에서 보는 바와 같이 Add - LVM-Thin을 선택하고 방금 만든 lvm을 마운트시켜주면 된다. 그 후에 create VM이나 create CT를 하면 local-lvm을 쓸지 방금 만든 lvm을 쓸지 선택할 수 있다.

4. VM에서 하드 공간 마운트

이건 3번과 같이 lv 설정이 돼있어야 가능하다. VM을 만든 후 VM 메뉴에서 Hardware - Add - Hard Disk를 선택해준다. 다음 스샷과 같다.

proxmox---Proxmox-Virtual-Environment--1-

여기서 원하는 lv를 선택하고, 디스크 사이즈를 선택해서 마운트하면 된다.

proxmox---Proxmox-Virtual-Environment--2-

5. VM에 하드 패스스루

패스스루를 하고 VM을 실행시키면 호스트에선 하드를 아예 볼 수 없어지지만, VM의 전원을 끄면 다시 호스트에서 마운트 가능한 점 알아두시길 바란다.

apt update -y ; apt install lshw -y

로 lshw 패키지를 설치해준 후,

lshw -class disk -class storage

커맨드를 입력하면 현재 꽂혀있는 스토리지 정보가 죽 뜬다. 예시를 가지고 하자면,

*-scsi:0
physical id: 1
logical name: scsi1
capabilities: emulated
*-disk
description: ATA Disk
product: ST1000LM035-1RK1
vendor: Seagate
physical id: 0.0.0
bus info: scsi@1:0.0.0
logical name: /dev/sda
version: SBM3
serial: WDE0819J
size: 931GiB (1TB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=4096 signature=44e51f5d

이 하드를 패스스루 하고 싶다고 치자. 여기서 중요한건 serial: WDE0819J 이 부분이다. 원하는 하드의 시리얼 확인 후,

ls -l /dev/disk/by-id | grep (시리얼번호)

를 치면 뭔가 결과가 뜬다. 예를 들어 내 서버에서 ls -l /dev/disk/by-id | grep WDE0819J를 치면 결과는

lrwxrwxrwx 1 root root 9 Feb 28 10:46 ata-ST1000LM035-1RK172_WDE0819J -> ../../sda

이렇게 나오게 되는데 여기서 중요한건 ata-ST1000LM035-1RK172_WDE0819J 이 부분이다. 이건 사람마다 기기마다 다르니 꼭 본인걸로 하시길. 이제 준비는 다 끝났고, 원하는 VM의 전원을 꺼준 후

qm set (VM번호) -virtio2 /dev/disk/by-id/(방금 찾아낸 디스크 이름)

으로 패스스루 해주면 된다. 내 서버의 예를 계속 들고, VM의 번호가 200이라 가정하면,

qm set 200 -virtio2 /dev/disk/by-id/ata-ST1000LM035-1RK172_WDE0819J

이렇게 되는 셈이다. 중간에 -virtio2 부분은 -sata2 -scsi2 등 다른 프로토콜을 쓸 수 있다. 원하는 하드가 하나 이상일 경우 동일한 방법으로 -virtio3, -sata3 등으로 숫자만 올려가며 패스스루 해주면 된다.

6. VM에서 cifs/nfs 마운트

여타 VM과 다르지 않다. 컨테이너와 달리 VM은 fstab 수정만으로 마운트 시키면 된다.