기존 드라이브에 ZFS 파티션 만들기

기존 드라이브에 ZFS 파티션 만들기

ZFS에는 중복 제거 기능이 있어 동일한 파일을 여러 위치에 보관할 수 있지만 복사본 1개 정도의 공간만 사용할 수 있다고 들었습니다. 나는 음악/이미지 등으로 끝나는 경향이 있다는 것을 알았습니다. 시간이 지남에 따라 내 하드 드라이브의 여러 위치에서 이런 일이 발생했으며 ZFS 파티션을 만들고 내 미디어를 해당 파티션으로 옮기는 것이 가장 좋을 것이라고 생각했습니다. 이 작업을 수행하는 방법이나 가능한지 찾는 데 어려움을 겪고 있습니다. 대부분의 튜토리얼에서는 "디스크 3개를 가져와 ZFS로 RAID"라고 설명하지만 저는 디스크가 1개 있는 노트북을 사용하고 있으며 기존 OS를 제거할 계획은 없습니다. ZFS 파티셔닝(https://serverfault.com/questions/628632/should-i-create-zfs-zpools-with-whole-disks-or-partitions), 그러나 단일 ZFS 파티션을 기존 디스크에 추가하는 방법을 설명하는 내용을 찾지 못했습니다. 그런 일이 가능할까요? (제 디스크 파티션 테이블 유형은 msdos이고, 그런데 저는 Ubuntu를 실행하고 있습니다.)

답변1

공간을 절약하면서 미디어 구성을 최대화하는 것이 목표라면 미디어 라이브러리에 대한 디렉터리 트리를 배치한 다음 cp명령(데이터 복사) 및 명령(하드 또는 하드 데이터 생성)을 신중하게 사용하여 ln이를 달성 할 수 있습니다. 소프트 [ -s사용하는 경우] 링크) 참조 데이터에 액세스하거나 복사하려면 편의상 동일한 파일을 다른 디렉토리에서 다른 이름으로 사용할 수 있는 경우에도 마찬가지입니다. 여전히 동일한 파일이며 하드 또는 소프트 링크가 다를 뿐입니다.

수동 수준에서 매우 간단한 관점에서 ln보면 cp .

lnZFS를 추가하면 사용하기 전까지 기억할 필요가 없다는 즉각적인 이점이 있습니다 cp. 미디어를 의도적으로 분할, 수정, 편집, 정렬하는 경우 등 다양한 사용 사례가 있습니다. 개별 미디어 "클립"을 저장하면 ZFS에서 수행됩니다. 데이터 중복 제거의 이점을 누리십시오.

ZFS의 비용은 중복 제거가 상당히 RAM 집약적이라는 것입니다. 커널은 각 블록의 체크섬이나 해시를 디스크에 저장하고 블록이 풀에 다시 기록될 때 실시간으로 어레이에 액세스해야 합니다. 따라서 디스크가 가득 차면(더 많은 ZFS 블록이 기록됨) 커널이 각 블록 데이터의 해시를 캐시하기 때문에 더 많은 RAM이 채워집니다. 노트북에 있는 RAM 용량과 디스크 수에 따라 문제가 될 수도 있고 아닐 수도 있지만, 중복 제거의 주요 비용은 전체 디스크의 해시 배열을 저장할 만큼 충분한 RAM을 확보하는 데 있다는 점을 기억하는 것이 좋습니다. 더 적은 RAM으로 수행할 수 있지만 전체 해시 배열을 한 번에 보유할 만큼 RAM이 충분하지 않은 시스템에서 커널이 RAM 청크로 해시 배열을 RAM 안팎으로 교환하려고 시도할 때 특히 쓰기 액세스가 어려워집니다.

그러나 작은 ZFS 풀을 시도하는 한 가지 방법은 다음과 같습니다.

가상 블록 장치 만들기

