ShotwellでSDカードから写真をインポートしているときに、ラップトップがクラッシュしました(過熱によるシャットダウン)。これで、Shotwellを起動できなくなりました。
$ shotwell
**
ERROR:x86_64-linux-gnu/db/VersionTable.c:104:version_table_construct: assertion failed: (res == SQLITE_OK)
.db
ファイル~/.shotwell/data/photo.db
を別の場所に移動して、バックアップされていない場合、shotwellは起動しますが、ライブラリが再構築され、空になります。ショットウェルが作成したフォルダーを再インポートできますが、ほぼすべてのメタデータ(最も重要なのは「フォルダー」、またはイベント、およびそれらのメイン画像)を失います。
photo.db
を修復/再構築/復元する方法はありますか?中身を見るにはどうすればいいですか?どれだけ悪いの?
または、イベントとインポートを取り戻す別の方法はありますか?
Shotwellのデータベースは、カーネルパニックと電源喪失により破損する可能性があります。
Shotwell 0.10以降では、プログラムが終了するたびにデータベースが自動的にバックアップされます。最悪の場合、プログラムを開始してから作業を失うことになります。
残念ながら、Shotwellの古いバージョンにはこの機能がなく、破損したデータベースから回復できる可能性は低いです。
バックアップデータベースは、「home」の.shotwellフォルダーにあります。 photo.db.bakがあります。
名前をphoto.dbに変更し、破損した古い「photo.db」を削除するだけで、問題はなくなります。
次のコマンドを使用して、データベースの整合性を確認できます。
$ sqlite3 photo.db
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> pragma integrity_check;
ok
エラーが報告された場合、データをダンプして新しいデータベースに復元することにより、内容を回復できる場合があります。
$ echo .dump | sqlite3 photo.db > photo_dump.sql
$ sqlite3 new_photo.db < photo_dump.sql
元のデータベースをバックアップしてから、新しいデータベースを所定の場所に移動し、状況を確認します。