3.9 ZFS on Linux

Proxmox VE 8.1.3 매뉴얼을 DeepL/Google Translate를 이용해서 기계번역하고, 살짝 교정했습니다.
https://pve.proxmox.com/pve-docs/pve-admin-guide.html

ZFS는 썬마이크로시스템즈에서 설계한 파일 시스템과 논리 볼륨 관리자를 결합한 시스템입니다. Proxmox VE 3.4부터 ZFS 파일 시스템의 기본 Linux 커널 포트가 옵션 파일 시스템 및 루트 파일 시스템의 추가 선택 사항으로 도입되었습니다. 모든 패키지가 포함되어 있으므로 ZFS 모듈을 수동으로 컴파일할 필요가 없습니다.

ZFS를 사용하면 저예산 하드웨어로 최대의 엔터프라이즈 기능을 구현할 수 있을 뿐만 아니라 SSD 캐싱 또는 SSD 전용 설정을 활용하여 고성능 시스템도 구현할 수 있습니다. ZFS는 CPU와 메모리 부하가 적당하고 관리가 간편해 비용이 많이 드는 하드웨어 레이드 카드를 대체할 수 있습니다.

일반적인 ZFS의 장점

Proxmox VE GUI 및 CLI를 통한 손쉬운 구성 및 관리.

  • 신뢰성
  • 데이터 손상으로부터 보호
  • 파일 시스템 수준에서 데이터 압축
  • 스냅샷
  • 쓰기 시 복제
  • 다양한 레이드 수준: RAID0, RAID1, RAID10, RAIDZ-1, RAIDZ-2, RAIDZ-3, dRAID, dRAID2, dRAID3
  • SSD를 캐시로 사용 가능
  • 자가 치유
  • 지속적인 무결성 검사
  • 대용량 스토리지를 위한 설계
  • 네트워크를 통한 비동기 복제
  • 오픈 소스
  • 암호화

3.9.1. 하드웨어

ZFS는 메모리에 크게 의존하므로 시작하려면 최소 8GB가 필요합니다. 실제로는 하드웨어/예산에 맞는 최대한 많은 용량을 사용하세요. 데이터 손상을 방지하려면 고품질 ECC RAM을 사용하는 것이 좋습니다.

전용 캐시 및/또는 로그 디스크를 사용하는 경우에는 엔터프라이즈급 SSD를 사용해야 합니다. 이렇게 하면 전반적인 성능이 크게 향상될 수 있습니다.

중요: 자체 캐시 관리 기능이 있는 하드웨어 RAID 컨트롤러 위에 ZFS를 사용하지 마세요. ZFS는 디스크와 직접 통신해야 합니다. HBA 어댑터 또는 ‘IT’ 모드로 플래시된 LSI 컨트롤러와 같은 것이 더 적합합니다.

VM(중첩 가상화) 내에 Proxmox VE를 설치하여 실험하는 경우 해당 VM의 디스크는 ZFS에서 지원되지 않으므로 가상화 디스크에 virtio를 사용하지 마세요. 대신 IDE 또는 SCSI를 사용하세요(virtio SCSI 컨트롤러 유형과도 작동).

3.9.2. 루트 파일 시스템으로 설치

Proxmox VE 설치 관리자를 사용하여 설치하는 경우 루트 파일 시스템으로 ZFS를 선택할 수 있습니다. 설치 시 RAID 유형을 선택해야 합니다:

RAID0 : “스트라이핑”이라고도 합니다. 이러한 볼륨의 용량은 모든 디스크의 용량을 합한 값입니다. 그러나 RAID0은 중복성을 추가하지 않으므로 단일 드라이브에 장애가 발생하면 볼륨을 사용할 수 없게 됩니다.

RAID1 : “미러링”이라고도 합니다. 데이터가 모든 디스크에 동일하게 기록됩니다. 이 모드를 사용하려면 크기가 같은 디스크가 2개 이상 필요합니다. 결과 용량은 단일 디스크의 용량입니다.

RAID10 : RAID0과 RAID1의 조합입니다. 최소 4개의 디스크가 필요합니다.

RAIDZ-1 : RAID-5의 변형으로, 단일 패리티입니다. 최소 3개의 디스크가 필요합니다.

RAIDZ-2 : RAID-5의 변형, 더블 패리티. 최소 4개의 디스크가 필요합니다.

RAIDZ-3 : RAID-5의 변형으로, 트리플 패리티입니다. 최소 5개 이상의 디스크가 필요합니다.