여기서는 FreeBSD 명령을 사용하고 있지만 단계는 Ubuntu에서도 비슷합니다. 제가 예시한 블록 장치의 크기는 10G이지만 여유 공간이 있으면 더 큰 크기를 사용해도 됩니다.

  • ztest.dat10G 파일을 생성합니다:

    # truncate -s 10G ztest.dat

  • 그리고 이 파일로 지원되는 가상 블록 장치를 만듭니다.

    # mdconfig -f ztest.dat

    md0

그렇다면 우리의 가상 장치는 입니다 /dev/md0.

간단한 ZPOOL 생성 및 중복 제거 활성화

# zpool create ztest md0
# zfs set dedup=on ztest
# zpool status ztest
  pool: ztest
 state: ONLINE
config:

    NAME        STATE     READ WRITE CKSUM
    ztest       ONLINE       0     0     0
      md0       ONLINE       0     0     0

errors: No known data errors

그러면 ztest파일 시스템이 에 마운트 됩니다 /ztest. 또한 /ztest 디렉토리, 파일 시스템 및 ZFS 풀에 대한 몇 가지 기본 통계를 신속하게 표시하는 간단한 셸 기능을 만들어 보겠습니다 .

zlist() {
  zfs list ztest
  echo
  zfs get all ztest | egrep 'used|refer'
  echo
  zpool get dedupratio ztest
}

그런 다음 이러한 도구를 사용하여 아래에 필요한 미디어 계층 구조를 만들고 /ztest 일부 샘플 미디어 파일을 /ztest파일 시스템에 복사하기 시작할 수 있습니다.

# ls -l /ztest; echo; zlist
total 0

NAME    USED  AVAIL     REFER  MOUNTPOINT
ztest   114K  9.20G       24K  /ztest

ztest  used                  114K                   -
ztest  referenced            24K                    -
ztest  usedbysnapshots       0B                     -
ztest  usedbydataset         24K                    -
ztest  usedbychildren        90K                    -
ztest  usedbyrefreservation  0B                     -
ztest  logicalused           42K                    -
ztest  logicalreferenced     12K                    -

NAME   PROPERTY    VALUE  SOURCE
ztest  dedupratio  1.00x  -

A dedupratio가 1.00이면 중복 제거가 수행되지 않음을 의미합니다. 파일 시스템에 있는 데이터의 논리적 크기는 풀에 저장된 물리적 데이터 크기의 1.00배입니다.

하지만 아직 아무것도 복사하지 않았습니다! 지금 해보자:

# cp -vp ~jim/my-fave-dvd.iso /ztest/copy1.iso
/home/jim/my-fave-dvd.iso -> /ztest/copy1.iso

결과를 확인하십시오.

# ls -l /ztest; echo; zlist
total 3271173
-rw-r--r--  1 jim  jim  3347775488 Jul  1  2014 copy1.iso

NAME    USED  AVAIL     REFER  MOUNTPOINT
ztest  3.13G  6.08G     3.12G  /ztest

ztest  used                  3.13G                  -
ztest  referenced            3.12G                  -
ztest  usedbysnapshots       0B                     -
ztest  usedbydataset         3.12G                  -
ztest  usedbychildren        7.18M                  -
ztest  usedbyrefreservation  0B                     -
ztest  logicalused           3.12G                  -
ztest  logicalreferenced     3.12G                  -

NAME   PROPERTY    VALUE  SOURCE
ztest  dedupratio  1.00x  -

첫 번째 미디어 파일의 복사본 하나만 저장하므로 중복 제거 비율은 여전히 ​​1.00입니다. 복사본을 만들어 보겠습니다.

# cp -vp /ztest/copy1.iso /ztest/copy2.iso
/ztest/copy1.iso -> /ztest/copy2.iso
# ls -l /ztest; echo; zlist
total 6542345
-rw-r--r--  1 jim  jim  3347775488 Jul  1  2014 copy1.iso
-rw-r--r--  1 jim  jim  3347775488 Jul  1  2014 copy2.iso

