LoginSignup
2
2

More than 1 year has passed since last update.

Ubuntu 20.04でTimeshiftを使ってLUKSによって暗号化されている環境をリストアしてみた

Last updated at Posted at 2022-08-29

リストアする必要に迫られた経緯

普段、仕事で使用している「Dell Latitude 3420」がある日突然PC本体からもイヤホンからも音が出ない状態になり(正確にはアプリによって音が出たり出なかったりという状態だったのでハードウェアの問題ではなさそうと判断)、Ubuntuでソフトウェア的な音声トラブルについてググってみると、音声関係の「alsa」、「pulseaudio」を再インストールすると復活したという情報を得たので、素直に「alsa」と「pulseaudio」をアンインストールしてインストールしたところ、依存関係の問題が発生して一部のパッケージがインストールできず。
依存関係で問題が出ていたパッケージ群をえーい!とアンインストールしてから「alsa」と「pulseaudio」をインストールするとなんとか入ったので胸を撫で下ろしたものの、PCを再起動するとUbuntuがいつまで経っても起動してこない状態に。
これはやってしまったということで、今回Timeshiftを使ったリストアにトライしてみました。


前準備

Timeshiftのバックアップ先は外付けのハードディスクにしていたので、まずはリストア先となるPC本体にUbuntuをクリーンインストールします。(※ディスクをLUKSで暗号化した状態でインストール)
今回はDellが提供している「Dell OS Recovery Tool」を使って再インストールを行いました。手順については以前まとめているので、こちらを参照してもらえるとよいかと思います。


Timeshiftをインストール

Ubuntuのインストールが完了したらTimeshiftをインストールします。

$ sudo apt update
$ sudo apt install -y timeshift

Timeshiftのバックアップデータが入っている外付けディスクを接続

バックアップ先の外付けディスクも暗号化しているのでUSBの接続時にパスフレーズを入力します。

スクリーンショット 2022-08-29 20.02.44.png


Timeshiftのリストア対象データの「/etc/crypttab」をリネームする

Timeshiftのリストア対象データに「/etc/crypttab」が含まれた状態でリストアを行うと「update-initramfs」が実行されるタイミングで以下のようなエラーメッセージが表示される場合があります。

initramfs を生成しています...
update-initramfs: Generating /boot/initrd.img-5.14.0-1045-oem
cryptsetup: ERROR: Couldn't resolve device
    UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

この問題を避けるために、外付けディスクに収録されているリストア対象の「/etc/crypttab」を「/etc/crypttab.orig」にリネームしておきます。

$ cd /media/PATH_TO/timeshift/snapshots/2022-08-01_14-14-33/localhost/
$ sudo mv etc/crypttab etc/crypttab.orig

Timeshiftを起動して初期設定

Timeshiftを起動するとセットアップウィザードが自動的に実行されるので設定していきます。

「スナップショットタイプ」は「RSYNC」を選択します。(バックアップ取得時に設定していた値を選択する)
Screenshot from 2022-08-29 11-59-42.png

「スナップショットの場所」は外付けディスクを選択します。
Screenshot from 2022-08-29 12-00-08.png

定期実行については今回のタイミングでは特に設定しない状態としておきます。
Screenshot from 2022-08-29 12-00-24.png

ホームディレクトリをバックアップ対象とするかを必要に応じて設定します。
Screenshot from 2022-08-29 12-00-44.png

「完了」をクリックしてセットアップウィザードを終了します。
Screenshot from 2022-08-29 12-00-53.png


Timeshiftでリストアを実行

スナップショット(バックアップファイル)の一覧からリストア対象を選択します。
Screenshot from 2022-08-29 12-01-18.png

リストア先のパスに合わせて、どのデバイスのデータを元にするかを選択します。
Screenshot from 2022-08-29 14-33-34.png

/boot/boot/efiがどのデバイスに対応するかを確認したい場合は以下のコマンドを実行します。

$ df |grep boot
/dev/nvme0n1p2               719936   213536    453936  32% /boot
/dev/nvme0n1p1               523248     5372    517876   2% /boot/efi

「ブートローダーオプション」ボタンをクリックして、必要に応じてチェックを付けます。
それぞのオプションは以下のコマンドに対応しているようです。

  • GRUB2の(再)インストール: grub2-install
  • initramfsを更新する: update-initramfs
  • GRUBメニューを更新する: update-grub

Screenshot from 2022-08-29 14-34-15.png

/boot/boot/efi のリストア元の選択状況によっては、バックアップを取得している時点と今回のクリーンインストールの時点では暗号化を行っているデバイス( /dev/nvme0n1p3 )のUUIDが変わっているため、「GRUBメニューを更新する」にチェックしておかないと以下のようなエラーが発生します。

error: Secure Boot forbids loading module from (hd0,gpt2)/grub/x86_64-efi/bfs.mod.
error: Secure Boot forbids loading module from (hd0,gpt2)/grub/x86_64-efi/afs.mod.
error: Secure Boot forbids loading module from (hd0,gpt2)/grub/x86_64-efi/affs.mod.
error: no such device: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.

update-grubを実行すると/boot/grub/grub.cfg内のUUIDが書き換わるようです。

「ブートローダーオプション」の画面を閉じて、「次へ」をクリックしてしばらくすると新規作成や復元対象のファイルの解析が行われます。
Screenshot from 2022-08-29 14-34-42.png
Screenshot from 2022-08-29 14-37-22.png

ファイルの解析が終わるとリストアされるファイルの一覧が表示されるので、問題ないことを確認します。
Screenshot from 2022-08-29 14-43-19.png

リストアされるファイルの一覧を確認して「次へ」をクリックするとリストアが開始されます。
Screenshot from 2022-08-29 14-44-07.png


initramfsの画面で暗号化されているデバイスをマッピング

リストアが完了すると自動的に再起動が行われ、/etc/crypttabが存在しない状態なのでinitramfsの画面が表示されます。

BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.4) built-in shell (ash) 
Enter 'help' for a list of built-in commands.

(initramfs)

cryptsetupコマンドでデバイスのマッピング処理を行います。
パスフレーズが求められるので、クリーンインストール時に設定しておいた暗号化のパスフレーズを入力します。

(initramfs) cryptsetup open /dev/nvme0n1p3 nvme0n1p3_crypt
WARNING: Locking directory /run/cryptsetup is missing!
Enter passphrase for /dev/nvme0n1p3:

パスフレーズの入力が終わったらexitでinitramfsの画面を抜けます。

(initramfs) exit

Ubuntuのログイン画面からログイン

通常のUbuntuのログイン画面が表示されるのでログインを行う。

スクリーンショット 2022-08-29 21.43.31.png


各UUIDを調整

事前にリネームしておいた /etc/crypttab.orig を元に戻します。

$ sudo mv /etc/crypttab.orig /etc/crypttab

blkidコマンドで各UUIDを確認する。

$ blkid
・
・
/dev/nvme0n1p1: UUID="E062-8D62" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="14fd5246-ffd8-4c91-9d8b-94af1c845d3f"
/dev/nvme0n1p2: UUID="68523f89-adf4-4c2f-8344-1f764aeb7f46" TYPE="ext4" PARTUUID="e03c86ef-6d3b-4e0d-9d5b-3f2e6971db13"
/dev/nvme0n1p3: UUID="de3c5036-fbbe-4a01-85e2-9bef206e5ee0" TYPE="crypto_LUKS" PARTUUID="45bcdc41-9b30-43fe-a738-5ff3b78d2670"

blkidコマンドで確認した「/dev/nvme0n1p3」のUUIDを「/etc/crypttab」に書き写します。

$ sudo vim /etc/crypttab
nvme0n1p3_crypt UUID=de3c5036-fbbe-4a01-85e2-9bef206e5ee0 none luks,discard

blkidコマンドで確認した「/dev/nvme0n1p1」、「/dev/nvme0n1p2」のUUIDを「/etc/fstab」に書き写します。

$ sudo vim /etc/fstab
・
・
/dev/mapper/vgubuntu-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/nvme0n1p2 during installation
UUID=68523f89-adf4-4c2f-8344-1f764aeb7f46 /boot           ext4    defaults        0       2
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=E062-8D62  /boot/efi       vfat    umask=0077      0       1
/dev/mapper/vgubuntu-swap_1 none            swap    sw              0       0

aptコマンドでパッケージの更新

aptコマンドでパッケージの更新を行います。

$ sudo apt update
$ sudo apt dist-upgrade

sudo apt dist-upgrade を実行すると、Secure Bootの設定が求められます。
Screenshot from 2022-08-29 15-17-47.png

Secure Boot用のパスワードを16文字以内で入力します。
Screenshot from 2022-08-29 15-18-20.png

パスワードの確認入力を行います。
Screenshot from 2022-08-29 15-19-17.png


initramfs、GRUBの更新

/etc/crypttab/etc/fstabを編集したので再度initramfs、GRUBを更新します。

$ sudo update-initramfs -uk all
$ sudo update-grub

再起動後に「Perform MOK management」の設定

Secure Bootの設定後、1回目の再起動のタイミングで「Perform MOK management」と表示されるので、メニューから「Continue boot」を選択します。
スクリーンショット 2022-08-29 21.55.21.png


「Please unlock disk」画面の表示

「Perform MOK management」の設定後にinitramfsの画面ではなく「Please unlock disk nvme0n1p3」と表示されれば全ての設定が完了です。
Screenshot from 2022-08-29 23-41-42.png


Timeshiftによるリストア後の問題点

Timeshiftによるリストア後に以下の問題が見つかったので個別に対応した。

  • snapでインストールしていた、1password、spotify、zoom-clientなどが起動しなくなった。
    • snap経由でインストールしたアプリケーションは日本語変換など何かと問題が多かったので、これを機にすべてapt経由でインストールするようにした。
    • 1passwordの起動時にsyslogに Aug 29 16:57:03 akase244-Latitude-3420 1password_1password.desktop[15048]: cannot perform operation: mount --rbind /dev /tmp/snap.rootfs_mZ3FF3//dev: No such file or directory のようなエラーが出力されていました。
  • Dockに「お気に入りに追加」で追加していたアプリケーションが消えて、Dockの表示がデフォルト状態に戻った。
  • Mozc(日本語変換)の設定がデフォルト状態に戻った。
  • Tweaksで設定していたキーバインドのカスタマイズがデフォルト状態に戻った。
  • 「端末」のウィンドウサイズやフォント指定がデフォルト状態に戻った。

まとめ

  • バックアップ超大事
  • バックアップを元にしたリストア検証大事。
  • 無駄にTimeshiftに詳しくなった。
  • 無事に音が出るようになった。めでたし、めでたし。
2
2
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
2
2