PostgreSQL 8.1空间不足并停止,数据目录为空

我在Gentoo / Linux 2.6.14r5上使用了PostgreSQL 8.1。 我的数据库服务器的磁盘空间如下所示:

db postgresql # df -l Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 9775248 2018528 7756720 21% / udev 1557872 88 1557784 1% /dev shm 1557872 0 1557872 0% /dev/shm /dev/sda4 281096760 244270836 36825924 87% /var/lib/postgresql /dev/sdb1 961402192 244780080 667785712 27% /mnt/sdb1 

我无法重新启动./etc/init.d/postgresql,因为/ var / lib / postgresql下的子目录数据是空的。 PostgreSQL8.1从8.0更新,所以/ var / lib / postgresql中有一个data.old。 当我执行'du -b'时,结果如下:

  postgresql # du -b 471 ./.ssh 580 ./data 7697 ./paul/Fifthwindow-RogersBuck 19673 ./paul/Fifthwindow-Tattoo/Output 20633 ./paul/Fifthwindow-Tattoo 13762 ./paul/Fifthwindow-Beard/Output 14493 ./paul/Fifthwindow-Beard 3036 ./paul/Fifthwindow-Touch1/Output 10789 ./paul/Fifthwindow-Touch1 56931 ./paul 3624120 ./data.old/base/1 3624120 ./data.old/base/10792 3624120 ./data.old/base/10793 48 ./data.old/base/16394/pgsql_tmp 248802448893 ./data.old/base/16394 48 ./data.old/base/backup 248813321469 ./data.old/base 11370 ./data.old/paul/output_files 14332 ./data.old/paul 122952 ./data.old/pg_subtrans 48 ./data.old/pg_twophase 57416 ./data.old/pg_multixact/members 49224 ./data.old/pg_multixact/offsets 106736 ./data.old/pg_multixact 4880603 ./data.old/global 316494192 ./data.old/pg_clog 48 ./data.old/pg_xlog/archive_status 536872320 ./data.old/pg_xlog 48 ./data.old/pg_tblspc 249678076379 ./data.old 27023 ./scripts/cron/daily 917 ./scripts/cron/weekly 28036 ./scripts/cron 861 ./scripts/runOnce 599794 ./scripts/manual 628811 ./scripts 171463723 ./output 249850258001 . 

当我执行'pg_dump -h my.host.ip.0 -p 5432 -U postgres -F t -b -v -f“/some/directory/backup.file”mydb“时,消息如下:

 pg_dump: dumping contents of table _selections_by_content_last30days pg_dump: dumping contents of table _selections_by_content_last365days pg_dump: dumping contents of table actionlog pg_dump: ERROR: could not count blocks of relation 1663/16394/17943: No such file or directory pg_dump: SQL command to dump the contents of table "actionlog" failed: PQendcopy() failed. pg_dump: Error message from server: ERROR: could not count blocks of relation 1663/16394/17943: No such file or directory pg_dump: The command was: COPY public.actionlog (eventdetail, eventdatetime, eventtypeid, consoleid, albumid, trackid, sequenceid, sessionid, contentid, actionlogid, fileid) TO stdout; pg_dump: *** aborted because of error 

请帮帮我! 任何想法将不胜感激!

谢谢!

最后,我明白了。 这是因为磁盘分区文件夹1663/16394/17943在另一个物理硬盘驱动器上。 所以我必须先安装它,然后进行下一步。

那是一个很老的系统。 幸运的是,我不必再在意了。

您的Postgres服务器是否可以通过Internet访问? 最近发布了一个Postgres漏洞,但是从2010年开始不支持8.1版本,所以没有收到安全更新。 如果您的操作系统供应商不提供backported更新,使用这个版本是不合理的 – 比如RHEL5或者CentOS5。 你的操作系统内核是从2006年左右开始的 – 你的操作系统是否仍然收到安全更新

看起来您的系统已经被盗用,您的所有数据都被删除了。 如果你没有备份,那么我认为它是不可恢复的(仅仅是凡人)。 如果您的数据库服务器仍在运行,您可以尝试从单个表中转储数据 – 它看起来像_selections_by_content_last30days_selections_by_content_last30days被成功转储,并且actionlog表不是。 如果你的数据库仍然在运行,它可能会有一些打开的文件被删除,但是直到它停止的时候才会被释放 – 这里可能有一些可恢复的数据。

旧8.0版本的数据仍然可以恢复,但这是一个复杂的操作,因为您需要编译和安装旧版本或postgres来访问它。 最好在另一台服务器上执行此操作 – 尽快将其复制到安全的地方!