nextcloud数据丢失!
做一次标题党哈哈
!!!!!!!!!!!
后续在review的时候 发现其实不是nextcloud的错,而是因为两台主机的区域设置不一样,导致默认字符编码集不一致造成的乱码。
!!!!!!!!!!!
起因
nextcloud最近一段时间大版本更新 于是乎就升级了
因为最近在忙别的事情 文章什么的都没有图片 所以也就没上传
直到昨天。。。。
并且部分文件无法下载
着手解决
看了一下日志并没有发现有什么报错
在概览页的安全及设置警告
倒是有发现丢失了索引
修复索引
先来修复索引
sudo -u www-data php occ db:add-missing-indices
DBALException: Failed to connect to the database: An exception occured in driver: could not find driver in /var/www/nextcloud/lib/private/DB/Connection.php:64
报错???
在一顿搜索之后 发现了一个issue有描述了这个问题
跟我的情况是差不多的
我最开始的时候用的是debian官方的php7.0
奈何有个服务需要php7.2 于是升级到了7.2
后来更新升级到了php7.3
但是这次升级7.3并不是带着其他模块一起升级到了7.3
在debian下查看已安装的软件包
apt list --installed
过滤一下只看php的apt list --installed | grep php
果然看到了 php7.2的模块和7.3的核心模块
解决很简单 只需要把7.2的模块更新到7.3就可以了
然后在回去修复索引
即可看到修复完成
但是还是不能上传文件
继续找原因
nextcloud的文件是以原始方式保存的
位置就在 nextcloud/data/${your user}/files
进去一看 瞬间就知道是怎么回事了
存储的文件中文是乱码的!
所以就可以解释了为什么不能上传和下载某些文件了
linux中如何解决文件乱码的问题呢
已经保存的乱码是无法再还原的 我想要把他变回正常的文件名
只能通过重命名来解决mv filename newfilename
但是原始的文件名是无法选中了的
这个时候就要用到inode了
本文不对inode做展开讲解
查看乱码的文件inode numls -il
有了inode num ,文件大小,创建日期,我们可以对比nextcloud上的信息分辨哪个是哪个
知道了原始文件名后 我们就可以修复乱码了
find . -inum file_inode -exec mv {} new_file_name \;
example: find . -inum 1712191 -exec mv {} 微信截图_1.jpg \;
当然 如果你想要删除它
find . -inum 1712191 -exec rm -rf {} \;
注意了 你修复的文件名需要和nextcloud上的信息保持一致 否则一定是找不到的
接下来就是一个一个修复就好了
OK 到这里就大功告成了
TIPS
一些想法
为什么会出现该问题?
很难说 因为我有过迁移主机 并且有过大版本升级
无法确定到底是nextcloud问题还是系统环境的问题
系统都是服务提供商的 可能会有点差别
这个问题难以解答
受损的文件太多怎么办?
需要准确的定位问题 是否跟系统的语言有关,nextcloud有没有做过大版本更新
只有定位了问题才能一次性完美修复 即使是写程序去修复我相信也要耗费不少时间
nextcloud是否可靠?
在这期间 我确实的怀疑过nextcloud的可靠性
再github上你能看到接近2000个 open issue
虽然如此 官方还是保持着活跃的release
nextcloud会变得越来越好
我更希望官方解决更多的稳定性问题
不会像是现在的win10一样 满身的bug 还要强制你更新