背景
最近Proxmoxを導入して、快適な自宅鯖生活を送っていました。コンテナでいろんなサービス動かしたり、VMにPortainer入れてみたり…
そうしていろいろ遊んでたんですが、ブレーカーを落としまくってたせいかストレージのファイルを参照できない不具合が時々発生したりしてました。
それでも対応が面倒くさくて放置してたらとうとうコンテナが起動しなくなりました。
最初はfsckでちゃちゃっと直せば終わると思ってたんですが、そうもいかなかったので対処法を備忘録としてまとめておきます。
手順
通常であれば/dev/pve/vm-100-disk-0のような形でCTイメージがあるので、それをmountできればそのままcpやらrsyncでコピーできるかと思います。
それかpct mount 100することで/var/lib/lxc/100/rootfsにrootfsが配置されるので、そこからコピーしてもいいかもしれません。
僕の場合ext4のHDDをvirtioでマウントしており、その上にCTイメージを配置していたので/mnt/pve/hdd1/images/100/vm-100-disk-0.rawのような形で生のext4イメージがあるような形になっていました。
これをlosetup /mnt/loop0 vm-100-disk-0.rawすることでループバックデバイスとして使用できるようにしました。
ただファイルシステムが破損していたのか、マウントしようとしてもsuperblockがどうたらこうたらでマウントできなくなっていました。
そういうわけでtestdiskをインストールしてファイルの救出にあたりました。
apt install testdiskでインストールし、testdiskと実行したあと[Create]を選択するとブロックデバイスの一覧が表示されます。

ここで当該のディスクを選択し、[Proceed]->[none]->[List]でディレクトリが表示されます。
このあとはお目当てのファイルを選択し、コピーすれば救出完了です。