Proxmox クラスタを管理する config.db は、通常 /etc/pve/ にマウントされる pmxcfs (Proxmox Cluster File System) に格納されています。しかし、
- クラスタが起動していないと
/etc/pve/がマウントされない -
config.dbは SQLite 形式なので、普通のcatなどで中身を確認できない
といった理由で、手軽に中身を見ることができません。
そこで、config.db のデータ構造を調査し、最終的にこのデータを元にファイルシステムを復元するスクリプトを作成してみました。
config.db の中身を確認する
まず、手元の config.db を sqlite3 で開いて中身を確認します。
sqlite3 config.db ".tables"
すると tree というテーブルがあることがわかります。
sqlite3 config.db "SELECT * FROM tree LIMIT 5;"
出力結果を見ると、各ファイルやディレクトリが inode, parent, type, name, data という形で管理されています。
| inode | parent | type | name | data |
|---|---|---|---|---|
| 0 | 0 | 8 | version | (NULL) |
| 2 | 0 | 8 | datacenter.cfg | (バイナリ) |
| 8 | 0 | 4 | virtual-guest | (NULL) |
-
type=4はディレクトリ -
type=8はファイル -
parentによって親ディレクトリが管理されています
つまり、
-
type=4のエントリを辿ってディレクトリを作成する -
type=8のエントリを辿ってファイルを作成し、dataの内容を書き込む
という処理をすれば、Proxmox の config.db からファイルシステムを復元できるはずです。
スクリプトの作成
この構造を元に、config.db のデータをファイルシステムに展開するスクリプト proxmox_config_to_fs.py を作成しました。
python3 proxmox_config_to_fs.py config.db -o ./reconstructed_fs --verbose --debug
このスクリプトでは、
-
--debugを指定すると SQLite のレコードを表示します。 -
--verboseを指定すると作成されたディレクトリ・ファイルの情報を表示します。
これにより、復元処理の詳細を確認できるようになっています。
まとめ
Proxmox の config.db は SQLite 形式のデータベースであり、ツリー構造でファイルシステムを管理しています。クラスタが起動していないと /etc/pve/ がマウントされず確認できませんが、このスクリプトを使えば手軽に内容を復元できます。
作成したスクリプトは GitHub に公開しているので、興味があればぜひ試してみてください。
GitHub リポジトリ: https://github.com/flathill/Proxmox/blob/main/proxmox_config_to_fs.py