NAME    USED  AVAIL     REFER  MOUNTPOINT
ztest  6.25G  6.07G     6.24G  /ztest

ztest  used                  6.25G                  -
ztest  referenced            6.24G                  -
ztest  usedbysnapshots       0B                     -
ztest  usedbydataset         6.24G                  -
ztest  usedbychildren        10.6M                  -
ztest  usedbyrefreservation  0B                     -
ztest  logicalused           6.24G                  -
ztest  logicalreferenced     6.24G                  -

NAME   PROPERTY    VALUE  SOURCE
ztest  dedupratio  2.00x  -

파일 시스템이 풀에 실제로 저장된 데이터보다 2.00배 더 큰 논리 데이터를 참조하므로 중복 제거 비율은 이제 2.00입니다. 그러나 의 출력에서는 값이 로 증가했지만 거의 변경되지 않은 zfs list것으로 표시 됩니다 . 더 많은 복사본을 만들어 보겠습니다.USED6.25GAVAIL6.07G

# cp -vp /ztest/copy1.iso /ztest/copy3.iso
/ztest/copy1.iso -> /ztest/copy3.iso
# cp -vp /ztest/copy1.iso /ztest/copy4.iso
/ztest/copy1.iso -> /ztest/copy4.iso
# ls -lh /ztest; echo; zlist
total 13084690
-rw-r--r--  1 jim  jim   3.1G Jul  1  2014 copy1.iso
-rw-r--r--  1 jim  jim   3.1G Jul  1  2014 copy2.iso
-rw-r--r--  1 jim  jim   3.1G Jul  1  2014 copy3.iso
-rw-r--r--  1 jim  jim   3.1G Jul  1  2014 copy4.iso

NAME    USED  AVAIL     REFER  MOUNTPOINT
ztest  12.5G  6.07G     12.5G  /ztest

ztest  used                  12.5G                  -
ztest  referenced            12.5G                  -
ztest  usedbysnapshots       0B                     -
ztest  usedbydataset         12.5G                  -
ztest  usedbychildren        10.6M                  -
ztest  usedbyrefreservation  0B                     -
ztest  logicalused           12.5G                  -
ztest  logicalreferenced     12.5G                  -

NAME   PROPERTY    VALUE  SOURCE
ztest  dedupratio  4.00x  -

이제 du12G 파일을 저장한다고 가정해 보겠습니다.

# du -h /ztest
 12G    /ztest

그러나 zpool풀에 3.14G의 데이터만 할당했으며 풀에는 여전히 6.36G의 할당되지 않은 공간이 있음을 보여줍니다.

# zpool list ztest
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
ztest  9.50G  3.14G  6.36G        -         -     0%    33%  4.00x    ONLINE  -

ln중복 제거 없이 사용하는 것과 동일

반면, 중복 제거 기능이 없는 파일 시스템은 동일한 목적을 달성하기 위해 신중하게 사용될 수 있으며 잠재적으로 복잡성, RAM 요구 사항 및 속도 측면에서 더 저렴한 비용으로 사용할 수 있습니다.

# zpool destroy ztest
# zpool create ztest md0
# cp -vp ~jim/my-fave-dvd.iso /ztest/copy1.iso
/home/jim/my-fave-dvd.iso -> /ztest/copy1.iso
# ln /ztest/copy1.iso /ztest/copy2.iso 
# ln /ztest/copy1.iso /ztest/copy3.iso 
# ln -s /ztest/copy1.iso /ztest/copy4.iso 

이제 우리는 여전히 네 가지 다른 위치(마스터 복사본 copy1.iso및 복제본 copy2) 에서 액세스할 수 있는 파일을 보유하고 있습니다 copy4.iso.

du3.1G 파일을 저장했음을 보여줍니다.

# du -h /ztest
3.1G    /ztest

ls많은 inode 번호가 동일하고(하드 링크) 하나의 파일이 심볼릭 링크임을 보여줍니다. 를 사용하면 ln추가 저장 오버헤드 없이 동일한 파일을 여러 위치에 배치할 수 있습니다.

