mamoe / mirai

高效率 QQ 机器人支持库
https://mirai.mamoe.net
GNU Affero General Public License v3.0
14.43k stars 2.54k forks source link

硬盘满载可能会导致autologin的配置丢失 #2693

Closed rabbit-dayi closed 1 year ago

rabbit-dayi commented 1 year ago

问题描述

硬盘满载可能会导致autologin的配置丢失 0字节可用 强制重启电脑 可能会导致autologin配置丢失、也小概率可能会导致其他的插件配置丢失

复现

硬盘满载可能会导致autologin的配置丢失 0字节可用 强制重启电脑

可能会导致autologin配置丢失、也小概率可能会导致其他的插件配置丢失

mirai-core 版本

2.14.0

bot-protocol

ANDROID_PHONE

其他组件版本

Running MiraiConsole v2.14.0, built on 2023-02-06 14:25:21. Frontend Terminal: version 2.14.0, provided by Mamoe Technologies

Permission Service: Built In Permission Service

Plugins: rss-helper v1.4.0, MiraiWiki v2.0.2, SuperCourseTimetable(crashed_enable_error) v0.4.7, MiderBot v0.1.8, 抽老婆 v0.1.0, Control v0.3.0, fix-protocol-version v1.5.0, Setu v3.6.3, MaimaiBot v1.3.0, IlliteracyAuth v1.0.2, Loafers' Calender v1.8.1, NetworkTools v1.1.2, Chat Command v0.5.0, 点歌插件 v1.2.0, mirai-administrator v1.3.1, ApexLookUp v1.6.1, PetPet v5.3, Random Animals v1.0.1, mirai-api-http v2.9.1, Better help v1.0.1, OneBot v0.3.4, mirai-console-minecraft-motd v0.1.2, MCL Addon v2.1.1

Object Pending Finalization Count: 0 committed | init | used | max Heap Memory: 1.11GB | 188.0MB | 613.77MB | 2.91GB Non-Heap Memory: 145.25MB | 7.31MB | 141.75MB | -1

系统日志

22:51:54 [INFO] iTX Technologies Mirai Console Loader version 2.1.2-61c8bd8
  22:51:54 [INFO] Runtime: OpenJDK 64-Bit Server VM 17.0.6 (arch: 64)
  22:51:54 [INFO] https://github.com/iTXTech/mirai-console-loader
  22:51:54 [INFO] This program is licensed under GNU AGPL v3
  22:51:56 [INFO] Mirai Console Loader Announcement:
Mirai Console Loader 公告栏

如果在图片上传的时候遇到问题请与我们联系 (需要提供图片文件源本)
`- 如 Unsupported image type for ExternalResource *
`  considering use gif/png/bmp/jpg format.
`- Tracker: https://github.com/mamoe/mirai/issues/new/choose

常用资源整合
`- https://mirai.mamoe.net/topic/653

MCL 已推出 2.1.0,更好的支持 Mirai 2.11 的插件系统,建议更新。

  22:51:56 [INFO] Verifying "net.mamoe:mirai-console" v2.14.0
  22:51:59 [INFO] Verifying "net.mamoe:mirai-console-terminal" v2.14.0
  22:52:00 [INFO] Verifying "net.mamoe:mirai-core-all" v2.14.0
  22:52:01 [INFO] Verifying "org.itxtech:mcl-addon" v2.1.1
2023-06-13 22:52:03 I/main: Starting mirai-console...
2023-06-13 22:52:03 I/main:

网络日志

No response

补充信息

蟹蟹,不知道是不是应该反馈,如果不适合反馈,请直接close

MrXiaoM commented 1 year ago

老问题,不正常关闭 mirai 时,配置文件有概率会因为自动保存机制“变成乱码”

xszqxszq commented 1 year ago

+1,另外 AutoSavePluginConfig 和 AutoSavePluginData 也会因为在特定阶段重启(例如启动阶段)丢失原来的信息

sandtechnology commented 1 year ago

看起来是需要加一个很简单的机制 即先写入文件名.tmp 再重命名然后删除文件

zhaodice commented 1 year ago

看起来是需要加一个很简单的机制 即先写入文件名.tmp 再重命名然后删除文件

你怎么知道你写入的tmp文件不会变成乱码呢~ 我的想法是,先写入 文件名.update 下次读取的时候 如果 “文件名.update” 校验通过,则修改文件名转正,否则以原来的文件名为准

哦,不过如果你确保.tmp写完后才会执行删除重命名,而不是之后,那确实没有问题,就怕外部因素的不可抗力,比如磁盘满,你只能写一半,你无法检测自己是否只写了一半,那就麻烦了

qfys521 commented 1 year ago

为什么这么极端呢?这不应该是mirai使用者考虑的问题吗,非得要硬盘到0字节可用出,mirai问题时候再清理吗( 在正常情况下,合理且规范的使用mirai基本上不会出问题。

zhaodice commented 1 year ago

为什么这么极端呢?这不应该是mirai使用者考虑的问题吗,非得要硬盘到0字节可用出,mirai问题时候再清理吗( 在正常情况下,合理且规范的使用mirai基本上不会出问题。

我记得有的bot框架,喜欢缓存图片还不清理,非得弄个脚本伺候着,要不然分分钟占满硬盘不是问题,如果服务器挂着其他bot框架。这种是很有可能的

sandtechnology commented 1 year ago

看起来是需要加一个很简单的机制 即先写入文件名.tmp 再重命名然后删除文件

你怎么知道你写入的tmp文件不会变成乱码呢~ 我的想法是,先写入 文件名.update 下次读取的时候 如果 “文件名.update” 校验通过,则修改文件名转正,否则以原来的文件名为准

哦,不过如果你确保.tmp写完后才会执行删除重命名,而不是之后,那确实没有问题,就怕外部因素的不可抗力,比如磁盘满,你只能写一半,你无法检测自己是否只写了一半,那就麻烦了

有没有可能这会报异常呢( 总之我说的机制是有效的 实现起来也很简单 就几行代码 等有缘人PR吧

xszqxszq commented 1 year ago

为什么这么极端呢?这不应该是mirai使用者考虑的问题吗,非得要硬盘到0字节可用出,mirai问题时候再清理吗( 在正常情况下,合理且规范的使用mirai基本上不会出问题。

合理规范的使用下,也丢过配置,确认过硬盘没有满。应该是老bug了,但是之前因为无法复现就没提issue

Him188 commented 1 year ago

AutoSave 确实有人报告过会丢失数据, 但这个是另外的问题