PostgreSQL 8.1 空間不足並停止,資料目錄為空

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

請幫我!任何想法將不勝感激!

謝謝!

答案1

最後,我想通了。這是因為磁碟分割區資料夾1663/16394/17943位於另一個實體硬碟機上。所以我必須先安裝它,然後再進行下一步。

那是一個非常古老的系統。幸運的是,我不用再去照顧它了。

答案2

您的 Postgres 伺服器可以透過 Internet 存取嗎?最近發布了一個 Postgres 漏洞,但自 2010 年以來 8.1 版本不再受支持,因此它沒有收到安全更新。如果您的作業系統供應商不提供向後移植的更新(例如 RHEL5 或 CentOS5),則使用此版本是不合理的。您的作業系統核心大約是 2006 年的 — 您的作業系統是否仍收到安全更新?

您的系統似乎已被入侵,所有資料都被刪除了。如果您沒有備份,那麼我認為它是無法恢復的(對於凡人來說)。如果您的資料庫伺服器仍在運行,您可以嘗試從單一表中轉儲資料 - 它看起來像是_selections_by_content_last30days_selections_by_content_last30days成功轉儲,但actionlog表卻沒有。如果您的資料庫仍在運行,它可能有一些打開的檔案已被刪除,但在停止之前不會真正釋放 - 那裡可能有一些可恢復的資料。

舊 8.0 版本的資料仍然可以恢復,但這是一個複雜的操作,因為您需要編譯並安裝舊版本或 postgres 才能存取它。最好在另一台伺服器上執行此操作 - 盡快將其複製到安全的地方!

相關內容