BTRFS 계층형 스토리지 - 어떻게 수행됩니까?

BTRFS 계층형 스토리지 - 어떻게 수행됩니까?

NETGEAR는 ReadyNAS 운영 체제에서 BTRFS를 사용하고 최신 버전에서 계층형 스토리지를 구현했습니다. 그들은 ReadyNAS v6.9에서 "메타데이터" 계층으로 시작한 다음 v6.10에서 "데이터 계층"을 추가했습니다. 시스템은 SSD를 계층 0으로 사용하여 시스템에서 속도가 느린 HDD에 대한 액세스 속도를 높입니다. 시스템 설명에는 두 경우 모두 메타데이터가 SSD에 상주하며 "데이터 계층"의 경우 새로 작성된 데이터가 먼저 SSD에 기록된 다음 주기적으로 HDD로 마이그레이션되거나 SSD 계층이 지정된 수준으로 채워집니다.

ReadyNAS는 일반 설치 시 RAID 지원 HDD 위에 BTRFS를 사용합니다. 예를 들어 내 시스템에는 BTRFS가 단일 장치로 보고 사용하는 4개 디스크의 RAID5가 있습니다.

계층화가 구현되는 방식을 살펴보면 "메타데이터" 및 "데이터 계층" 설정 모두 기본 HDD RAID 배열에 SSD로만 구성된 두 번째 RAID 배열을 추가하고 초기 단일 장치를 변환함으로써 달성되는 것으로 보입니다. BTRFS는 여러 장치 중 하나가 됩니다.

내가 이해하지 못하는 것은 마이그레이션이 수행되는 방식과 "메타데이터" 사례가 메타데이터만 SSD로 이동하도록 데이터에서 메타데이터를 분리하는 방법입니다. 또한 "데이터 계층" 모드는 어떻게 전체 쓰기를 SSD 계층에 직접 지시합니까?

어떤 아이디어가 있나요?

답변1

귀하는 Netgear가 이미 MergerFS 계층형 캐시를 통해 사용자 친화적이고 매우 간단한 구성으로 수행할 수 있는 작업을 수행할 수 있는 방법을 찾았다고 말씀하셨습니다. https://github.com/trapexit/mergerfs#tiered-caching

  1. 2개의 MergerFS 풀 A) 하나는 SSD를 포함한 모든 HDD 드라이브("POOL", tier0)를 포함하고 여유 공간이 가장 적은 장치에 쓰도록 설정합니다(여유 공간이 X만큼 남아 있지 않은 경우). B) 두 번째 풀("POOL-ARCHIVE", tier1)에는 HDD만 포함됩니다.

  2. 사용자와 모든 애플리케이션은 첫 번째 풀에 대한 경로만 사용합니다.

  3. 지난 X일 동안 첫 번째 풀에서 두 번째 풀로 손대지 않은 모든 항목을 복사하는 야간 스크립트입니다. 드라이브가 동일하므로 SSD의 데이터만 복사됩니다. 이는 두 번째 풀에 대한 경로를 사용하는 유일한 프로젝트입니다.

이것이 바로 홈 서버를 설정하는 방법입니다. 모든 드라이브는 BtrFS 형식입니다. 저는 Raid를 사용하지 않습니다(이 솔루션을 사용할 수 없습니다).

이점:

  1. 드라이브에 장애가 발생하면 해당 드라이브의 데이터만 손실됩니다(SnapRAID를 첫 번째 백업 시스템으로 사용하여 이 문제를 완화했습니다). BtrFS-RAID0과 같은 전체 풀은 손실되지 않습니다.
  2. 이는 설정이 매우 쉽습니다. /etc/fstab에는 계층적 캐시인 2개의 마운트 지점이 있습니다!
  3. X개의 여유 공간만 남아 있는 경우를 제외하고 항상 SSD를 먼저 사용합니다. 최대 속도를 제공합니다.

결점:

  1. MergerFS는 사용자 공간의 파일 시스템 위에서 실행되기 때문에 MergerFS 풀에서 BtrFS 하위 볼륨(스패닝 디스크)을 사용할 수 없습니다.
  2. 이는 또한 풀에서 하위 볼륨의 스냅샷을 생성할 수 없음을 의미합니다. 내 풀에 있는 각 사용자의 데이터 폴더에 대한 타임머신과 같은 스냅샷을 갖고 싶습니다.

나는 단순성 때문에 MergerFS를 정말 좋아하지만, 질문 2는 Netgear가 BTRFS를 사용하여 유사한 솔루션을 어떻게 해독할 수 있는지에 정말 관심을 갖게 했습니다.

답변2

좋아요, 주기적 밸런싱 중에 제가 발견한 현상은 다음과 같습니다.

호스트에서 다음 프로세스를 시작합니다.

btrfs balance start -dsweep lt:/dev/md127:7 /data LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DBUS_SESSION_BUS_ADDRESS=unix:path=/var/netatalk/spotlight.ipc TRACKER_USE_CONFIG_FILES=1 TRACKER_USE_LOG_FILES=1 XDG_DATA_HOME=/apps/.xdg/local/share XDG_CONFIG_HOME=/apps/.xdg/config XDG_CACHE_HOME=/apps/.xdg/cache

여기서 /data는 계층화된 데이터 볼륨이고 /dev/md127은 버퍼/캐시로 사용되는 SSD 어레이입니다.

이 프로세스는 SSD 계층의 데이터가 거의 완전히 HDD 계층으로 이동할 때까지 실행됩니다. 예를 들어 도중에 다음과 같은 내용을 보았습니다.

btrfs fi sh /data
Label: '0a44c6bc:data'  uuid: ed150b8f-c986-46d0-ada8-45ee219acbac
    Total devices 2 FS bytes used 393.14GiB
    devid    1 size 7.12TiB used 359.00GiB path /dev/md126
    devid    2 size 114.68GiB used 42.06GiB path /dev/md127

그런 다음 SSD 계층 사용량이 거의 0이 될 때까지 감소합니다. 이상한 점은 지금까지 이 명령을 수동으로 실행할 수 없다는 것입니다.

아직 "스윕" 밸런스 필터를 파악할 수 없습니다.

-help가 표시되는 내용은 다음과 같습니다.

# btrfs balance start --help
usage: btrfs balance start [options] <path>

    Balance chunks across the devices

    Balance and/or convert (change allocation profile of) chunks that
    passed all filters in a comma-separated list of filters for a
    particular chunk type.  If filter list is not given balance all
    chunks of that type.  In case none of the -d, -m or -s options is
    given balance all chunks in a filesystem. This is potentially
    long operation and the user is warned before this start, with
    a delay to stop it.

    -d[filters]    act on data chunks
    -m[filters]    act on metadata chunks
    -s[filters]    act on system chunks (only under -f)
    -v             be verbose
    -f             force reducing of metadata integrity
    --full-balance do not print warning and do not delay start
    --background|--bg
                   run the balance as a background process

lt:/dev/md127:7그러나 이는 정기적으로 실행되는 명령의 "" 부분 에 어떻게 매핑되는지 설명하지 않습니다 .

btrfs balance start -dsweep lt:/dev/md127:7 /data

/dev/md127 데이터 사용량이 7% 미만으로 떨어질 때까지 실행한다는 것은 무엇을 의미합니까? ! ?

답변3

정기적으로 실행되고 마이그레이션을 수행하는 cronjob이어야 합니다.

이 작업을 수행할 수 있는 항목이 있는지 /etc/cron.d를 확인하세요.

관련 정보