当我在 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 将启动,但会重建其库,库将为空。我可以重新导入 shotwell 创建的文件夹,但我几乎丢失了所有元数据(最重要的是“文件夹”或事件及其主图片)
有办法修复/重建/恢复吗photo.db
?我怎么才能看到里面的东西?损坏程度如何?
或者还有其他方法可以恢复我的事件和导入吗?
答案1
由于内核崩溃和断电,Shotwell 的数据库可能会损坏。
使用 Shotwell 0.10 或更高版本时,每次程序退出时都会自动备份数据库;在最坏的情况下,您将丢失自启动该程序以来的所有工作。
不幸的是,Shotwell 的旧版本没有此功能,并且您不太可能从损坏的数据库中恢复。
答案2
您可以在“主页”中的 .shotwell 文件夹中找到备份数据库。其中会有一个 photo.db.bak。
只需将其重命名为 photo.db 并删除损坏的旧“photo.db”,您就可以再次正常使用。
答案3
您可以使用以下命令检查数据库的完整性:
$ 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
备份原始数据库,然后将新数据库移到位并查看进展情况。