설치 관리자는 디스크를 자동으로 파티션하고, rpool이라는 ZFS 풀을 생성하며, 루트 파일 시스템을 ZFS 서브볼륨 rpool/ROOT/pve-1에 설치합니다.

VM 이미지를 저장하기 위해 rpool/data라는 또 다른 서브볼륨이 생성됩니다. 이를 Proxmox VE 도구와 함께 사용하기 위해 설치 관리자는 /etc/pve/storage.cfg에 다음 구성 항목을 생성합니다:

zfspool: local-zfs
        pool rpool/data
        sparse
        content images,rootdir

설치 후 zpool 명령을 사용하여 ZFS 풀 상태를 확인할 수 있습니다:

# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sda2    ONLINE       0     0     0
            sdb2    ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0

errors: No known data errors

zfs 명령은 ZFS 파일 시스템을 구성하고 관리하는 데 사용됩니다. 다음 명령은 설치 후 모든 파일 시스템을 나열합니다:

# zfs list
NAME               USED  AVAIL  REFER  MOUNTPOINT
rpool             4.94G  7.68T    96K  /rpool
rpool/ROOT         702M  7.68T    96K  /rpool/ROOT
rpool/ROOT/pve-1   702M  7.68T   702M  /
rpool/data          96K  7.68T    96K  /rpool/data
rpool/swap        4.25G  7.69T    64K  -

3.9.3. ZFS RAID 레벨 고려 사항

ZFS 풀의 레이아웃을 선택할 때 고려해야 할 몇 가지 요소가 있습니다. ZFS 풀의 기본 구성 요소는 가상 디바이스 또는 vdev입니다. 풀의 모든 vdev는 동일하게 사용되며 데이터는 이들 간에 스트라이핑됩니다(RAID0). vdev에 대한 자세한 내용은 zpoolconcepts(7) 매뉴얼 페이지를 참조하세요.

성능

각 vdev 유형은 서로 다른 성능으로 동작합니다. 관심 있는 두 가지 매개 변수는 IOPS(초당 입출력 작업 수)와 데이터를 쓰거나 읽을 수 있는 대역폭입니다.
mirror vdev(RAID1)는 데이터를 쓸 때 두 매개변수와 관련하여 대략 단일 디스크처럼 작동합니다. 데이터를 읽을 때는 미러의 디스크 수에 따라 성능이 선형적으로 확장됩니다.
일반적인 상황은 4개의 디스크를 사용하는 것입니다. 2개의 미러 디바이스(RAID10)로 설정하면 풀은 IOPS 및 대역폭과 관련하여 2개의 단일 디스크와 같은 쓰기 특성을 갖습니다. 읽기 작업의 경우 4개의 단일 디스크와 유사합니다.
모든 중복성 수준의 RAIDZ는 대역폭이 많은 IOPS와 관련하여 대략 단일 디스크처럼 작동합니다. 대역폭의 양은 RAIDZ 가상 디바이스의 크기와 중복성 수준에 따라 달라집니다.
실행 중인 VM의 경우 대부분의 상황에서 IOPS가 더 중요한 지표입니다.

크기, 공간 사용량 및 중복성

미러 가상 디바이스로 구성된 풀은 최상의 성능 특성을 갖지만, 사용 가능한 공간은 사용 가능한 디스크의 50%입니다. 예를 들어 3방향 미러와 같이 미러 vdev가 2개 이상의 디스크로 구성된 경우에는 더 적습니다. 풀이 계속 작동하려면 미러당 하나 이상의 정상 디스크가 필요합니다.
N개의 디스크로 구성된 RAIDZ 유형 vdev의 사용 가능한 공간은 대략 N-P이며, 여기서 P는 RAIDZ 레벨입니다. RAIDZ 레벨은 데이터 손실 없이 장애가 발생할 수 있는 임의의 디스크 수를 나타냅니다. 특별한 경우는 RAIDZ2가 있는 4개의 디스크 풀입니다. 이 상황에서는 일반적으로 사용 가능한 공간이 동일하므로 더 나은 성능을 위해 2개의 미러 디바이스를 사용하는 것이 좋습니다.
RAIDZ 레벨을 사용할 때 또 다른 중요한 요소는 VM 디스크에 사용되는 ZVOL 데이터 세트의 작동 방식입니다. 각 데이터 블록에 대해 풀의 패리티 데이터는 최소한 풀의 ashift 값으로 정의된 최소 블록 크기만큼의 크기가 필요합니다. ashift가 12인 경우 풀의 블록 크기는 4k입니다. ZVOL의 기본 블록 크기는 8k입니다. 따라서 RAIDZ2에서 8k 블록을 기록할 때마다 4k 패리티 블록 2개가 추가로 기록됩니다(8k + 4k + 4k = 16k). 물론 이것은 단순화된 접근 방식이며 이 예에서는 메타데이터, 압축 등을 고려하지 않았기 때문에 실제 상황은 약간 다를 수 있습니다.

