0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proxmox の `config.db` を解析してみました

Posted at

Proxmox クラスタを管理する config.db は、通常 /etc/pve/ にマウントされる pmxcfs (Proxmox Cluster File System) に格納されています。しかし、

  • クラスタが起動していないと /etc/pve/ がマウントされない
  • config.db は SQLite 形式なので、普通の cat などで中身を確認できない

といった理由で、手軽に中身を見ることができません。

そこで、config.db のデータ構造を調査し、最終的にこのデータを元にファイルシステムを復元するスクリプトを作成してみました。

config.db の中身を確認する

まず、手元の config.dbsqlite3 で開いて中身を確認します。

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 によって親ディレクトリが管理されています

つまり、

  1. type=4 のエントリを辿ってディレクトリを作成する
  2. 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?