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