이 동작은 ZVOL의 다음 속성을 확인할 때 관찰할 수 있습니다:

  • volsize
  • refreservation(풀이 씬 프로비저닝되지 않은 경우)
  • used(풀이 씬 프로비저닝되어 있고 스냅샷이 없는 경우)
# zfs get volsize,refreservation,used <pool>/vm-<vmid>-disk-X

volsize는 VM에 제공되는 디스크의 크기이며, refreservation은 패리티 데이터에 필요한 예상 공간을 포함하여 풀에 예약된 공간을 표시합니다. 풀이 씬 프로비저닝된 경우 refreservation은 0으로 설정됩니다. 동작을 관찰하는 또 다른 방법은 VM 내에서 사용된 디스크 공간과 사용된 속성을 비교하는 것입니다. 스냅샷으로 인해 값이 왜곡될 수 있다는 점에 유의하세요.
공간 사용량 증가에 대응할 수 있는 몇 가지 옵션이 있습니다:

  • volblocksize를 늘려 데이터 대 패리티 비율을 개선합니다.
  • RAIDZ 대신 mirror 가상 디바이스 사용
  • ashift=9(블록 크기 512바이트) 사용

volblocksize 속성은 ZVOL을 생성할 때만 설정할 수 있습니다. 기본값은 스토리지 구성에서 변경할 수 있습니다. 이 경우 사용 사례에 따라 게스트를 적절히 조정해야 하며, 쓰기 증폭 문제는 ZFS 계층에서 게스트까지만 이동됩니다.
풀을 생성할 때 ashift=9를 사용하면 아래 디스크에 따라 성능이 저하될 수 있으며 나중에 변경할 수 없습니다.
미러 가상 디바이스(RAID1, RAID10)는 VM 워크로드에 유리한 동작을 합니다. 사용자 환경에 RAIDZ 성능 특성이 허용되는 특정 요구 사항 및 특성이 있는 경우가 아니라면 이 방법을 사용하십시오.

3.9.4. ZFS dRAID

ZFS dRAID(dclustered RAID)에서는 핫 스페어 드라이브가 RAID에 참여합니다. 예비 용량은 예약되어 있으며 한 드라이브에 장애가 발생했을 때 재구축에 사용됩니다. 따라서 구성에 따라 드라이브 장애 발생 시 RAIDZ에 비해 더 빠르게 재구축할 수 있습니다. 자세한 내용은 공식 OpenZFS 문서에서 확인할 수 있습니다.

참고: dRAID는 10~15개 이상의 디스크를 dRAID로 구성할 때 사용합니다. 대부분의 사용 사례에서 디스크 수가 적을 때는 RAIDZ 설정이 더 좋습니다.
참고: GUI에는 최소 디스크보다 하나 더 많은 디스크가 필요합니다(예: dRAID1에는 3개 필요). 예비 디스크도 추가할 것을 예상합니다.

  • dRAID1 또는 dRAID: 디스크 2개 이상 필요, 디스크 하나가 실패하면 데이터가 손실될 수 있습니다.
  • dRAID2: 디스크 3개 이상 필요, 데이터가 손실되기 전에 2개가 실패할 수 있음
  • dRAID3: 디스크 4개 이상 필요, 데이터가 손실되기 전에 3개가 실패할 수 있습니다.

추가 정보는 설명서 페이지에서 확인할 수 있습니다:

# man zpoolconcepts
예비 디스크 및 데이터

spares 수는 디스크 장애에 대비하여 시스템에 준비해야 하는 디스크 수를 알려줍니다. 기본값은 0개의 spares입니다. 예비 디스크가 없으면 재구축 시 속도 이점을 얻을 수 없습니다.
data는 중복성 그룹의 장치 수를 정의합니다. 기본값은 8입니다. disks – parity – spares 개수가 8보다 작은 경우를 제외하고는 더 낮은 숫자가 사용됩니다. 일반적으로 data 장치 수가 적을수록 IOPS가 높아지고 압축률이 향상되며 복원 속도가 빨라지지만 데이터 장치 수를 적게 정의하면 풀의 사용 가능한 스토리지 용량이 줄어듭니다.

3.9.5. 부트로더

