TL;DR
ある日メインPCのOSとして運用していたubuntu 18.04 LTSがエラーを吐いて起動しなくなりました。
こんなこともあろうかと、事前に用意していたUSBから起動するubuntuからfsckかけるものの、大量の破損ファイルが検出され、全て削除すると、今度は起動すら不可に。
こうなれば、/home 配下のファイルだけでも救い出して、ubuntu再インストールすればよいかと思いきや、 /homeを ecryptfsで暗号化していたため、単純に mount しても取り出せず。
これは、どうにかこうにか苦労して /homeを復旧した記録です。
復旧手順
レスキュー用ubuntuを起動する
まずは、なんらかの方法でレスキュー用ubuntuを起動してください。
私はWindows10から以下の手順で ブータブルUSBドライブを作成しました。
Linux UbuntuのブータブルUSBドライブを作成する手順
https://itlogs.net/ubuntu-bootable-usb/
これで作成したusbドライブでubuntuを起動します。
ちなみに私は吹っ飛んだOSとバージョンを合わせて18.04のブータブルUSBを作成しました。
ecryptfs-utilsをインストールする
ectyptfsを復旧するためのツールをインストールします。
まずは、 software & updates アプリを起動して、チェックがついていないパッケージをenableにします。
これでectyptfs-utilsがインストール可能になりましたので、すかさずインストール。
apt install ecryptfs-utils
/homeが存在するファイルシステムをmountする
なにはともあれ、データが存在するデバイスをマウントします。
ファイルシステム名は頑張って調べてください。
最近主流であろうSSDなら以下のような名前のはずです。
/dev/nvme0p0 とかなんとか
sudo su -
mount /dev/[mountしたいファイルシステム名] /mnt
rootに 復旧用mount passphraseを設定する
突然ですが、ecryptfs は mount passphrase と login passpharse が存在します。
詳しくは、以下。
arch linuxさんには本当に感謝。
私みたいなライトなlinuxユーザーにはとても手は出せないですけれども。
まずは、mount passphraseを調べます。仮に対象のアカウントはhogeとします。
ecryptfs-unwrap-passphrase /mnt/home/.ecryptfs/hoge/.ecryptfs/wrapped-passphrase
ここで login passphraseを入力すると、mount passphraseが表示されるはずです。
すかさずメモります。
この mount passphraseをrootアカウントに設定します。
ecryptfs-add-passphrase --fnek
passphraseを求められるので、mount passphraseを入力します。
その他の質問には、以下。
Accept the default cipher and key size values (aes and 16).
Type n for plaintext passthrough.
Type y for filename encryption.
mount!
これで準備が整ったので、mountします。
ecryptfs-recover-private /mnt/home/.ecryptfs/hoge/.Private
/tmp/[ランダムな文字列のディレクトリ] に複合されたディレクトリがマウントされるので、存分にサルベージしてください。
ちなみに、私がサルベージしたかったファイルは消えていました。。。
元々は以下の手順で試していたのですが、どうしてもうまくいかず、試行錯誤した結果、上記手順を編み出しました。
ecryptfsなんて20.04LTSじゃ使わないだろうし、超ニッチなノウハウですが、誰かの手助けになれば。
How to Recover an Encrypted Home Directory on Ubuntu
https://www.howtogeek.com/116297/how-to-recover-an-encrypted-home-directory-on-ubuntu/