「Bcache」の版間の差分
(https://wiki.archlinux.org/index.php?title=Bcache&oldid=733923 (2022-06-25T21:09:10)に同期) |
(→状況: 3台のハードドライブと3台の読み書きキャッシュSSD: https://wiki.archlinux.org/index.php?title=Bcache&oldid=743678 (2022-08-28T22:18:01)に同期) |
||
181行目: | 181行目: | ||
5. ライトバックモードを有効にします |
5. ライトバックモードを有効にします |
||
+ | |||
+ | {{Warning| |
||
+ | * Bcache 書き込みキャッシュは btrfs ファイルシステムに壊滅的な障害を引き起こす可能性があります。 |
||
+ | * Btrfs は配下のデバイスが順番に書き込みを実行すると想定していますが、bcache ライトバックはこの前提に違反する恐れがあり、これを使う btrfs ファイルシステムを崩壊させるかもしれません。 |
||
+ | * すべてのレイヤーまたはライト・キャッシュは停電時にデータを失うリスクを高めます。 |
||
+ | * 自己責任で btrfs とライトバックモードの bcache を使用してください。 |
||
+ | }} |
||
# echo writeback > /sys/block/bcache0/bcache/cache_mode |
# echo writeback > /sys/block/bcache0/bcache/cache_mode |
2022年9月11日 (日) 00:01時点における版
関連記事
Bcache (block cache) を使うことで SSD を他のブロックデバイス (通常は回転するHDD やアレイ) の読み書きキャッシュ (writeback モード) あるいは読み取りキャッシュ (writethrough または writearound) として活用できます。この記事ではルートパーティションとして Bcache を使って Arch をインストールする方法を説明します。bcache 自体の説明は bcache のホームページ を読んでください。必ずbcacheのマニュアルを読んで参照してください。Bcache は 3.10 以降のメインラインカーネルに含まれています。archインストールディスクのカーネルには 2013.08.01 以降のbcacheモジュールが含まれています。
Bcache を使うにはバッキングデバイスを bcache ブロックデバイスとしてフォーマットする必要があります。大抵の場合、blocks to-bcache でインプレース変換を実行できます。
目次
既存のシステムに bcached btrfs ファイルシステムをセットアップ
準備
bcache-toolsAUR をインストールします。
キャッシュとバッキングデータを保持するためにfdiskを使用してSSDとハードドライブに適切なパーティションを作成します。
状況: 1台のハードドライブと1台の読み取りキャッシュSSD
+--------------+ | btrfs /mnt | +--------------+ | /dev/Bcache0 | +--------------+ | Cache | | /dev/sdk1 | +--------------+ | Data | | /dev/sdv1 | +--------------+
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0 を作成します
# make-bcache -B /dev/sdv1
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。
# make-bcache -C /dev/sdk1
この例ではデフォルトのブロックサイズとバケットサイズである 512B と 128kB が使われています。ブロックサイズはバッキングデバイスのセクタサイズに一致すべきで、通常は 512 あるいは 4k です。バケットサイズはライトアンプリフィケーションを避けるためにキャッシュデバイスの消去ブロックサイズに一致すべきです。例えば、4k セクタの HDD と 2MB の消去ブロックサイズの SSD を使用する場合、コマンドは以下になります
# make-bcache --block 4k --bucket 2M -C /dev/sdk1
3. キャッシュデバイスのuuidを取得します
# bcache-super-show /dev/sdk1 | grep cset cset.uuid f0e01318-f4fd-4fab-abbb-d76d870503ec
4. バッキングデバイスにキャッシュデバイスを登録します。例示のuuidをあなたのキャッシュのuuidに置き換えてください。Udevルールが再起動時にこの処理を行うため一回だけ実行する必要があります。
# echo f0e01318-f4fd-4fab-abbb-d76d870503ec > /sys/block/bcache0/bcache/attach
5. btrfs ファイルシステムを作成します。
# mkfs.btrfs /dev/bcache0
6. ファイルシステムをマウントします
# mount /dev/bcache0 /mnt
7. initcpio 中にこのパーティションを使用可能にしたい場合(つまり、ブートプロセスのある時点で必要とする場合)、'bcache' フックをリスト内のblockとfilesystemsの間に追加するのと同様に /etc/mkinitcpio.conf のモジュール配列に 'bcache' を追加する必要があります。それからinitramfs を再生成する必要があります。
状況: 4台のハードドライブと1台の読み取りキャッシュSSD
+-----------------------------------------------------------+ | btrfs /mnt | +--------------+--------------+--------------+--------------+ | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 | +--------------+--------------+--------------+--------------+ | Cache | | /dev/sdk1 | +--------------+--------------+--------------+--------------+ | Data | Data | Data | Data | | /dev/sdv1 | /dev/sdw1 | /dev/sdx1 | /dev/sdy1 | +--------------+--------------+--------------+--------------+
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、 /dev/bcache1、 /dev/bcache2 と /dev/bcache3 を作成します
# make-bcache -B /dev/sdv1 # make-bcache -B /dev/sdw1 # make-bcache -B /dev/sdx1 # make-bcache -B /dev/sdy1
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。バッキングデバイスのグループに追加できるのは一つのキャッシュデバイスだけです。
# make-bcache -C /dev/sdk1
3. キャッシュデバイスのuuidを取得します
# bcache-super-show /dev/sdk1 | grep cset cset.uuid f0e01318-f4fd-4fab-abbb-d76d870503ec
4. バッキングデバイスにキャッシュデバイスを登録します。例示のuuidをあなたのキャッシュのuuidと置き換えてください。
# echo f0e01318-f4fd-4fab-abbb-d76d870503ec > /sys/block/bcache0/bcache/attach # echo f0e01318-f4fd-4fab-abbb-d76d870503ec > /sys/block/bcache1/bcache/attach # echo f0e01318-f4fd-4fab-abbb-d76d870503ec > /sys/block/bcache2/bcache/attach # echo f0e01318-f4fd-4fab-abbb-d76d870503ec > /sys/block/bcache3/bcache/attach
5. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。
# mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3
6. ファイルシステムをマウントします
# mount /dev/bcache0 /mnt
状況: 3台のハードドライブと3台の読み書きキャッシュSSD
+--------------------------------------------+ | btrfs /mnt | +--------------+--------------+--------------+ | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | +--------------+--------------+--------------+ | Cache | Cache | Cache | | /dev/sdk1 | /dev/sdl1 | /dev/sdm1 | +--------------+--------------+--------------+ | Data | Data | Data | | /dev/sdv1 | /dev/sdw1 | /dev/sdx1 | +--------------+--------------+--------------+
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1 と /dev/bcache2 を作成します
# make-bcache -B /dev/sdv1 # make-bcache -B /dev/sdw1 # make-bcache -B /dev/sdx1
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSDに障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれのSSDが必要です。ライトスルーとライトアラウンドモードのキャッシュSSDは、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。
# make-bcache -C /dev/sdk1 # make-bcache -C /dev/sdl1 # make-bcache -C /dev/sdm1
3. キャッシュデバイスのuuidを取得します
# bcache-super-show /dev/sdk1 | grep cset cset.uuid f0e01318-f4fd-4fab-abbb-d76d870503ec # bcache-super-show /dev/sdl1 | grep cset cset.uuid 4b05ce02-19f4-4cc6-8ca0-1f765671ceda # bcache-super-show /dev/sdm1 | grep cset cset.uuid 75ff0598-7624-46f6-bcac-c27a3cf1a09f
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示のuuidはあなたのキャッシュのuuidに置き換えてください。
# echo cset.uuid > /sys/block/bcache0/bcache/attach # echo f0e01318-f4fd-4fab-abbb-d76d870503ec > /sys/block/bcache0/bcache/attach # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda > /sys/block/bcache1/bcache/attach # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f > /sys/block/bcache2/bcache/attach
5. ライトバックモードを有効にします
# echo writeback > /sys/block/bcache0/bcache/cache_mode # echo writeback > /sys/block/bcache0/bcache/cache_mode # echo writeback > /sys/block/bcache1/bcache/cache_mode # echo writeback > /sys/block/bcache2/bcache/cache_mode
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。
# mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2
7. ファイルシステムをマウントします
# mount /dev/bcache0 /mnt
状況: 5台のハードドライブと3台のキャッシュSSD
+--------------------------------------------------------------------------+ | btrfs /mnt | +--------------+--------------+--------------+--------------+--------------+ | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 | /dev/Bcache4 | +--------------+--------------+--------------+--------------+--------------+ | WriteB Cache | Writethrough or writearound Cache | WriteB Cache | | /dev/sdk1 | /dev/sdl1 | /dev/sdm1 | +--------------+--------------+--------------+--------------+--------------+ | Data | Data | Data | Data | Data | | /dev/sdv1 | /dev/sdw1 | /dev/sdx1 | /dev/sdy1 | /dev/sdz1 | +--------------+--------------+--------------+--------------+--------------+
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1、/dev/bcache2、/dev/bcache3 と /dev/bcache4 を作成します。
# make-bcache -B /dev/sdv1 # make-bcache -B /dev/sdw1 # make-bcache -B /dev/sdx1 # make-bcache -B /dev/sdy1 # make-bcache -B /dev/sdz1
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSDに障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれのSSDが必要です。ライトスルーとライトアラウンドモードのキャッシュSSDは、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。
# make-bcache -C /dev/sdk1 # make-bcache -C /dev/sdl1 # make-bcache -C /dev/sdm1
3. キャッシュデバイスのuuidを取得します
# bcache-super-show /dev/sdk1 | grep cset cset.uuid f0e01318-f4fd-4fab-abbb-d76d870503ec # bcache-super-show /dev/sdl1 | grep cset cset.uuid 4b05ce02-19f4-4cc6-8ca0-1f765671ceda # bcache-super-show /dev/sdm1 | grep cset cset.uuid 75ff0598-7624-46f6-bcac-c27a3cf1a09f
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示のuuidはあなたのキャッシュのuuidに置き換えてください。
# echo f0e01318-f4fd-4fab-abbb-d76d870503ec > /sys/block/bcache0/bcache/attach # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda > /sys/block/bcache1/bcache/attach # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda > /sys/block/bcache2/bcache/attach # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda > /sys/block/bcache3/bcache/attach # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f > /sys/block/bcache4/bcache/attach
5. 非共有キャッシュでライトバックモードを有効にします
# echo writeback > /sys/block/bcache0/bcache/cache_mode # echo writeback > /sys/block/bcache4/bcache/cache_mode
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。
# mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 /dev/bcache4
7. ファイルシステムをマウントします
# mount /dev/bcache0 /mnt
Bcache の管理
1. 正しくセットアップされていることを確認する
# cat /sys/block/bcache0/bcache/state
出力は以下のどれかになります:
no cache
: bcache のバッキングデバイスにキャッシュデバイスが登録されていないことを意味します。- clean: 全て問題ないことを意味します。キャッシュはクリーンです。
- dirty: 全て正しくセットアップされており writeback が有効になっていてキャッシュがダーティであることを意味します。
- inconsistent: バッキングデバイスがキャッシュデバイスと同期されていないため問題が発生しています。
/dev/bcache0
デバイスをキャッシュデバイスがアタッチされていないバッキングデバイスに関連付けることもできます。全ての I/O (読み書き) が直接バッキングデバイスに直接渡されることを意味します (パススルーモード)。
2. 使用しているキャッシュモードを確認する
# cat /sys/block/bcache0/bcache/cache_mode
[writethrough] writeback writearound none
上記の例では writethrough モードが有効になっています。
3. bcached デバイスについての情報を表示する:
# bcache-super-show /dev/sdXY
4. バッキングデバイスを停止する:
# echo 1 > /sys/block/sdX/sdX[Y]/bcache/stop
5. キャッシュデバイスを登録解除する:
# echo 1 > /sys/block/sdX/sdX[Y]/bcache/detach
6. キャッシュデバイスを安全に除去する
# echo cache-set-uuid > /sys/block/bcache0/bcache/detach
7. アタッチされたデバイスを開放する
# echo 1 > /sys/fs/bcache/cache-set-uuid/stop
bcache デバイスへのインストール
1. インストールディスク (2013.08.01 以上) を起動。
2. AUR から bcache-toolsAUR パッケージをインストール。
3. HDD をパーティション分割します
grub はbcacheを扱えないため、最低でも2つのパーティションが必要です (起動用と bcache バッキングデバイス用のパーティション)。UEFI を使っている場合、EFI System Partition (ESP) も必要です。例:
1 2048 22527 10.0 MiB EF00 EFI System 2 22528 432127 200.0 MiB 8300 arch_boot 3 432128 625142414 297.9 GiB 8300 bcache_backing
4. HDD を bcache のバッキングデバイスとして設定します。
# make-bcache -B /dev/sda3
# make-bcache -B /dev/sd? /dev/sd? -C /dev/sd?
これで /dev/bcache0
デバイスができました。
5. SSD を設定します
SSD をキャッシュデバイスとしてフォーマットしてバッキングデバイスにリンクします
# make-bcache -C /dev/sdb # echo /dev/sdb > /sys/fs/bcache/register # echo UUID__from_previous_command > /sys/block/bcache0/bcache/attach
6. bcache デバイスをフォーマットします。/dev/bcache0
デバイスを自由に分割したい場合は LVM あるいは btrfs のサブボリュームを使ってください (/
, /home
, /var
などを分けたい場合など):
# mkfs.btrfs /dev/bcache0 # mount /dev/bcache0 /mnt/ # btrfs subvolume create /mnt/root # btrfs subvolume create /mnt/home # umount /mnt
cryptsetupなどを使用したい場合は、LUKSをセットアップすることもできます。例えば、'cryptdevice' カーネルオプション内のbcacheデバイスの参照は正常に機能します。
7. インストール用のマウントポイントを準備します:
# mkfs.ext4 /dev/sda2 # mkfs.msdos /dev/sda1 (ESPが500MB以上の場合、代わりにmkfs.vfatを使ってFAT32パーティションを作成してください)
ここで arch-install-scripts パッケージをインストールします。そうしたら:
# mount /dev/bcache0 -o subvol=root,compress=lzo /mnt/ # mkdir /mnt/boot /mnt/home # mount /dev/bcache0 -o subvol=home,compress=lzo /mnt/home # mount /dev/sda2 /mnt/boot # mkdir /boot/efi # mount /dev/sda1 /mnt/boot/efi/
8. 下記以外は通常通りインストールガイドに従ってシステムをインストールします:
/etc/mkinitcpio.conf
を編集して mkinitcpio -p linux
を実行する前に:
- bcache-toolsAUR パッケージをインストールする。
/etc/mkinitcpio.conf
を編集し:- "bcache" モジュールを追加する
- "bcache" フックをblockとfilesystem フックの間に追加する
インストールディスクからのアクセス
ここではインストールディスクが起動する前に存在していたbcacheパーティションにインストールディスクからアクセスする方法を示します。前のセクションと同様に、インストールディスクを起動し、AURから bcache-toolsAUR をインストールします。そして、モジュールをカーネルに追加します:
# modprobe bcache
デバイスは/dev/bcache*
にすぐには表示されません。カーネルに強制的に見つけさせるために、パーティションテーブルの再読み込みを指示します:
# partprobe
/dev/bcache*
が存在するはずなので、マウント、再フォーマットなどを続けることができるようになります。
インターネットを設定しbcache-toolsAURをインストールすることなくキャッシュを開始するには、メインラインカーネルに含まれているカーネルモジュールを前述の様にロードします。それから全てのスレーブデバイスを登録することでキャッシュを開始します:
# echo /dev/sdX > /sys/fs/bcache/register # echo /dev/sdY > /sys/fs/bcache/register # ...
最後に必要なスレーブデバイスが登録された直後にbcacheデバイスが現れます。
writethrough バッキングデバイスは、キャッシュを登録しなくても開始することができます。これは、デバイスが多数ありあなたが急いでいる場合、または一部のキャッシュに何らかの理由でアクセスできない場合に実行できます。上述のように、デバイスを登録し、それから開始します:
# echo 1 > /sys/block/sdX/bcache/running
Bcacheは実際にはキャッシュを切り離しておらず、登録されている場合は引き続きキャッシュデバイスを追加します。このコマンドはライトバックバッキングデバイスで"機能"しますが、データが大幅に破損します。見つからないキャッシュが完全に回復不能な場合にのみ実行してください。
設定
設定できるオプションは多数存在します (キャッシュモードやキャッシュのフラッシュ間隔、シーケンシャル書き込みのヒューリスティックなど)。/sys
のファイルに書き込むことで設定します。詳しくは bcache ユーザードキュメント を参照してください。
キャッシュモードを切り替えるには /sys/block/bcache[0-9]/bcache/cache_mode
に writethrough
, writeback
, writearound
または none
のどれかを書き込みます。
/sys
の変更は一時的なものであり、再起動すると元に戻ってしまうので注意してください(少なくとも cache_mode にはこの回避策は必要ないようです)。起動時にカスタム設定を行うには /etc/tmpfile.d
に .conf ファイルを作成してください。永続的な方法で、bcache0
のシーケンシャルカットオフを 1 MBにしてキャッシュモードを writeback に設定するには、/etc/tmpfiles.d/my-bcache.conf
ファイルを以下の内容で作成します:
w /sys/block/bcache0/bcache/sequential_cutoff - - - - 1M w /sys/block/bcache0/bcache/cache_mode - - - - writeback
高度な操作
バッキングデバイスのリサイズ
パーティションの開始位置を移動しない限り、バッキングデバイスのサイズを変更することができます。このプロセスは メーリングリスト で説明されています。以下の例では bcache0 上で直接 btrfs ボリュームを使用しています。LVM コンテナや他のファイルシステムの場合、手順は異なります。
拡大例
以下の例では、ファイルシステムを 4GB 拡大します。
1.ライブCD/USBドライブ(bcacheを有効にする必要はありません)で再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズが4G大きい状態で再作成します。
2. 通常のインストールで再起動します。あなたのファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します。btrfsの場合、こうします
# btrfs filesystem resize max /
ext3/4の場合はこうです:
# resize2fs /dev/bcache0
縮小例
この例では、ファイルシステムを 4GB 縮小します。
1. writeback キャッシュを無効化 (writethrough キャッシュに切り替え) してディスクが消去されるまで待機してください。
# echo writethrough > /sys/block/bcache0/bcache/cache_mode $ watch cat /sys/block/bcache0/bcache/state
状態が "clean" になるまで待ってください。しばらく時間がかかります。
キャッシュをバッキングデバイスに強制的にフラッシュする
こうすることを推奨します
# echo 0 > /sys/block/bcache0/bcache/writeback_percent
これにより、キャッシュのダーティデータが1分以内にフラッシュされます。
その後値を元に戻します
# echo 10 > /sys/block/bcache0/bcache/writeback_percent
2. マウントされたファイルシステムを希望する容量よりいくらか縮小し、後で誤ってクリップしないようにします。btrfsの場合、こうします:
# btrfs filesystem resize -5G /
ext3/4 の場合は resize2fs を使用しますが、パーティションがアンマウントされている場合に限ります
$ df -h /home
/dev/bcache0 290G 20G 270G 1% /home
# umount /home # resize2fs /dev/bcache0 283G
3. LiveCD/USBドライブ(bcacheをサポートする必要はありません)を再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズを4G小さくして再作成します。
4. 通常のインストールで再起動します。あなたファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します(つまり、手順3で実際のパーティションを縮小したサイズ)。btrfsの場合、こうします:
# btrfs filesystem resize max /
ext3/4の場合はこうです:
# resize2fs /dev/bcache0
5. 有効にしたい場合、ライトバックキャッシュを再度有効にします:
# echo writeback > /sys/block/bcache0/bcache/cache_mode
トラブルシューティング
起動時に /dev/bcache デバイスが存在しない
以下のようなエラーが busy box シェルに表示される場合:
ERROR: Unable to find root device 'UUID=b6b2d82b-f87e-44d5-bbc5-c51dd7aace15'. You are being dropped to a recovery shell Type 'exit' to try and continue booting
バッキングデバイスが "writeback" モードに設定されていると上記のエラーが発生することがあります (デフォルトは writearound です)。"writeback" モードでは、キャッシュデバイスが登録・アタッチされるまで /dev/bcache0 デバイスは開始しません。登録は起動するたびに行う必要がありますが、アタッチは一度だけ行う必要があります。
ブートを続行するには、次のいずれかを試してください:
- バッキングデバイスとキャッシュデバイスの両方を登録する
# echo /dev/sda3 > /sys/fs/bcache/register # echo /dev/sdb > /sys/fs/bcache/register
/dev/bcache0 デバイスが存在する場合、exit と入力して起動を続行してください。ルートデバイスをマウントする前にデバイスが登録されるように initcpio を修正する必要があります。
- キャッシュデバイスをバッキングデバイスに再アタッチする:
キャッシュデバイスが登録されている場合、キャッシュのUUIDを含むフォルダが/sys/fs/bcache
に存在する必要があります。以下の例ではそのUUIDを使ってください:
# ls /sys/fs/bcache/
b6b2d82b-f87e-44d5-bbc5-c51dd7aace15 register register_quiet
# echo b6b2d82b-f87e-44d5-bbc5-c51dd7aace15 > /sys/block/sda/sda3/bcache/attach
/dev/bcache0
デバイスが現れたら、exitと入力して起動を続行します。再度行う必要はありません。これが続く場合、bcacheメーリングリストで質問してください。
- キャッシュを無効にし、バッキングデバイスをキャッシュなしで強制的に実行します。"dirty_data"などの統計情報を確認して、失われるデータの量を把握することをお勧めします。
# cat /sys/block/sda/sda3/bcache/dirty_data
-3.9M
ダーティデータは、バッキングデバイスに書き込まれていないキャッシュ内のデータです。バッキングデバイスを強制的に実行すると、後でキャッシュを再接続しても、このデータは失われます。
# cat /sys/block/sda/sda3/bcache/running
0
# echo 1 > /sys/block/sda/sda3/bcache/running
これで /dev/bcache0
デバイスが現れます。exitと入力して、起動を続行します。キャッシュデバイスの登録を解除して、make-bcacheを再度実行することをお勧めします。/dev/bcache0
へのfsckも賢明でしょう。bcache ドキュメントを参照してください。
/sys/fs/bcache/ が存在しない
起動したカーネルで bcache が有効になっていないか、bcache モジュールがロードされていません
書き込みエラー: ブロックパラメータが一致しないため、デバイスをアタッチしようとしたときに引数が無効です
デバイスをアタッチしようとしたときに bash: echo: write error: Invalid argument
となり、実際のエラーはdmesgで表示されます:
bcache: bch_cached_dev_attach() Couldn't attach sdc: block size less than set's block size
これは、--block 4k
パラメータがどちらのデバイスにも設定されておらず、デフォルトと不一致になる場合があるために発生します。
バッキングデバイスとキャッシングデバイスの両方を1つのコマンドで作成すると問題は自動的に解決しますが、別々のコマンドを使用する場合はブロックサイズパラメータを両方のデバイスに手動で設定する必要がある場合があります。