Proxmox VE는 proxmox-boot-tool을 사용하여 부트로더 구성을 관리합니다. 자세한 내용은 Proxmox VE 호스트 부트로더에 대한 장을 참조하십시오.

3.9.6. ZFS 관리

이 섹션에서는 일반적인 작업에 대한 몇 가지 사용 예제를 제공합니다. ZFS 자체는 매우 강력하며 많은 옵션을 제공합니다. ZFS를 관리하는 주요 명령은 zfs 및 zpool입니다. 두 명령 모두 훌륭한 매뉴얼 페이지가 함께 제공되므로 참고하세요:

# man zpool
# man zfs
새 zpool 만들기

새 풀을 만들려면 디스크가 하나 이상 필요합니다. ashift는 기본 디스크와 동일한 섹터 크기(ashift의 2승) 또는 그 이상이어야 합니다.

# zpool create -f -o ashift=12 <pool> <device>

풀 이름은 다음 규칙을 준수해야 합니다:

  • 문자(a-z 또는 A-Z)로 시작해야 합니다.
  • 영숫자, -, _, ., : 또는 (공백) 문자만 포함해야 합니다.
  • 미러, 레이드, 드레이드, 스페어 중 하나로 시작하지 않아야 합니다.
  • 로그가 아니어야 합니다.

압축을 활성화하려면(ZFS의 압축 섹션 참조):

# zfs set compression=lz4 <pool>
RAID-0으로 새 풀 만들기

최소 디스크 1개

# zpool create -f -o ashift=12 <pool> <device1> <device2>
RAID-1로 새 풀 만들기

최소 디스크 2개

# zpool create -f -o ashift=12 <pool> mirror <device1> <device2>
RAID-10로 새 풀 만들기

최소 디스크 4개

# zpool create -f -o ashift=12 <pool> mirror <device1> <device2> mirror <device3> <device4>
RAIDZ-1로 새 풀 만들기

최소 디스크 3개

# zpool create -f -o ashift=12 <pool> raidz1 <device1> <device2> <device3>
RAIDZ-2으로 새 풀 만들기

최소 디스크 1개

# zpool create -f -o ashift=12 <pool> raidz2 <device1> <device2> <device3> <device4>

풀을 설정하기 전에, 특히 RAID-Z 모드를 사용하려는 경우, 예상되는 IOPS 및 대역폭에 대한 대략적인 예상치를 얻으려면 ZFS RAID 수준 고려 사항 섹션을 참조하세요.

캐시가 있는 새 풀 만들기(L2ARC)

전용 장치 또는 파티션을 두 번째 레벨 캐시로 사용하여 성능을 향상시킬 수 있습니다. 이러한 캐시 장치는 대부분 정적인 데이터의 랜덤 읽기 워크로드에 특히 유용합니다. 실제 스토리지와 인메모리 ARC 사이의 추가 캐싱 레이어 역할을 하므로 메모리 제약으로 인해 ARC를 줄여야 하는 경우에도 도움이 될 수 있습니다.

온디스크 캐시로 ZFS 풀 만들기
# zpool create -f -o ashift=12 <pool> <device> cache <cache-device>

여기서는 하나의 와 하나의 만 사용되었지만 RAID로 새 풀 만들기에 표시된 것처럼 더 많은 장치를 사용할 수 있습니다.
캐시 장치의 경우 미러 또는 레이드 모드가 존재하지 않으며 모두 단순히 누적된다는 점에 유의하세요.
캐시 장치에서 읽기 오류가 발생하면 ZFS는 해당 요청을 기본 스토리지 계층으로 투명하게 전환합니다.

로그가 있는 새 풀 만들기(ZIL)

ZFS Intent Log(ZIL)에는 전용 드라이브 또는 파티션을 사용할 수 있으며, 주로 데이터베이스와 같이 성능이 중요한 경로 또는 fsync 작업을 더 자주 수행하는 기타 프로그램에서 안전한 동기식 트랜잭션을 제공하는 데 사용됩니다.
이 풀은 기본 ZIL 위치로 사용되며, ZIL IO 부하를 별도의 장치로 전환하면 트랜잭션 대기 시간을 줄이는 동시에 메인 풀의 부담을 덜어 전반적인 성능을 향상시키는 데 도움이 될 수 있습니다.
디스크를 직접 또는 파티션을 통해 로그 장치로 사용하려면 다음과 같이 하는 것이 좋습니다:

  • 전력 손실 보호 기능이 있는 빠른 SSD를 사용하면 커밋 지연 시간이 훨씬 짧아집니다.
  • 파티션(또는 전체 장치)에 최소 몇 GB를 사용하되, 설치된 메모리의 절반 이상을 사용하는 것은 실질적인 이점을 제공하지 못합니다.
