bcacheでHDDを10倍高速化:古いSSDをLinuxのキャッシュとして活用する方法

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

クイックスタート:5分で違いを実感

2TBの低速なHDDと、余っている120GBのSSDを持っていませんか?それらを無駄にしないでください。わずか数行のコマンドで、これら2つを1つのパーティションに統合できます。HDDの巨大な容量と、SSDの圧倒的なスピードを両立させましょう。

この例では、/dev/sdb をHDD(Backing device)、/dev/sdc をSSD(Caching device)とします。警告:この操作により、両方のドライブのデータが完全に消去されます。

# 1. 管理ツールのインストール
sudo apt update && sudo apt install bcache-tools -y

# 2. 古いフォーマットのクリア
sudo wipefs -a /dev/sdb /dev/sdc

# 3. bcacheの初期化(HDDは -B、SSDは -C)
sudo make-bcache -B /dev/sdb -C /dev/sdc

# 4. フォーマットしてすぐに使用
sudo mkfs.ext4 /dev/bcache0
sudo mount /dev/bcache0 /mnt/data

結果はどうでしょうか?/dev/bcache0 というデバイスが出現します。大容量ファイルをコピーしてみてください。最初はSSDが処理を肩代わりするため、書き込み速度が非常に高速であることがわかります。

なぜbcacheはエンジニアにとって「お得」なのか?

実際、データ保存用に4TBや8TBのSSDを購入するのは、不必要な贅沢と言えます。bcache (Block Cache) は、Linuxカーネル3.10から標準搭載されているモジュールです。これにより、高速なドライブ(SSD/NVMe)を、大容量だが低速なドライブ(HDD)のバッファとして使用できるようになります。

大容量SSDに高いコストをかける代わりに、4TBのHDD(約1万円)と250GBのSSD(約3000円)を組み合わせるだけで十分です。システムは頻繁にアクセスされるデータ(ホットデータ)を自動的にSSDへ移動させ、あまり使われないデータ(コールドデータ)はHDDに置いたままにします。実際のテストでは、使用するSSDの種類にもよりますが、ランダムリード(Random Read)の速度が1MB/sから100MB/s以上に向上することもあります。

詳細な設定手順と最適化

ステップ1:デバイスの確認

コマンドを入力する前に、lsblk を使用してドライブ名を慎重に確認してください。一文字間違えるだけで、誤ってOSの入ったドライブを消去してしまう可能性があります。

lsblk

正しく特定できたら、システムの競合を避けるために古いパーティションの「シグネチャ」を消去します:

sudo wipefs -a /dev/sdb
sudo wipefs -a /dev/sdc

ステップ2:Backing and Cachingの関係を設定

区別すべき2つの役割があります:

  • Backing Device (HDD): 実際のデータを保存する場所。
  • Caching Device (SSD): 高速な中継地点。

複数のHDDがある場合、個別に初期化することで、1つのSSDをすべてのHDDの共通キャッシュとして使用できます:

sudo make-bcache -B /dev/sdb
sudo make-bcache -C /dev/sdc

ステップ3:カーネルへのデバイス登録

通常、bcacheは自動的に認識されます。もし /dev/bcache0 が現れない場合は、次のコマンドでカーネルに手動登録を強制してください:

echo /dev/sdb | sudo tee /sys/fs/bcache/register
echo /dev/sdc | sudo tee /sys/fs/bcache/register

適切なキャッシュモードの選択:データの損失を防ぐために

bcacheには主に3つの動作モードがあります。モードの選択を誤ると、SSDが突然故障した際にデータを失う可能性があります。

  • Writethrough (デフォルト): データはSSDとHDDの両方に同時に書き込まれます。非常に安全ですが、書き込み速度はHDDの性能に制限されます。
  • Writeback: データをまずSSDに書き込み、システムが空いている時にHDDへ同期します。書き込み速度は劇的に向上しますが、HDDへの同期前にSSDが故障するとデータ紛失のリスクがあります。
  • Writearound: 読み込み時のみキャッシュします。内容が頻繁に変更されない映画や写真のサーバーに適しています。

データベースの実行やコードのコンパイルなど、最高のパフォーマンスを得るために Writeback を有効にするには:

echo writeback | sudo tee /sys/block/bcache0/bcache/cache_mode

システムの健康状態を確認する

bcacheが実際に動作しているか確認するには、システムファイルの状態をチェックします:

cat /sys/block/bcache0/bcache/state

clean と表示されれば正常です。キャッシュのヒット率(HDDではなくSSDからどれだけのデータが取得されたか)を確認するには、次のコマンドを使用します:

watch -n 1 tail /sys/block/bcache0/bcache/stats_total/*

専門家による実践的なアドバイス

家庭用NASやストレージサーバーで長年bcacheを運用してきた経験から、覚えておくべき3つのポイントを挙げます:

  1. エンタープライズ向けSSDの選択: writeback モードを使用する場合、SSDへの書き込みが頻繁に行われます。早期故障を避けるため、Samsung ProシリーズやIntel Optaneなど、TBW(総書き込み容量)の高いモデルを優先してください。
  2. SSDの取り外し手順: 動作中に絶対にSSDを抜かないでください。まずモードを writethrough に変更し、dirty_data が0になるのを待ってから、システムからSSDを切り離す必要があります。
  3. 常にバックアップを: bcacheは2つの物理デバイスを1つの論理デバイスに統合します。ハードウェア故障のリスクは2倍になります。重要なデータは必ずクラウドや外付けドライブにバックアップしてください。

bcacheは、古いマシンの再生や、大容量ストレージサーバーのコスト最適化に最適なソリューションです。財布を痛めることなく、スムーズな操作感を手に入れることができます。

Share: