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のみで構成された2番目のRAIDアレイを追加し、最初の単一デバイスを変換することによって達成されるようです。 BTRFSはいくつかのデバイスの1つになります。
私が理解していないのは、移行の実行方法と、「メタデータ」ケースがメタデータのみをSSDに移動するようにデータからメタデータを分離する方法です。さらに、「データ層」モードは、どのように完全な書き込みをSSD層に直接指示しますか?
どんなアイデアがありますか?
答え1
お客様は、NetegarがすでにMergerFS階層キャッシュを介してユーザーフレンドリーで非常にシンプルな構成で実行できることを実行できる方法を見つけたと述べました。 https://github.com/trapexit/mergerfs#tiered-caching
2つのMergerFSプールA)1つは、SSDを含むすべてのHDDドライブ(「POOL」、tier0)を含み、空き容量が最も少ないデバイスに書き込むように設定します(空き容量がXだけ残っていない場合)。 B)2番目のプール(「POOL-ARCHIVE」、tier1)にはHDDのみが含まれています。
ユーザーとすべてのアプリケーションは、最初のプールへのパスのみを使用します。
過去X日間、最初のプールから2番目のプールに触れていないすべてのアイテムをコピーするナイトスクリプト。ドライブは同じであるため、SSDのデータのみがコピーされます。これは、2番目のプールへのパスを使用する唯一のプロジェクトです。
これがホームサーバーを設定する方法です。すべてのドライブはBtrFS形式です。私はRaidを使用していません(このソリューションは利用できません)。
利点:
- ドライブに障害が発生すると、そのドライブのデータのみが失われます(SnapRAIDを最初のバックアップシステムとして使用してこの問題を軽減しました)。 BtrFS-RAID0 などのプール全体は失われません。
- これは設定が非常に簡単です。 /etc/fstabには、階層キャッシュである2つのマウントポイントがあります。
- X 個の空き領域だけが残っている場合を除き、常に SSD を最初に使用します。最高速度を提供します。
欠点:
- MergerFSはユーザースペースのファイルシステム上で実行されるため、MergerFSプールでBtrFSサブボリューム(スパニングディスク)を使用することはできません。
- これはまた、プールからサブボリュームのスナップショットを作成できないことを意味します。私のプール内の各ユーザーのデータフォルダのタイムマシンと同じスナップショットを取得したいと思います。
私は単純さのためにMergerFSが大好きですが、質問2はNetjearが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層の使用量がほぼゼロになるまで減少します。奇妙なことは、これまでこのコマンドを手動で実行できないことです。
まだ「スイープ」バランスフィルタを把握できません。
-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を確認してください。