我在 Windows 11 机器上运行 postgres 14 数据库。
Postgres 已开始生成一些错误,包括以下内容...
错误:XX002:索引“tableA_i1”在块 1807 处包含损坏的页面
和
错误:XX001:关系 pg_tblspc/16402/PG_14_202107181/16404/125828 的第 38 个块中的页面无效
谷歌搜索这些错误并没有找到很多解决方案,但很多人认为潜在的磁盘损坏可能是原因。如果我运行 chkdsk(实际上我通过资源管理器运行它,选择“c”,右键单击,属性,工具,单击“检查”),它会告诉我磁盘没有问题。
解决这个问题的最佳方法是什么?也许是磁盘是损坏(这是固态硬盘),但chkdsk
丢失了?或者 Postgres 弄错了?我正在运行稳定版的 Postgres,没有其他迹象表明磁盘损坏,但 Postgres 错误不断出现,而且总是新的不同表/索引中的错误。每次我删除/重新创建对象时,我都认为问题已经解决了,但半天后,我在另一个对象中又遇到了类似的错误。
更新 - 磁盘的 SMART 数据将所有状态列为“良好”,整夜运行chkdsk
没有显示除此位之外的任何错误迹象.....
纠正卷位图中的错误。
Windows 已对文件系统进行了更正。无需采取进一步措施。
但在日志的下方写着
0 KB in bad sectors.
所以我认为该光盘很好,我认为可以转到 dba.stackexchange。
答案1
使用以下产品检查磁盘的 SMART 属性 规格 或 CrystalDiskInfo。如果您希望我们查看,请在您的帖子中附上属性的屏幕截图。
如果 SMART 属性看起来不错(Speccy 会告诉您),则说明您的数据库已损坏,但这并不意味着存在坏扇区。您需要从备份中恢复数据库。
如果 SMART 属性显示错误,则磁盘可能存在问题。这并不一定意味着磁盘无法使用,前提是没有发现新的坏扇区。
运行chkdsk /f /r
以验证所有扇区,然后再次查看 SMART 数据。在此模式下,chkdsk
完成速度会很慢。请确保在开始之前备份,因为如果磁盘处于故障前状态,此操作可能会造成破坏。