웹사이트 검색

Debian Jessie 8.1을 사용하여 Linux에서 ZFS를 설치 및 구성하는 방법


이 페이지에서

  1. 전제 조건:

ZFS는 결합된 파일 시스템과 논리 볼륨 관리자입니다. ZFS의 기능에는 데이터 손상 방지, 대용량 저장 용량 지원, 효율적인 데이터 압축, 파일 시스템 통합 및 볼륨 관리 개념, 스냅샷 및 copy-on-write 클론, 지속적인 무결성 검사 및 자동 복구, RAID-Z 및 기본 기능이 포함됩니다. NFSv4 ACL.

ZFS는 원래 CDDL(Common Development and Distribution License)에 따라 라이센스가 부여된 오픈 소스 소프트웨어로 구현되었습니다.

ZFS 파일 시스템에 대해 이야기할 때 다음과 같은 주요 개념을 강조할 수 있습니다.

  • 데이터 무결성.
  • zfs 및 zpool의 두 가지 명령만으로 스토리지를 간편하게 관리할 수 있습니다.\n
  • 파일 시스템이 온라인 상태인 동안 모든 작업을 수행할 수 있습니다.\n

사용 가능한 모든 기능에 대한 전체 개요 및 설명은 이 자세한 wikipedia 문서를 참조하세요.

이 자습서에서는 Debian 8.1(Jessie)에 ZFS 파일 시스템을 설치하는 과정을 단계별로 안내합니다. raid0(stripe), raid1(Mirror) 및 RAID-Z(Raid with parity)를 사용하여 풀을 만들고 구성하는 방법을 보여주고 ZFS로 파일 시스템을 구성하는 방법을 설명합니다.

웹사이트 www.zfsonlinux.org의 정보에 따르면 ZFS는 AMD64 및 Intel 64비트 아키텍처(amd64)에서만 지원됩니다. 설정을 시작하겠습니다.

전제 조건:

  • 64비트 커널이 있는 Debian 8.
  • 루트 권한.\n

1단계 - 리포지토리 업데이트 및 Debian Linux 시스템 업데이트

시스템에 zfsonlinux 리포지토리를 추가하려면 아래와 같이 zfsonlinux 패키지를 다운로드하여 설치합니다. 그러면 /etc/apt/sources.list.d/zfsonlinux.list 및 /etc/apt/trusted.gpg.d/zfsonlinux.gpg 파일이 컴퓨터에 추가됩니다. 그런 다음 apt-get 명령을 사용하여 다른 Debian 패키지처럼 zfs를 설치할 수 있습니다. zfsonlinux 리포지토리를 사용하는 또 다른 이점은 "apt-get update && apt-get upgrade"를 실행하여 업데이트를 자동으로 받는 것입니다.

SSH 액세스로 Debian 서버에 로그인하고 루트 사용자가 된 후 다음 명령을 실행합니다.

# uname -a
Linux debian-zfs 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
# dpkg -i zfsonlinux_6_all.deb
# apt-get update

2단계 - zfsonlinux 설치

Zfsonlinux에는 apt에 의해 자동으로 설치되는 많은 소프트웨어 종속성이 있습니다. 이 프로세스는 시간이 걸립니다. 설치가 완료되면 서버를 재부팅합니다.

# apt-get install lsb-release
# apt-get install debian-zfs
# shutdown -r now

3단계 - 풀 생성 및 구성

서버가 재부팅된 후 zfsonlinux가 설치되고 잘 실행되는지 확인하십시오.

# dpkg -l | grep zfs
ii  debian-zfs                     7~jessie                    amd64        Native ZFS filesystem metapackage for Debian.
ii  libzfs2                        0.6.5.2-2                   amd64        Native ZFS filesystem library for Linux
ii  zfs-dkms                       0.6.5.2-2                   all          Native ZFS filesystem kernel modules for Linux
ii  zfsonlinux                     6                           all          archive.zfsonlinux.org trust package
ii  zfsutils                       0.6.5.2-2                   amd64        command-line tools to manage ZFS filesystems

위의 결과는 Linux에 zfs가 이미 설치되어 있음을 보여주므로 계속해서 첫 번째 풀을 생성할 수 있습니다.

필자는 이 서버에 각각 2GB 크기의 디스크 5개를 추가했습니다. 다음 명령으로 사용 가능한 디스크를 확인할 수 있습니다.

# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde  /dev/sdf  /dev/sdg

