結論: 安易にrm -rfするな。
修正方法を発見したので共有します
- 間違って消したノードに紐づいていたlvmを見る
- VMディスク項目にディスクが存在していたら復旧可能
- LXCコンテナを作成
- proxmoxへsshし、
nano /etc/pve/nodes/h1-hpdesk/lxc/$CT_NUMBER.conf -
rootfsに割り当てられているlvmストレージ名を復活させたいストレージ名へ変更
これで治るはずです。
ちなみに、lvmに何も無かったら諦めて下さい。
以下戯言
目標
- クラスタ名
aをクラスタ名home-clusterへ変更 - ノード名
homelab-pveをクラスタ名h1-hpdesk1へ変更
経緯
名称を変更したかった
まず、私が管理していたクラスタはこのような形で管理されていました。
クラスタ(a)
|
|- ノード(homelab-pve)
|
|- LXC(CT100)
|- LXC(CT200)
|
|- VM(CT900)
見てわかる通りノード一つのみで管理されています。
ここに新たにノードを追加しようと考えていました。
しかし、クラスタ名aやノード名homelab-pveではどのノードがどの物理デバイスであるかの判別が困難である、と考えたため名称の変更を行おうと考えました。
1つ目の失敗:クラスタ名の変更は成功した
クラスタ名の変更はとても簡単でした。
corosync.confファイルを開き、nvimやnano等でcluster_nameを変更するだけです。
nvim /etc/pve/corosync.conf
# /etc/pve/corosync.conf
# 引用: https://pve.proxmox.com/wiki/Cluster_Manager#pvecm_redundancy
totem {
cluster_name: testcluster # <- この部分の名称を変更
config_version: 3
ip_version: ipv4-6
secauth: on
version: 2
interface {
linknumber: 0
}
}
あれ...?意外と簡単でしたね...
しかし、私は調子に乗ってしまいました。
2つ目の失敗: バックアップしていない
はい、恐らくプロのサーバーエンジニアの方からしてみれば、
「あれ..?キミバックアップの操作はどうした...?」
と、操作に違和感があったでしょう。
その違和感の通りで、私はバックアップを怠っていました。
本来であれば、編集ツールで編集する前に必ずcpコマンド等を用いてバックアップを行うべきでした。
cp /etc/pve/corosync.conf /etc/pve/corosync.conf.backup
この操作を行っていれば仮に検索結果の情報が間違っていても、バックアップから復元したらノーダメージというわけです。
しかし、私は当然のことながらバックアップなど行っていないため、無事に爆発しました。
3つ目の失敗: 自動バックアップの設定忘れ
プロ(ryの方からしてみれば
「まぁまぁ、焦らなくてもPVE側のバックアップがあるんだからリストアしたらいいんだよ。」
と思うことでしょう。
しかし、バックアップしていないのである!!!
4つ目の失敗: ロクに調べずにノードをリネームしようとした
2つ目の失敗の部分から、私はpveのコンフィグファイルが/etc/pve配下にすべて集約されていることを把握してしまいました。
つまり、「ノードの名称設定も何もかもここでできるんじゃないか?」
と、あまりにも短絡的かつ楽観的な思考の下操作を行いました。
ここから下の操作を実行しても私は責任を取りません。
ノードの情報は/etc/pve/nodes配下に存在しています。
ですから当然、/etc/pve/nodes/homelab-pveディレクトリも存在しているわけですね。
そのため、無知蒙昧な私は以下の操作を実行することで、リネームが解決すると思いました。
mv /etc/pve/nodes/homelab-pve /etc/pve/nodes/h1-hpdesk
これでnodeの内容物が移動されると思ったのですが...
mv: cannot move `core' to `/etc/pve/nodes/h1-hpdesk': Directory not empty
と、謎のエラーが発生しました。
このため、「cpコマンドにてノードを複製し、その後にhomelab-pveノードを消去(???)することで問題が解決する。」
という、謎の解法を導き出すことが出来ました。
5つ目の失敗: 安易なrm -rf
まず、ノードの複製を行い、実質的なリネーム操作を行おうとしました。
# -R フラグを用いることで再帰的(Recursive)に処理
cp -R /etc/pve/nodes/homelab-pve /etc/pve/nodes/h1-hpdesk
cpの操作は正常に完了した(コマンドラインには何のエラーもでなかった)為、特に何も考えていませんでした。
ここで、ノード内部の構成について簡易解説しておきます。
/etc/pve/nodes/NODE_DIR/lxc/CT100.conf
/etc/pve/nodes/NODE_DIR/lxc/CT200.conf
と、NODE_DIR/lxc配下に各コンテナのコンフィグがあるのですがcp先のlxc内部にコンフィグが存在しているか確認しませんでした。
つまり、「cpがエラーを吐かなかったから完全にディレクトリの再帰コピーが成功したのだろう」と、安易に考えてしまったわけです。
そして、件の禁断のコマンド、
rm -rf /etc/pve/nodes/homelab-pve
にてノードを消し飛ばし、無事サーバー破壊したということです。
反省
- 重大な操作を行う際のバックアップは手動/自動のどちらも取るべき
- きちんとファイルがコピーされているのかどうか、
lsコマンドなどを用いて確認するべき - 安易に
rm -rfするな
以上。
-
単にhomecluster内で1番目になる、HPのデスクトップという意味 ↩