Event ID 137,报磁盘空间不足,但空间还有很多
如下图,C盘只读,报错很奇怪
Event ID 137 :卷 C: 上默认的事务资源管理器遇到不可重试的错误并且无法启动。该数据含有错误代码。
Explorer 报磁盘空间不足(disk full error,对应windows code一般是0xC000007F),但空间还有很多
通过chkdsk /f /r命令修复磁盘,并成功恢复业务。
问题原因分析:
=========
结合问题现象、日志分析、解决方案(chkdsk /f /r),怀疑遇到的问题是NTFS文件系统metadata的USN journal(Update Sequence Number Journal)达到参数上限导致的。
USN journal:当文件、目录和其他NTFS对象被添加、删除和修改时,NTFS会将记录输入USN变更日志,计算机上的每个NTFS卷都有这样的日志文件。每条记录都表明变化的类型和变化的对象。新的记录被附加到流的末端。
当我们对一个NTFS卷里的对象操作足够多,是有可能达到USN journal参数的上限,从而触发我们当前遇到的问题。这是NTFS文件系统的缺陷。不过我们可以通过手动方式重置USN journal解决问题,或者使用ReFS文件系统避免这样问题(腾讯云目前不支持UEFI+GPT启动模式,ReFS需要这种模式,因此目前不支持使用ReFS文件系统)。
建议解决方案:
通过命令fsutil usn queryjournal C: 查看磁盘的USN journal情况
fsutil usn queryjournal C:
通过命令fsutil usn deleteJournal /D C: 重置USN journal
fsutil usn deleteJournal /D C:
=========
Windows Server 2022不再有这个问题,随着微软2023年4月份的补丁解决
Windows Server 2019以及之前版本:
- 使用ReFS文件系统避免这样问题(如无法使用,请使用chkdsk /f /r)。
- 对问题磁盘运行chkdsk /f /r。如果是系统盘,需要重启完成chkdsk修复。
- 如果不方便重启机器,建议使用命令fsutil usn deleteJournal /D c:重置USN journal。
相关文章
- 【Linux】翻山越岭——进程地址空间
- Linux C:获取线程ID的方法(linuxc线程id)
- 收费Linux主机空间:付费拥抱自由(linux主机空间)
- Oracle表空间:已经存在的挑战与机遇(oracle表空间已存在)
- 计算Linux系统所需的最小存储空间需求(linux需要多大空间)
- 如何在Linux中查看表空间使用情况(linux查看表空间)
- MySQL 解放数据库变革:简单易用的命名空间(mysql 命名空间)
- MSSQL重置自增ID的解决方案(mssql重置自增id)
- 查看Linux系统剩余空间:必知必会(查看linux剩余空间)
- MSSQL索引表大小:考量空间效率的关键要素(mssql索引表大小)
- Oracle构建全局ID码记录数据地理位置(oracle 全局id)
- MySQL中如何使用ID取余分组(mysql中id取余分组)
- 树莓派启动Redis,开启新空间(树莓派 启动redis)
- Oracle权限认证之ID管理探究(id oracle权限)
- 类型Oracle中使用ID类型的简易操作技巧(oracle中设置id)
- MySQL多表空间管理如何管理不同的表空间(mysql不同的表空间)
- Oracle数据库中ID的自动递增(oracle使id自增长)
- Oracle ID重复解决之道(oracle id重复)
- Redis空间被写满的警示(redis被写满时)
- 多域名绑定到一个空间访问不同首页的技巧
- php模拟用户自动在qq空间发表文章的方法