nextcloud数据丢失!

nextcloud 数据丢失!

做一次标题党哈哈

起因

nextcloud 最近一段时间大版本更新 于是乎就升级了

因为最近在忙别的事情 文章什么的都没有图片 所以也就没上传

直到昨天。。。。

upload err

并且部分文件无法下载

着手解决

看了一下日志并没有发现有什么报错

在概览页的安全及设置警告倒是有发现丢失了索引

修复索引

先来修复索引

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 有描述了这个问题

https://github.com/nextcloud/server/issues/14942

跟我的情况是差不多的

我最开始的时候用的是 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 还要强制你更新

本文链接:https://blog.inmind.ltd/index.php/archives/35/
This blog is under a CC BY-NC-SA 3.0 Unported License