paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

ubuntuのLXD環境の復旧のまとめ

今週頭に謎のアップデートで壊れてしまったLXD環境を復旧します。
復旧というかほとんど作り直しですが。

コンテナのsnapshotのパス

LXDをsnap版に入れ替えるときにパッケージがsnapshotを取っているメッセージが出ていました。 もしかしたらデータ残っているかもと思いサルベージしました。

  • snapshotのパス

/var/lib/snapd/snapshots/に一式固まっていました。

masashi@PC-ubuntu:~$ sudo ls -l /var/lib/snapd/snapshots/4_lxd_4.0.5_19188.zip
-rw------- 1 root root 8319636416  23 00:29 /var/lib/snapd/snapshots/4_lxd_4.0.5_19188.zip
masashi@PC-ubuntu:~/lxd_snapshots$ sudo zipinfo /var/lib/snapd/snapshots/4_lxd_4.0.5_19188.zip
Archive:  /var/lib/snapd/snapshots/4_lxd_4.0.5_19188.zip
Zip file size: 8319636416 bytes, number of entries: 5
-rw----     2.0 fat 8319630787 bX stor 80-000-00 00:00 archive.tgz
-rw----     2.0 fat      332 bX stor 80-000-00 00:00 user/root.tgz
-rw----     2.0 fat     3983 bX stor 80-000-00 00:00 user/masashi.tgz
-rw----     2.0 fat      585 bX defN 80-000-00 00:00 meta.json
-rw----     2.0 fat       97 bX defN 80-000-00 00:00 meta.sha3_384
5 files, 8319635784 bytes uncompressed, 8319635586 bytes compressed:  0.0%

archive.tgzの中にコンテナのパスが残っていました。
ディレクトリの下はrootfsがあってルートディレクトリになっています。

masashi@PC-ubuntu:~/lxd_snapshots$ sudo ls common/lxd/storage-pools/default/containers
cent7-wp  debian  firefly  lxdMosaic  transmission  ubuntu-pr  ubuntu16

コンテナの整理

復旧するコンテナの整理をします。
一度テスト的に作って使っていないものは作り直しません。

  • cent7-wp
    • ローカルWordpress 使わなかったので捨て
  • debian
    • 使う
  • firefly
    • 使う
  • lxdMosaic
    • コンテナWeb管理 使わなかったので捨て
  • transmission
    • Transmissionサーバ 使わなかったので捨て
  • ubuntu-pr
    • コンテナ練習用サーバ 使わない
  • ubuntu16

というわけでdebian、firefly、ubuntu16のコンテナ再作成とデータ復旧を行います。
インスタンス作成やパッケージインストールは割愛します。

debian

rogueプレイ用なので実は復旧する様なデータなしです。

スコアのデータがどこにあるかわからないので作り直して完了。
rogueのスコアは遊び直して伸ばします。

firefly

これは実は復旧できませんでした。
DBのディレクトリをサルベージできたので、mysqlのフォルダ(/ver/lib/mysql)配下に突っ込んでみましたが、オン中にlxdの構成変更されてしまったのでテーブルにロックかかってしまったみたいです。

root@firefly:~/mysql# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 51
Server version: 10.3.25-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| fireflyiii         |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

ちゃんとdatabaseは見えてるのですが、

root@firefly:~# mysqldump -u root -p --databases fireflyiii > fireflydb
Enter password: 
mysqldump: Got error: 1932: "Table 'fireflyiii.2fa_tokens' doesn't exist in engine" when using LOCK TABLES

mysqldumpもダメで、

MariaDB [fireflyiii]> check table accounts;
+---------------------+-------+----------+-----------------------------------------------------+
| Table               | Op    | Msg_type | Msg_text                                            |
+---------------------+-------+----------+-----------------------------------------------------+
| fireflyiii.accounts | check | Error    | Table 'fireflyiii.accounts' doesn't exist in engine |
| fireflyiii.accounts | check | status   | Operation failed                                    |
+---------------------+-------+----------+-----------------------------------------------------+
2 rows in set (0.000 sec)

MariaDB [fireflyiii]> 
MariaDB [fireflyiii]> select * from accounts;
ERROR 1932 (42S02): Table 'fireflyiii.accounts' doesn't exist in engine

色々テーブルをcheckしたのですが、スキーマが無いと言われてしまいました。

DBの復旧は明るくないため諦めました。
勉強代と思ってバックアップを定期的にやるようにします。

まあマネーフローを確認する目的で入れていて、How toは大体つかめたのでまた今月からやり直します。

Dokuwiki

これも新規コンテナでパッケージも新しいもので作り直しました。
php7.0 -> 7.4になりました。

Dokuwikiのデータファイルはディレクトリ丸ごとコピーすればOKなのでサルベージしたディレクトリをコピーして完了です。

root@dokuwiki:~# cp -pr dokuwikidir/data /var/lib/dokuwiki/

これだけで復旧完了です。
また、Markdownプラグインのmarkdowkuを入れていたのですが、これもバージョンアップされていてバグがあるらしく動きませんでした。

2021/02/06 03:33:26 [error] 19371#19371: *17 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Class 'Doku_Handler_Quote' not found in /var/lib/dokuwiki/lib/plugins/markdowku/syntax/blockquotes.php:95

https://chiilabo.com/2020/08/fatal-error-class-doku_ha/

これはレイアウトだけの問題なので他の入れるなり対策します。

f:id:paloma69:20210206192724p:plain

一応データ復旧しました。

まとめ

使っているコンテナのみの復旧作業を試みました。
作り直してデータをインポートすることを想定していましたが、救えたのはDokuwikiだけでした。
勝率33%ですね。

家だけで使うツールだからと言ってデータ消失は悲しいもので、バックアップの重要性を思い知らされました。
システムはどうにでもなるので、やはりデータを重点的にバックアップしておかないとですね。