별도의 로그 장치로 ZFS 풀 만들기
# zpool create -f -o ashift=12 <pool> <device> log <log-device>

위의 예에서는 단일 와 단일 가 사용되었지만, RAID로 새 풀 만들기 섹션에 설명된 대로 이를 다른 RAID 변형과 결합할 수도 있습니다.
로그 장치를 여러 장치에 미러링할 수도 있는데, 이는 주로 단일 로그 장치에 장애가 발생해도 성능이 즉시 저하되지 않도록 하는 데 유용합니다.
모든 로그 장치에 장애가 발생하면 로그 장치가 교체될 때까지 ZFS 메인 풀 자체가 다시 사용됩니다.

기존 풀에 캐시 및 로그 추가

캐시와 로그가 없는 풀이 있는 경우에도 언제든지 둘 다 또는 둘 중 하나만 추가할 수 있습니다.
예를 들어, 풀의 전반적인 성능을 개선하기 위해 전력 손실 보호 기능이 있는 우수한 엔터프라이즈 SSD를 사용한다고 가정해 보겠습니다.
로그 장치의 최대 크기는 설치된 물리적 메모리 크기의 절반 정도여야 하므로 ZIL은 대부분 SSD의 상대적으로 작은 부분만 차지할 가능성이 높으며 나머지 공간은 캐시로 사용할 수 있습니다.
먼저 SSD에 parted 또는 gdisk로 두 개의 GPT 파티션을 만들어야 합니다.
그런 다음 풀에 추가할 준비가 된 것입니다:

별도의 로그 장치와 두 번째 레벨 캐시를 모두 기존 풀에 추가합니다.
# zpool add -f <pool> log <device-part1> cache <device-part2>

풀 이름과 파티션의 두 /dev/disk/by-id/ 경로를 , , 로 재생(replay)하기만 하면 됩니다.
ZIL과 캐시를 별도로 추가할 수도 있습니다.

기존 ZFS 풀에 로그 장치 추가하기
# zpool add <pool> log <log-device>
고장난 디바이스 변경하기
# zpool replace -f <pool> <old-device> <new-device>
실패한 부팅 가능한 장치 변경

Proxmox VE가 설치된 방식에 따라 systemd-boot 또는 GRUB를 통해 proxmox-boot-tool [3]을 사용하거나 일반 GRUB를 부트 로더로 사용합니다(호스트 부트로더 참조). 실행하여 확인할 수 있습니다:

# proxmox-boot-tool status

파티션 테이블 복사, GUID 재발급 및 ZFS 파티션 교체의 첫 번째 단계는 동일합니다. 새 디스크에서 시스템을 부팅하려면 사용 중인 부트로더에 따라 다른 단계가 필요합니다.

# sgdisk <healthy bootable device> -R <new device>
# sgdisk -G <new device>
# zpool replace -f <pool> <old zfs partition> <new zfs partition>

zpool status -v 명령을 사용하여 새 디스크의 복원 프로세스가 얼마나 진행되었는지 모니터링합니다.

proxmox-boot-tool 사용:

# proxmox-boot-tool format <new disk's ESP>
# proxmox-boot-tool init <new disk's ESP> [grub]

참고: ESP는 EFI 시스템 파티션의 약자로, 버전 5.4부터 Proxmox VE 설치 관리자가 부팅 가능한 디스크 설정에서 파티션 2번으로 설정됩니다. 자세한 내용은 동기화된 ESP로 사용할 새 파티션 설정하기를 참조하세요.

참고: 특히 만약 proxmox-boot-tool status가 현재 디스크가 GRUB를 사용 중임을 나타내고 보안 부팅이 활성화된 경우 proxmox-boot-tool init에 grub을 mode로 전달해야 합니다!

일반 GRUB으로:
# grub-install <new disk>

참고: 일반 GRUB은 Proxmox VE 6.3 이하가 설치된 시스템에서만 사용되며, 아직 proxmox-boot-tool을 사용하여 수동으로 마이그레이션하지 않은 시스템에서만 사용됩니다.

3.9.7. 이메일 알림 구성

ZFS에는 ZFS 커널 모듈에서 생성된 이벤트를 모니터링하는 이벤트 데몬 ZED가 함께 제공됩니다. 이 데몬은 풀 오류와 같은 ZFS 이벤트에 대해 이메일을 보낼 수도 있습니다. 최신 ZFS 패키지는 별도의 zfs-zed 패키지로 데몬을 제공하며, 이 패키지는 Proxmox VE에 기본적으로 이미 설치되어 있어야 합니다.