/dev/sdg까지 /dev/sda가 있음을 알 수 있습니다. /dev/sda는 운영 체제 Debian Linux Jessie 8.1에 사용됩니다. ZFS 파일 시스템에 대해 /dev/sdg까지 /dev/sdb를 사용합니다.

이제 풀 생성을 시작할 수 있습니다. 첫 번째로 raid0(스트라이프)을 생성하는 방법을 보여드리겠습니다.

# zpool list
no pools available
# zpool create -f pool0 /dev/sdb
# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool0  1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -

"zpool list" 명령은 하나의 raid0 zfs 풀을 성공적으로 생성했음을 보여줍니다. 풀 이름은 pool0이고 크기는 2GB입니다.

다음으로 다른 디스크로 raid1(미러)을 만듭니다.

# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool0  1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -
pool1  1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -

이제 raid0용 pool0과 raid1용 pool1이라는 두 개의 풀이 있음을 알 수 있습니다.

풀의 상태를 확인하려면 아래 명령을 사용할 수 있습니다.

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

        NAME        STATE     READ WRITE CKSUM
        pool0       ONLINE       0     0     0
          sdb       ONLINE       0     0     0

errors: No known data errors

  pool: pool1
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool1       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0

errors: No known data errors

"zpool status" 명령으로 풀 상태를 확인할 수 있습니다. pool0과 pool1의 차이점을 볼 수 있습니다. pool0에는 디스크가 하나만 있고 pool1에는 디스크가 두 개 있으며 디스크 상태는 미러(mirror-0)입니다.

다음으로 RAID-Z로 풀을 만드세요. RAID-Z는 RAID-5와 같은 데이터/패리티 배포 체계이지만 동적 스트라이프 너비를 사용합니다. 모든 블록에는 블록 크기에 관계없이 자체 RAID 스트라이프가 있습니다. 모든 RAID-Z 쓰기는 전체 스트라이프 쓰기입니다.

RAID-Z는 최소 3개의 하드 드라이브가 필요하며 RAID 0과 RAID 1 사이의 절충안입니다. RAID-Z 풀에서: 풀의 단일 디스크가 죽는 경우 해당 디스크를 교체하기만 하면 ZFS가 자동으로 데이터를 재구축합니다. 다른 디스크의 패리티 정보를 기반으로 합니다. 스토리지 풀의 모든 정보를 손실하려면 두 개의 디스크가 죽어야 합니다. 드라이브 설정을 더욱 중복되게 하려면 RAID 6(ZFS의 경우 RAID-Z2)을 사용하여 이중 패리티를 얻을 수 있습니다.

먼저 하나의 패리티가 있는 RAID-Z 풀을 생성해 보겠습니다.

# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
poolz1  5.94G   117K  5.94G         -     0%     0%  1.00x  ONLINE  -
# zpool status poolz1
  pool: poolz1
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        poolz1      ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0
            sdg     ONLINE       0     0     0

errors: No known data errors
# df -h /poolz1
Filesystem      Size  Used Avail Use% Mounted on
poolz1          3.9G     0  3.9G   0% /poolz1

보시다시피 df -h는 6GB 풀이 이제 4GB로 줄어들었고 2GB가 패리티 정보를 저장하는 데 사용되고 있음을 보여줍니다. zpool status 명령을 사용하면 풀이 현재 RAID-Z를 사용하고 있음을 알 수 있습니다.

다음으로 RAID-Z2(raid 6)를 생성합니다. 이를 위해 사용 가능한 디스크가 더 이상 없기 때문에 기존 풀을 제거해야 합니다. 풀을 제거하는 것은 매우 쉽습니다. 이를 위해 zpool destroy 명령을 사용할 수 있습니다.

# zpool list
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool0   1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -
pool1   1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -
poolz1  5.94G   117K  5.94G         -     0%     0%  1.00x  ONLINE  -
# zpool destroy pool0
# zpool destroy pool1
# zpool destroy poolz1
# zpool list
no pools available

이제 모든 zpool이 없어졌으므로 RAID-Z2 풀을 만들 수 있습니다.

# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
poolz2  7.94G   135K  7.94G         -     0%     0%  1.00x  ONLINE  -
# df -h /poolz2
Filesystem      Size  Used Avail Use% Mounted on
poolz2          3.9G     0  3.9G   0% /poolz2
# zpool status poolz2
  pool: poolz2
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        poolz2      ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

보시다시피 df -h는 4GB가 패리티 정보를 두 번 보유하는 데 사용되고 있기 때문에 8GB 풀이 이제 4GB로 줄었음을 보여줍니다. "zpool status" 명령을 사용하면 풀이 현재 RAID-Z2를 사용하고 있음을 알 수 있습니다.

