リストアする必要に迫られた経緯
普段、仕事で使用している「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の接続時にパスフレーズを入力します。
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」を選択します。(バックアップ取得時に設定していた値を選択する)
定期実行については今回のタイミングでは特に設定しない状態としておきます。
ホームディレクトリをバックアップ対象とするかを必要に応じて設定します。
Timeshiftでリストアを実行
スナップショット(バックアップファイル)の一覧からリストア対象を選択します。
リストア先のパスに合わせて、どのデバイスのデータを元にするかを選択します。
/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
※/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が書き換わるようです。
「ブートローダーオプション」の画面を閉じて、「次へ」をクリックしてしばらくすると新規作成や復元対象のファイルの解析が行われます。
ファイルの解析が終わるとリストアされるファイルの一覧が表示されるので、問題ないことを確認します。
リストアされるファイルの一覧を確認して「次へ」をクリックするとリストアが開始されます。
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のログイン画面が表示されるのでログインを行う。
各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の設定が求められます。
Secure Boot用のパスワードを16文字以内で入力します。
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」を選択します。
「Please unlock disk」画面の表示
「Perform MOK management」の設定後にinitramfsの画面ではなく「Please unlock disk nvme0n1p3」と表示されれば全ての設定が完了です。
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に詳しくなった。
- 無事に音が出るようになった。めでたし、めでたし。