はじめに
HAMMER2は,DragonFlyBSDの標準ファイルシステムです.2008年に登場したHAMMERの後継として開発されました.
単に高速化を目指したファイルシステムではなく,データの整合性や管理のしやすさを重視して設計されています.また,PFSと呼ばれる独特な仕組みを備えていることも特徴です.
ZFSにも似た機能は存在しますが,HAMMER2はDragonFlyBSDの設計思想に合わせて,よりシンプルな実装を目指して開発されました.
今回は,そんなHAMMER2の仕組みについて調べてみました.
DragonFly BSDのHAMMER2とは?
HAMMERからHAMMER2へ
HAMMERはもともとクラスタリングの基盤として設計されており,
- snapshots(スナップショット)
- instant crash recovery(高速クラッシュ復旧)
- near real-time mirroring(ほぼリアルタイムミラーリング)
これら多くの先進的な機能を備えていましたが,実装が複雑になっていたこともあり,よりシンプルで保守しやすい設計を目指して開発されたのがHAMMER2です.
また,HAMMER2はSSDや大容量ストレージが一般的になった時代を前提として設計されており,高い信頼性と柔軟な管理機能を両立することを目標としていました.
Copy-on-Write
HAMMER2では,Copy-on-Write(CoW)という方式が採用されています.(CoWそのものは珍しい技術ではありませんが)
多くの従来型ファイルシステムでは,上書きを基本とします.しかしHAMMER2では,変更が必要になったときに元のデータを書き換えるのではなく,新しい場所に変更後のデータを書き込み,最後に参照先を切り替えます.
変更前
A → B → C
変更後
A → B → C' (Cは別の場所にいる)
↑
新しく書き込む
そのため,書き込み途中で電源が切れても,中途半端な状態になることを防ぎやすいです.また,元のデータが残るという性質から,スナップショットや履歴管理などの機能も実現しやすくなっています.
チェックサム
HAMMER2では,各データにチェックサムと呼ばれる値が付加されています.
データを読み込む際には,保存されているチェックサムと実際のデータから計算した値を比較することで,データの破損を検出できます.
データ
↓
チェックサム計算
↓
保存
読み込み時
データ
↓
再計算
↓
一致?
これにより,ディスクの故障やメモリエラーなどによって発生する,気付かないうちにデータが壊れる現象を検出できます.このように,HAMMER2は単に高速なファイルシステムではなく,データを壊さないことを重視した設計になっています.
CoWやチェックサムそのものには自己修復機能はありません.
様々組み合わせることが重要です.
CoW → 中途半端な書き込みを防ぐ
チェックサム → 壊れたことを検出する
RAID・レプリケーション → 正常なコピーから修復する
スナップショット → 過去の状態に戻れる
PFSとは?
PFS(Pseudo File System)は,HAMMER2独自の仕組みであり,1つのファイルシステムの中に複数の独立した領域を作ることができます.
HAMMER2
│
├─ home
├─ backup
├─ data
└─ test
のように,1つのHAMMER2ボリュームの中に複数のファイルシステムが存在するみたいな構造です.フツーは 1ボリューム=1ファイルシステム なので,これが大分特殊なことが分かります.
なぜPFSがあるのか?
- 一部だけバックアップしたい
- 別のマシンへ一部だけ複製したい
- 用途ごとに分けて管理したい
これらの目的があった場合は,パーティションを分割したり,別のディスクを用意して新たなファイルシステムを作成したりする必要がありました.しかし,パーティションの容量をあとから変更するのは簡単ではなく,管理も煩雑になりがちです.
そこでHAMMER2では,1つのファイルシステムの中に複数のPFSを作れるようになっています.PFSごとに独立して,レプリケーションやマウントなどを行うことが出来るため,柔軟な管理が可能になります.
ファイルシステムを分けたいとき
① パーティションを分割する
② 別のディスクを用意してマウントする
ですが,第3の選択肢
③ PFSを作る
というのがあるわけです(これが簡単シンプル!)
レプリケーション
HAMMER2におけるレプリケーションは,PFS単位でデータを他の場所へ複製する仕組みです.単なるファイルコピーではなく,スナップショットと組み合わせることで一貫性のある状態を転送できます.
スナップショット
スナップショットは,ある時点のファイルシステムの状態を保存する機能です.
通常のファイルは更新されると上書きされますが,HAMMER2はCopy-on-Writeなので,新しいデータを書き込む際に古いデータを残すことができます.この性質を利用して,ある瞬間の状態をそのまま記録できます.
Gitでいうブランチみたいな?
ミラーリング
ミラーリングは,データを複数の場所に同期/非同期で複製を保持する仕組みです.
スナップショットが「時間方向の保存」だとすると,ミラーリングは「空間方向の複製」です.
PFS
├─ ノードA(本体)
└─ ノードB(複製)
片方に障害が発生しても,もう片方から同じデータを利用できます.
HAMMER2ではPFSという単位でデータを分割できるため,
- 一部だけバックアップする
- 一部だけ別マシンへ複製する
- 用途ごとに管理する
といった運用と相性が良くなっています.
ただし,HAMMERに存在したような完成されたミラーリング機能はHAMMER2では提供されておらず,実際のバックアップや複製には rsync や cpdup などの外部ツールと組み合わせて運用することが一般的です.
| 用語 | 意味 | イメージ |
|---|---|---|
| スナップショット | ある時点の状態を保存する | 📷 写真を撮る |
| ミラーリング | 別の場所に同じ内容を保持する | 🪞 鏡 |
| レプリケーション | データを別の場所へ複製&同期する 「仕組み」 | 🚚 配送 |
| バックアップ | 障害に備えて別に保存すること | 📦 保管庫 |
SSD時代を意識した設計
HAMMER2は開発当時からSSDの普及を意識して設計されました.
HDD時代はディスクの物理的な回転とシーク時間がボトルネックになるため,それらを減らすことが重要でしたが,SSDではランダムアクセス性能が高く,異なる設計が求められます.
HAMMER2はCopy-on-Writeを前提とした構造を採用しており,整合性や信頼性を保ちながら効率的な運用を行えるようになっています.
まとめ
HAMMER2は,DragonflyBSDの標準ファイルシステムとして開発された,整合性や安定性を重視したファイルシステムです.
Copy-on-Writeやチェックサムによってデータの安全性を高めるだけでなく,
- PFSによる柔軟な管理
- スナップショットによる履歴保持
など,データを長期的に運用するための様々な機能を備えています.
高速さよりは,データを安全かつ柔軟に管理するための基盤として設計されているのが特徴といえるでしょう.
次回,HAMMER2使ってみた
そんなHAMMER2を実際に体験したいと思います.
PFSの作成やスナップショットは特に実際に試しながら,特徴を見ていこうと思います.