4단계 - 디스크 오류 시뮬레이션

이 단계에서는 치명적인 디스크 오류(즉, zpool의 HDD 중 하나가 작동을 멈춤)를 시뮬레이트합니다.

poolz2에 파일을 만들고 액세스할 수 있는지 확인합니다.

# echo "Test Only" > /poolz2/test.txt
# cat /poolz2/test.txt
Test Only

실패를 시뮬레이션하기 전에 poolz2의 상태를 확인하고 상태가 온라인이고 모든 디스크의 상태가 온라인인지 확인하세요.

/dev/sdb에 dd 명령어로 무작위 데이터를 작성하여 오류를 시뮬레이션합니다.

# dd if=/dev/urandom of=/dev/sdb bs=1024 count=20480
# zpool scrub poolz2
# zpool status
  pool: poolz2
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-9P
  scan: scrub repaired 17K in 0h0m with 0 errors on Tue Dec  8 22:37:49 2015
config:

        NAME        STATE     READ WRITE CKSUM
        poolz2      ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0    25
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

이제 하나 이상의 디스크에 복구할 수 없는 오류가 발생했음을 알 수 있으므로 디스크를 교체해야 합니다. 이 경우 /dev/sdb 디스크를 /dev/sdf로 교체합니다.

# zpool replace poolz2 sdb sdf
# zpool status
  pool: poolz2
 state: ONLINE
  scan: resilvered 49.5K in 0h0m with 0 errors on Tue Dec  8 22:43:35 2015
config:

        NAME        STATE     READ WRITE CKSUM
        poolz2      ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdf     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

/dev/sdb를 /dev/sdf로 바꾸면 오류가 사라지고 이전에 만든 테스트 파일에 계속 액세스할 수 있습니다.

# cat /poolz2/test.txt
Test Only

이 단계까지는 zpool을 만들고 구성하는 방법에 대해 알고 있습니다.

5단계 - ZFS 파일 시스템 생성 및 구성

다음 단계에서는 ZFS 파일 시스템을 만들고 구성하는 방법을 배웁니다.

# zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
poolz2   105K  3.83G  26.1K  /poolz2

이미 하나의 ZFS 파일 시스템이 있으며 zpool을 만들 때 자동으로 추가됩니다. 이제 다른 ZFS 파일 시스템을 생성합니다.

# zfs create poolz2/tank
# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
poolz2        132K  3.83G  26.1K  /poolz2
poolz2/tank  25.4K  3.83G  25.4K  /poolz2/tank
# df -h | grep poolz2
poolz2          3.9G  128K  3.9G   1% /poolz2
poolz2/tank     3.9G  128K  3.9G   1% /poolz2/tank

아주 쉽죠? tank라는 새 ZFS 파일 시스템을 만들고 자동으로 /poolz2/tank로 마운트합니다.

ZFS 파일 시스템에 대한 사용자 정의 마운트 지점을 만드는 방법은 무엇입니까? 아래 명령을 사용하십시오.

# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/tank     3.9G     0  3.9G   0% /poolz2/tank
poolz2/data     3.9G     0  3.9G   0% /data

기존 마운트 지점을 수정하는 방법은 무엇입니까? 아래 명령으로 그렇게 할 수 있습니다.

# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/data     3.9G     0  3.9G   0% /data
poolz2/tank     3.9G     0  3.9G   0% /tank

파일 시스템을 마운트 및 마운트 해제하려면 아래 명령을 사용하십시오.

# zfs unmount /data
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/tank     3.9G     0  3.9G   0% /tank
# zfs mount poolz2/data
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/tank     3.9G     0  3.9G   0% /tank
poolz2/data     3.9G     0  3.9G   0% /data

zfs 파일 시스템을 제거하는 것은 매우 쉽습니다. zfs destroy 명령을 사용할 수 있습니다.

# zfs destroy poolz2/data
# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
poolz2        152K  3.83G  26.1K  /poolz2
poolz2/tank  25.4K  3.83G  25.4K  /tank

파일 시스템 /data가 사라졌습니다.

결론

ZFS 파일 시스템은 파일 시스템이 Unix와 유사한 운영 체제에서 관리되는 방식을 근본적으로 변경하는 혁신적인 새 파일 시스템입니다. ZFS는 현재 사용 가능한 다른 파일 시스템에서는 볼 수 없는 기능과 이점을 제공합니다. ZFS는 강력하고 확장 가능하며 관리하기 쉽습니다.