Bcachefs

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

Bcachefs は、BtrfsZFS の機能をよりクリーンなコードベース、より安定性、より高速、GPL 互換のライセンスを提供することを目的とした次世代の CoW ファイルシステムです。

Bcache は、主に Kent Overstreet によって開発されています。

インストール

カーネル 6.7 (2024年1月) で Bcachefs はアップストリーム カーネル にマージされ、linux パッケージで利用できるようになりました。他のカーネルパッケージは 6.7 より古いバージョンをベースにしている可能性があり、Bcachefs 用の特別なパッチが必要です。

Bcachefs ユーザースペースツールは bcachefs-tools から入手できます。

セットアップ

シングルドライブ

#bcachefs format /dev/sda
#mount -t bcachefs /dev/sda/mnt

複数のドライブ

Bcachefs は、RAID0 と同様に、デフォルトでデータをストライプ化します。冗長性は replicas オプションを介して処理されます。--replicas=2 を備えた 2 台のドライブは RAID1 に相当し、--replicas=2 を備えた 4 台のドライブは RAID10 に相当します。

# bcachefs format /dev/sda /dev/sdb --replicas=n
# mount -t bcachefs /dev/sda:/dev/sdb /mnt

異種ドライブがサポートされています。サイズが異なる場合は、一部に大きなストライプが使用され、すべてが同じ割合で埋められます。速度が異なる場合、複製されたデータの読み取りは、IO 遅延が最も短いデータに送信されます。一部が他よりも信頼性が高い場合 (ハードウェア RAID デバイスなど)、--durability=2 device を設定して、そのデバイス上のデータの各コピーを 2 つの複製としてカウントできます。

SSD キャッシング

Bcachefs には、バックグラウンド、フォアグラウンド、プロモートの3つのストレージカテゴリがあります。ファイルシステムへの書き込みでは、フォアグラウンドドライブに優先順位が付けられ、その後、時間の経過とともにバックグラウンドに移動されます。読み取りはプロモートドライブにキャッシュされます。

ノート: これらは、単一の大規模プールに対する優先ガイドラインにすぎません。書き込みは、フォアグラウンドがいっぱいの場合はバックグラウンドに直接行われ、両方がいっぱいの場合はプロモートに行われます。メタデータはフォアグラウンドを優先しますが、どのメタデータにも書き込むことができます。キャッシュドライブにはまだデータが含まれている可能性があるため、キャッシュドライブを削除するときは注意してください。デバイスの削除 を参照してください。

推奨される設定は、フォアグラウンドとプロモートに ssd グループを使用し、バックグラウンド (ライトバックキャッシュ) に hdd グループを使用することです。

# bcachefs format \
    --label=ssd.ssd1 /dev/sda \
    --label=ssd.ssd2 /dev/sdb \
    --label=hdd.hdd1 /dev/sdc \
    --label=hdd.hdd2 /dev/sdd \
    --label=hdd.hdd3 /dev/sde \
    --label=hdd.hdd4 /dev/sdf \
    --replicas=2 \
    --foreground_target=ssd \
    --promote_target=ssd \
    --background_target=hdd
# mount -t bcachefs /dev/sda:/dev/sdb:/dev/sdc:/dev/sdd:/dev/sde:/dev/sdf /mnt

ライトスルーキャッシュの場合は、上記と同じことを行いますが、各 SSD デバイスで --durability=0 device を設定します。 ライトアラウンドキャッシュの場合、フォアグラウンドターゲットを hdd グループに、ターゲットを ssd グループにプロモートします。

マウント

デフォルトのマウント方法では、マウントディレクティブですべてのデバイスを指定します。

# mount -t bcachefs /dev/sdA:/dev/sdB:/dev/sdC:/dev/sdD:/

mount.bcachefs コマンドは、UUID によるファイルシステムのマウントをサポートしています。 これは、ファイルシステムの作成時に bcachefs format によって表示されます。

# mount.bcachefs UUID=f66d108f-83d2-4679-b50b-7d5e710f6a2b /mnt/

設定

ほとんどのオプションは、 bcachefs format 中、マウント時 (mount -o option=value)、またはsysfs (echo X > /sys/fs/bcachefs/UUID/options/option) フォーマット中にオプションを設定するか、 sysfs を介してオプションを変更すると、ファイルシステムのスーパーブロックに保存され、それらのドライブのデフォルトになります。マウントオプションはこれらのデフォルトを上書きします。

ノート: sysfs を使用できるようにするには、ファイルシステムをマウントする必要があります。 fsck を除くすべての操作はライブファイルシステムで可能です

使用可能なオプションの例は次の通りです:

Bcachefs options
Option Description
metadata_checksum メタデータの書き込みに使用されるチェックサムアルゴリズムを指定します。デフォルトのアルゴリズムは crc32c です。nonecrc32ccrc64xxhash のいずれかを選択できます。
data_checksum データの書き込みに使用されるチェックサムアルゴリズムを指定し、metadata_checksum と同じデフォルトとオプションを共有します。
compression (フォアグラウンド) 圧縮に使用するアルゴリズムを指定します。デフォルトでは、このオプションは指定されていません。nonelz4gzipzstd のいずれかを選択できます。
background_compression (バックグラウンド) 圧縮に使用するアルゴリズムを指定し、compression. と同じデフォルトとオプションを共有します。
str_hash ディレクトリエントリと xattrs に使用されるハッシュ関数を指定します。crc32ccrc64、および siphash のいずれかを選択できます。
nocow 可能な場合は、すべての書き込みがその場で行われます。スナップショットと reflink では引き続き書き込みが COW になります。このオプションはデータのチェックサム、圧縮、暗号化を暗黙的に無効にします。
encrypted ファイルシステム (chacha20/poly1305) で 暗号化 を有効にします。パスフレーズの入力を求められます。

