一:报错场景说明
使用docker在局域网搭建gitlab服务,一直运行正常。有天突然断电,gitlab容器再启动时一直显示unhealthy状态,查看日志报如下错,结果是gitlab网页无法访问,所有仓库资源连接都变成502。
failed: ERROR: could not read block 0 in file "base/16385/2702"
# 出现此信息则表示数据表文件损坏。这通常是由于异常断电或误操作导致的。这里“16385”是发生问题的数据库的对象id(oid), “2702”表示发生问题的表的文件结点(filenode)
# 如果发生损坏的表以及损坏的页面数量较少,我们可以以牺牲部分数据的代价恢复整体;如果损坏的表数量过多,或者损失的数据非常重要,就需要从备份中恢复数据了。
想着当务之急先备份数据,备份数据时还是报错:
root@monitor:/data/gitlab_docker# docker exec gitlab gitlab-rake gitlab:backup:create
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... pg_dump: [archiver (db)] query failed: ERROR: could not read block 0 in file "base/16385/2702": Input/output error
pg_dump: [archiver (db)] query was: SELECT tgname, tgfoid::pg_catalog.regproc AS tgfname, pg_catalog.pg_get_triggerdef(oid, false) AS tgdef, tgenabled, tableoid, oid FROM pg_catalog.pg_trigger t WHERE tgrelid = '19086'::pg_catalog.oid AND NOT tgisinternal
Backup failed
[FAILED]
百度谷歌找了一堆,最终找到这篇文章得以解决:
https://blog.csdn.net/international24/article/details