当Nextcloud正在扫描文件时异常断电,由于扫描未完成,此时预览图与mysql中记录的很可能出现不匹配的情况。
具体表现为:文件名为ABC.png 但实际显示的为 def.png 的缩略图及大图;
1. 首先停止Nginx/Apache服务
2. 删除 nextcloud/data/appdata_oc3is4osud7x/preview 下的所有预览图, 此时应该能正确显示了。如果无法显示,继续下一步
3. 如果用了redis,需要先执行 redis-cli flushall 命令,把缓存的内容都刷到数据库。
oc_file_locks # 当NC处理文件时锁定文件的表
oc_filecache # 缓存文件表
oc_filecache_extended # 文件后缀缓存表
oc_files_trash # 回收站
注:清空oc_file_locks表、以及redis的flushall,都是为了避免扫描文件时出现被锁住的情况,如下。
Exception during scan: "files/8e0254253d757ad2a65c895909bc6cd0" is locked
4. 清理缓存
Nextcloud 清理文件缓存命令如下:
rt@rangotec.com$ sudo -u www-data php /home/nextcloud/occ files:cleanup -vvv --all
5. 重建缓存
清理完成缓存后,重新扫描文件,此时数据库表里的数据就会重建,命令如下:
rt@rangotec.com$ sudo -u www-data php /home/nextcloud/occ files:scan -vvv --all
更多Nextcloud occ 命令的使用方法,请参见官网手册。
Using the occ Command — Nextcloud 12 Server Administration Manual 12 documentation
如大量(几万图片)文件时,如果直接拖拽到网站上,就会导致卡死等情况。
此时可以把这些文件通过硬盘、FTP等上传到指定用户的某个目录下,然后运行occ scan命令重建该目录,命令如下:
rt@rangotec.com$ sudo -u www-data php occ files:scan --path="/user_id/files/path"