ubuntu で ecryptfs で暗号化したディレクトリを リカバリ / recover する方法


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 が存在します。

詳しくは、以下。

eCryptfs
https://wiki.archlinux.jp/index.php/ECryptfs

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/