# ls -lih /ztest
total 9813518
  2 -rw-r--r--  3 jim   jim     3.1G Jul  1  2014 copy1.iso
  2 -rw-r--r--  3 jim   jim     3.1G Jul  1  2014 copy2.iso
  2 -rw-r--r--  3 jim   jim     3.1G Jul  1  2014 copy3.iso
128 lrwxr-xr-x  1 root  wheel    16B Oct  7 13:25 copy4.iso -> /ztest/copy1.iso

zfs 파일 시스템은 3.1G가 사용되고 6.1G를 사용할 수 있음을 보여줍니다.

# zlist
NAME    USED  AVAIL     REFER  MOUNTPOINT
ztest  3.12G  6.08G     3.12G  /ztest

ztest  used                  3.12G                  -
ztest  referenced            3.12G                  -
ztest  usedbysnapshots       0B                     -
ztest  usedbydataset         3.12G                  -
ztest  usedbychildren        189K                   -
ztest  usedbyrefreservation  0B                     -
ztest  logicalused           3.12G                  -
ztest  logicalreferenced     3.12G                  -

NAME   PROPERTY    VALUE  SOURCE
ztest  dedupratio  1.00x  -

또한 zpool3.12G를 할당했으며 6.38G를 사용할 수 있음을 보여줍니다.

# zpool list ztest
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
ztest  9.50G  3.12G  6.38G        -         -     0%    32%  1.00x    ONLINE  -

이 예를 통해 여러분이 자체 테스트 프레임워크를 개발하여 ZFS 중복 제거를 실험하고 비용/이점 비율이 적합한지 확인할 수 있기를 바랍니다.

질문을 피하다

파일 지원 가상 장치의 ZFS 풀 실험 프레임워크는 기존 시스템에 ZFS 풀을 추가하기 위한 장기적인 솔루션이 아닙니다. 그러나 이는 현재 하드웨어가 필요한 리소스를 제공할 수 있는지, 특정 사용 사례의 데이터 및 데이터 처리 방식이 ZFS가 제공하는 기능을 활용할 수 있는지 여부를 결정하는 데 도움이 될 수 있습니다.

ZFS 풀을 추가하는 것이 이상적인 목표라고 판단되는 경우 새 디스크 파티션 및 파일 시스템으로 작업할 때마다 고려해야 할 몇 가지 일반적인 전제 조건은 다음과 같습니다.

  • 최근에 백업하셨나요? 지금 그것을 할!
  • 디스크에 이미 빈 파티션이 있습니까? 매우 편리합니다.
  • 사용 가능한 무료 파티션이 없나요? 그렇다면 현재 파일 시스템에 백업하고, 더 작은 파티션으로 크기를 조정하고, 새로 확보된 공간을 ZFS 전용 새 파티션에서 사용할 수 있도록 데이터를 복원할 수 있을 만큼 사용되지 않은 공간이 충분합니까?
  • 더 큰 새 드라이브를 구입하고 거기에 적절한 크기의 파티션을 만들어 현재 파일 시스템과 새 ZFS 파티션을 보관할 수 있습니까?

일단 가지고 있는 것:

  • 기존 파일 시스템 백업
  • ZFS 전용 파티션(우리는 이를 이라고 함 /dev/sda3)
  • ZFS 풀을 설치할 위치 결정/tank

다음 명령을 사용하여 기존 시스템에 ZFS 풀을 추가할 수 있습니다.

# zpool create tank /dev/sda3

필요한 경우 다음을 통해 중복 제거를 활성화할 수 있습니다.

# zfs set dedup=on tank

이는 비중복 풀이라는 점을 명심하세요. 드라이브에 오류가 발생하면 데이터가 손실됩니다. zpool scrub작업에서는 데이터 손상을 감지할 수 있지만 발견된 오류를 수정할 수는 없습니다.

즐기다!

관련 정보