자주 사용하는 편집기에서 /etc/zfs/zed.d/zed.rc 파일을 통해 데몬을 구성할 수 있습니다. 이메일 알림에 필요한 설정은 ZED_EMAIL_ADDR이며, 기본적으로 root로 설정되어 있습니다.

ZED_EMAIL_ADDR="root"

Proxmox VE는 root 사용자에 대해 구성된 이메일 주소로 root로 메일을 전달합니다.

3.9.8. ZFS 메모리 사용량 제한

ZFS는 기본적으로 Adaptive Replacement Cache(ARC)에 호스트 메모리의 50%를 사용합니다. ARC에 충분한 메모리를 할당하는 것은 IO 성능에 매우 중요하므로 신중하게 줄여야 합니다. 일반적으로 최소 2기가바이트 기본 + 1기가바이트/TiB 스토리지를 할당하세요. 예를 들어 사용 가능한 스토리지 공간이 8TiB인 풀이 있는 경우 ARC에 10GiB의 메모리를 사용해야 합니다.

zfs_arc_max 모듈 파라미터에 직접 써서 현재 부팅에 대한 ARC 사용 제한을 변경할 수 있습니다(재부팅하면 이 변경 사항이 다시 초기화됨):

 echo "$[10 * 1024*1024*1024]" >/sys/module/zfs/parameters/zfs_arc_max

ARC 제한을 영구적으로 변경하려면 /etc/modprobe.d/zfs.conf에 다음 줄을 추가합니다:

options zfs zfs_arc_max=8589934592

이 예제 설정은 사용량을 8기가바이트(8 * 230)로 제한합니다.

중요: 원하는 zfs_arc_max 값이 zfs_arc_min(기본값은 시스템 메모리의 1/32)보다 낮거나 같은 경우 zfs_arc_min도 최대 zfs_arc_max – 1로 설정하지 않는 한 zfs_arc_max는 무시됩니다.

echo "$[8 * 1024*1024*1024 - 1]" >/sys/module/zfs/parameters/zfs_arc_min
echo "$[8 * 1024*1024*1024]" >/sys/module/zfs/parameters/zfs_arc_max

이 예제 설정은 (일시적으로) 총 메모리가 256기가바이트 이상인 시스템에서 사용량을 8기가바이트(8 * 230)로 제한하며, 단순히 zfs_arc_max만 설정하면 작동하지 않습니다.

중요: root 파일 시스템이 ZFS인 경우 이 값이 변경될 때마다 initramfs를 업데이트해야 합니다:

# update-initramfs -u -k all

이러한 변경 사항을 활성화하려면 재부팅해야 합니다.

3.9.9. ZFS에서 스왑

zvol에 생성된 스왑 공간은 외부 스토리지로 백업을 시작할 때 종종 서버를 차단하거나 높은 IO 부하를 발생시키는 등 몇 가지 문제를 일으킬 수 있습니다.

일반적으로 메모리 부족 상황이 발생하지 않도록 충분한 메모리를 사용하는 것이 좋습니다. 스왑이 필요하거나 추가하려는 경우, 물리적 디스크에 파티션을 만들어 스왑 장치로 사용하는 것이 좋습니다. 설치 프로그램의 고급 옵션에서 이를 위해 여유 공간을 남겨둘 수 있습니다. 또한 “스왑” 값을 낮출 수 있습니다. 서버에 적합한 값은 10입니다:

# sysctl -w vm.swappiness=10

스왑을 영구적으로 유지하려면 원하는 편집기로 /etc/sysctl.conf를 열고 다음 줄을 추가합니다:

vm.swappiness = 10

표 1. Linux 커널 swappiness 매개 변수 값

ValueStrategy
vm.swappiness = 0The kernel will swap only to avoid an out of memory condition
vm.swappiness = 1Minimum amount of swapping without disabling it entirely.
vm.swappiness = 10This value is sometimes recommended to improve performance when sufficient memory exists in a system.
vm.swappiness = 60The default value.
vm.swappiness = 100The kernel will swap aggressively.

3.9.10. 암호화된 ZFS 데이터 세트

경고: Proxmox VE의 기본 ZFS 암호화는 실험 단계입니다. 알려진 제한 사항 및 문제로는 암호화된 데이터세트를 사용한 복제, 스냅샷 또는 zvol 사용 시 체크섬 오류 등이 있습니다.

