磁盘系统坏了,是因为使用了HFS+ FOR WINDOWS 在macos和windows两边进行读写修改之类的,结果悲剧了,整个 HFS+的分区都变了成可读,也无法使用“急救”来修复。
挂之前的现象的是写大文件会给截断,如8G的文件,copy过去,结果就变成了2G, 太坑了。。。
好在还能读,赶紧把最重要的图片放到另一个硬盘上。
放完之后,打开“照片”应用,提交原文件不可用,无法打开云云,于是尝试使用sqite3修复一下.
1. 先把照片应用都退出
ps axe | grep -i photo | xargs kill -9
2. 备份db
#先备份
cp -r /Volumes/evo/myphotos.photoslibrary/database /Volumes/evo/myphotos.photoslibrary/database.bak
3. 先修复ZGENERICASSET
#更新资源的路径
sqlite3 /Volumes/evo/myphotos.photoslibrary/database/Photos.sqlite "
update ZGENERICASSET set ZDIRECTORY=replace(ZDIRECTORY,\"/Volumes/st3t/pictures/\", \"/Volumes/nas2/pictures/\");"
4. 修复ZFILESYSTEMBOOKMARK, 这个主要内容是放在blob的字段里的ZBOOKMARKDATA, 这个比较麻烦,要先.dump出来用sed改一下,再导入db中。
#先导出来:
$ sqlite3 /Volumes/evo/myphotos.photoslibrary/database/Photos.sqlite ".dump" > bak.sql#计算要原目录的16进制字节码串
$ echo -n "st3t" | xxd -p | tr [:lower:] [:upper:]
73743374#计算目标目录的16进制字节码串$ echo -n "nas2" | xxd -p | tr [:lower:] [:upper:]
6E617332#替换
sed -i "s/73743374/6E617332/g" bak.sql#恢复db
sqlite3 temp.sqlite ".read bak.sql"#替换
mv temp.sqlite /Volumes/evo/myphotos.photoslibrary/database/Photos.sqlite
5. 删除临时文件, 不删除打开会报错。
rm Photos.sqlite-shm Photos.sqlite-wal Photos.sqlite.lock
6. 删除无用的volume 记录 。
sqlite3 /Volumes/evo/myphotos.photoslibrary/database/Photos.sqlite "delete from ZFILESYSTEMVOLUME"