その他のオプションについては、bcachefs ドキュメント を参照してください。

以下は、bcachefs setattr file --option=value を使用して、ディレクトリごとまたはファイルごとに設定することもできます。ディレクトリにオプションを設定すると、再帰的にオプションが伝播されます。

ノート: rebalance thread はまだバックグラウンドで replicas を調整していません。つまり、ファイルの replicas オプションを変更する場合は、手動で rereplicate コマンドを実行して、古いファイルが新しいルールに従っていることを確認する必要があります。
  • data_replicas
  • data_checksum
  • compression, background_compression
  • foreground_target, background_target, promote_target

どのオプションがアクティブであるかを確認するには、getfattr -d -m 'bcachefs_effective\.' directory/file を実行します。

ノート: ディスク使用量レポートは現在、非圧縮サイズを表示しています。それ以外は圧縮が完了しています。

デバイスのグループの変更

# echo group > /sys/fs/bcachefs/filesystem_uuid/dev-X/label
ノート: これを有効にするには、再マウントが必要です。

デバイスの追加

# bcachefs device add --group=group /mnt /dev/device

これがグループ内の最初のドライブである場合は、それを使用するためにターゲット設定を変更する必要があります。この例は、キャッシュドライブを追加するためのものです。

# echo new_group > /sys/fs/bcachefs/filesystem_uuid/options/promote_target
# echo new_group > /sys/fs/bcachefs/filesystem_uuid/options/foreground_target
# echo old_group > /sys/fs/bcachefs/filesystem_uuid/options/background_target
ノート: 追加されたデバイス間でストライピングされるのは新しい書き込みのみです。ディスクのリバランスがトリガーされると、ディスク使用量が特定のしきい値に達するまで、既存のものは変更されません。現在、リバランス/リストライプを手動でトリガーすることはできません。

デバイスの削除

まず、少なくとも 2 つのメタデータのレプリカがあることを確認します (Evacuate はメタデータに対して機能していないようです) データとメタデータがすでに複製されている場合は、この手順をスキップできます。

# echo 2 > /sys/fs/bcachefs/UUID/options/metadata_replicas
# bcachefs data rereplicate /mnt
# bcachefs device set-state device readonly
# bcachefs device evacuate device

デバイスを削除します:

# bcachefs device remove device
# bcachefs data rereplicate /mnt

ヒントとテクニック

さらに有用なエラーメッセージについては、ジャーナルを確認してください。

フラグの順序

一部の bcachefs format フラグは、引数の順序に基づいて設定され、フラグが切り替えられた後のドライブにのみ影響します。たとえば、SSD に --durability=0 を持たせて --discard を有効にし、HDD ではデフォルトを使用する場合は、引数が次の順序で渡されるようにしてください。

# bcachefs format \
    --label=hdd.hdd1 /dev/sdC \
    --label=hdd.hdd2 /dev/sdD \
    --label=hdd.hdd3 /dev/sdE \
    --label=hdd.hdd4 /dev/sdF \
    --durability=0 --discard \
    --label=ssd.ssd1 /dev/sdA \
    --label=ssd.ssd2 /dev/sdB \
    --replicas=2 \
    --foreground_target=ssd \
    --promote_target=ssd \
    --background_target=hdd

トラブルシューティング

32-ビットプログラムがディレクトリの内容を認識しない

一部の 32-ビットプログラムは、readdir(3) syscall の実行時にファイルシステムから返されるデータの非互換性により、Bcachefs 内のディレクトリの内容の取得に失敗する場合があります。[1]

この問題は、そのようなプログラムの読み書きに tmpfs などの別のファイルシステムを一時的に使用することで回避できます。

スワップファイルにはサポートされていないエクステントが含まれています

Bcachefs は現在 swapfiles をサポートしていません。

マルチデバイス fstab

現在、systemd のバグ があり、fstab でコロンで区切られたデバイスを使用して起動時にマルチデバイス bcachefs ファイルシステムをマウントできません。 mount -a を実行すると機能しますが、起動時にはマウントされません。ただし、bcachefs-tools バージョン 1.7.0 以降では、1 つのデバイスノードを使用してマルチデバイスアレイをマウントできるようになりました。これにより、通常の UUID= 指定子の使用が可能になります。

# UUID=10176fc9-c4fa-4a30-9fd0-a756d861c4cd     /mnt   bcachefs defaults,nofail 0 0

ファイルシステム UUID / 外部 UUID は、次のいずれかを使用して見つけることができます:

# bcachefs fs usage
# bcachefs show-super device

暗号化されたデバイスのマウントエラー

--encrypted オプションで作成されたデバイスのマウントが、bcachefs locked /dev/sdXY の後に失敗した場合

ERROR - bcachefs::commands::cmd_mount: Fatal error: Required key not available

これは、キーをセッション [2] に手動でリンクすることで回避できます:

# keyctl link @u @s
# mount /dev/sdXY /mnt
Enter passphrase:

mount によって照会されるパスフレーズを新たに入力する必要はありません (Enter を押すだけで十分です。)

参照