Linux의 ZFS 버전 0.8.0은 데이터 세트의 기본 암호화를 지원합니다. 이전 ZFS on Linux 버전에서 업그레이드한 후에는 풀별로 암호화 기능을 활성화할 수 있습니다:

# zpool get feature@encryption tank
NAME  PROPERTY            VALUE            SOURCE
tank  feature@encryption  disabled         local

# zpool set feature@encryption=enabled

# zpool get feature@encryption tank
NAME  PROPERTY            VALUE            SOURCE
tank  feature@encryption  enabled         local

경고: 현재 GRUB을 사용해 암호화된 데이터 세트가 있는 풀에서 부팅하는 기능은 지원되지 않으며, 부팅 시 암호화된 데이터 세트를 자동으로 잠금 해제하는 기능도 제한적으로만 지원됩니다. 암호화를 지원하지 않는 이전 버전의 ZFS에서는 저장된 데이터의 암호를 해독할 수 없습니다.
참고: 부팅 후 스토리지 데이터세트를 수동으로 잠금 해제하거나 사용자 정의 유닛을 작성하여 부팅 시 잠금 해제에 필요한 키 자료를 zfs 로드 키에 전달하는 것이 좋습니다.
경고: 프로덕션 데이터의 암호화를 활성화하기 전에 백업 절차를 수립하고 테스트하세요. 관련 키 자료/암호/키 파일이 손실된 경우 암호화된 데이터에 더 이상 액세스할 수 없습니다.

datasets/zvol을 만들 때 암호화를 설정해야 하며, 기본적으로 하위 데이터세트에 상속됩니다. 예를 들어, 암호화된 데이터 세트 tank/encrypted_data를 생성하고 이를 Proxmox VE에서 스토리지로 구성하려면 다음 명령을 실행하세요:

# zfs create -o encryption=on -o keyformat=passphrase tank/encrypted_data
Enter passphrase:
Re-enter passphrase:

# pvesm add zfspool encrypted_zfs -pool tank/encrypted_data

이 스토리지에 생성되는 모든 게스트 볼륨/디스크는 상위 데이터 세트의 공유 키 자료로 암호화됩니다.
실제로 스토리지를 사용하려면 연결된 키 자료를 로드하고 데이터 세트를 마운트해야 합니다. 이 작업은 한 번에 수행할 수 있습니다:

# zfs mount -l tank/encrypted_data
Enter passphrase for 'tank/encrypted_data':

또한 생성 시 또는 기존 데이터셋의 zfs change-key를 사용하여 keylocation 및 keyformat 속성을 설정하여 암호를 묻는 대신 (임의의) 키 파일을 사용할 수도 있습니다:

# dd if=/dev/urandom of=/path/to/keyfile bs=32 count=1

# zfs change-key -o keyformat=raw -o keylocation=file:///path/to/keyfile tank/encrypted_data

경고: 키 파일을 사용할 때는 무단 액세스 또는 우발적인 분실로부터 키 파일을 보호하기 위해 특별한 주의를 기울여야 합니다. 키 파일이 없으면 일반 텍스트 데이터에 액세스할 수 없습니다!

암호화된 데이터 세트 아래에 생성된 게스트 볼륨은 그에 따라 암호화된 루트 속성이 설정됩니다. 그 아래에 있는 모든 암호화된 데이터세트에서 사용할 수 있도록 키 자료는 encryptionroot당 한 번만 로드하면 됩니다.

자세한 내용 및 고급 사용법은 man zfs에서 encryptionroot, encryption, keylocation, keyformat 및 keystatus 속성, zfs load-key, zfs unload-key 및 zfs change-key 명령 및 Encryption 섹션을 참조하세요.

3.9.11. ZFS의 압축

데이터 세트에서 압축을 활성화하면 ZFS는 모든 새 블록을 쓰기 전에 압축을 시도하고 읽기 시 압축을 해제합니다. 이미 존재하는 데이터는 소급하여 압축되지 않습니다.
압축을 사용하도록 설정할 수 있습니다:

# zfs set compression=<algorithm> <dataset>

CPU 오버헤드를 거의 추가하지 않는 lz4 알고리즘을 사용하는 것이 좋습니다. lzjb 및 gzip-N과 같은 다른 알고리즘(여기서 N은 1(가장 빠름)에서 9(최상의 압축률)까지의 정수)도 사용할 수 있습니다. 알고리즘과 데이터의 압축 가능 정도에 따라 압축을 활성화하면 I/O 성능이 향상될 수도 있습니다.
압축은 언제든지 비활성화할 수 있습니다:

# zfs set compression=off <dataset>

다시 말하지만, 새 블록만 이 변경의 영향을 받습니다.

3.9.12. ZFS 특수 장치

버전 0.8.0부터 ZFS는 special 장치를 지원합니다. 풀의 special 장치는 메타데이터, 중복 제거 테이블, 선택적으로 작은 파일 블록을 저장하는 데 사용됩니다.
special 장치는 메타데이터 변경이 많은 느리게 회전하는 하드 디스크로 구성된 풀의 속도를 향상시킬 수 있습니다. 예를 들어, 많은 수의 파일을 생성, 업데이트 또는 삭제하는 워크로드는 special 장치를 사용하면 이점을 얻을 수 있습니다. 또한 ZFS 데이터세트를 특수 장치에 작은 파일 전체를 저장하도록 구성하면 성능을 더욱 향상시킬 수 있습니다. special 장치에는 빠른 SSD를 사용하세요.

중요: 특수 장치는 전체 풀의 장애 지점이므로 특수 장치의 중복성은 풀의 중복성과 일치해야 합니다.

경고: 풀에 특수 장치를 추가한 후에는 취소할 수 없습니다!

special 장치와 RAID-1로 풀을 만드세요:

# zpool create -f -o ashift=12 <pool> mirror <device1> <device2> special mirror <device3> <device4>

RAID-1로 기존 풀에 special 장치를 추가합니다:

# zpool add <pool> special mirror <device1> <device2>

ZFS 데이터 세트는 special_small_blocks= 속성을 노출합니다. special 장치에 작은 파일 블록을 저장하지 않으려면 size를 0으로 설정하거나 512B에서 1M 사이의 범위에서 2의 거듭제곱으로 설정할 수 있습니다. 이 속성을 설정하면 size보다 작은 새 파일 블록이 special 특수 장치에 할당됩니다.

중요: special_small_blocks의 값이 데이터 세트의 레코드 크기(기본값 128K)보다 크거나 같으면 모든 데이터가 특수 장치에 기록되므로 주의하세요!

풀에서 special_small_blocks 속성을 설정하면 모든 하위 ZFS 데이터 세트에 대해 해당 속성의 기본값이 변경됩니다(예: 풀의 모든 컨테이너가 작은 파일 블록을 옵트인합니다).

풀 전체에서 4K 블록보다 작은 모든 파일에 대해 옵트인합니다:

# zfs set special_small_blocks=4K <pool>

단일 데이터 세트에 대해 작은 파일 블록을 옵트인합니다:

# zfs set special_small_blocks=4K <pool>/<filesystem>

단일 데이터 세트에 대해 작은 파일 블록을 옵트아웃합니다:

# zfs set special_small_blocks=0 <pool>/<filesystem>

3.9.13. ZFS 풀 기능

ZFS의 온디스크 형식에 대한 변경은 주요 버전 변경 사이에만 이루어지며 기능을 통해 지정됩니다. 모든 기능과 일반적인 메커니즘은 zpool-features(5) 매뉴얼 페이지에 잘 설명되어 있습니다.
새로운 기능을 활성화하면 이전 버전의 ZFS에서는 풀을 가져올 수 없게 될 수 있으므로 관리자가 풀에서 zpool 업그레이드를 실행하여 이 작업을 적극적으로 수행해야 합니다(zpool-upgrade(8) 관리 페이지 참조).
새로운 기능 중 하나를 사용해야 하는 경우가 아니라면 이 기능을 활성화하는 데 따른 장점은 없습니다.
사실, 새로운 기능을 활성화하면 몇 가지 단점이 있습니다:

  • ZFS에 root가 있고 GRUB을 사용하여 부팅하는 시스템에서 새 기능을 활성화하면 GRUB의 ZFS 구현이 호환되지 않기 때문에 부팅할 수 없게 됩니다.
  • 이전 커널로 부팅할 때 이전 ZFS 모듈이 여전히 함께 제공되는 경우 시스템은 업그레이드된 풀을 가져올 수 없습니다.
  • 부팅되지 않는 시스템을 복구하기 위해 이전 Proxmox VE ISO를 부팅하는 것도 마찬가지로 작동하지 않습니다.

중요: 시스템이 여전히 GRUB로 부팅되는 경우 시스템을 부팅할 수 없게 되므로 rpool을 업그레이드하지 마세요. 여기에는 Proxmox VE 5.4 이전에 설치된 시스템과 레거시 BIOS 부팅으로 부팅하는 시스템이 포함됩니다(부트로더를 확인하는 방법 참조).

ZFS 풀에 새로운 기능을 활성화합니다:

# zpool upgrade <pool>
답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like