Linux

PostgreSQL - 無法擴展文件 設備上沒有剩餘空間。提示:檢查可用磁碟空間

  • April 18, 2019

我一直在將數據插入 PostgreSQL DB,並收到錯誤消息:

psycopg2.OperationalError: could not extend file "base/16384/61892": No space left on device
HINT: Check free disk space

我正在使用 CentOS 7,並且在我的 linux 機器上檢查了我的一些狀態:

df -h

在此處輸入圖像描述

我對 Linux 很陌生,根據我的df -h命令結果,我可以看到 Linux 儲存系統的工作方式與 Windows 不同。

看起來 PostgreSQL 正在推送到/dev/mapper/centos-root,但它只有 50 GB 可用。

**問題1:**如何更改?如何將可用的額外可用空間分配/dev/mapper/centos-home給我的~/centos-root目錄?

**問題 2:**我的機器有兩個硬碟,每個 200 GB。但是根據我的df-h命令,看起來我只有 200GB 可用空間。為什麼會這樣?如何充分利用 400GB 空間?

看起來問題是我/dev/mapper/centos-root的都被填滿了。我在 PostgreSQL 中插入了近 10,000,000 行 12 列的數據。

**問題3:**這個大到可以佔用50GB的空間嗎?

謝謝!

編輯:pvs, vgs,的輸出lvs

在此處輸入圖像描述

您的伺服器分區嚴重。這不完全是你的錯。相反,在我看來,預設的 RHEL/CentOS 設置非常具有誤導性。

讓我們從pvs; vgs; lvs上面輸入的命令的描述開始。它們都與LVM2邏輯捲管理器相關,簡而言之,它使您能夠創建“靈活”、可調整大小的分區:

  • pvs顯示物理磁碟如何連接到 LVM 系統。您有 2 個 200 GB 磁碟,但pvs僅顯示 1 個 200 GB 物理設備。這意味著您的磁碟在 RAID1(鏡像)中並且它們完全分配給 LVM(即:沒有未分配的物理空間);
  • vgs顯示分配給您的物理設備的捲組和任何可用的可用空間。在您的情況下,可用空間<4 MB,因此基本上您沒有可用空間。下一個命令解釋了正在使用您的空間的內容…
  • lvs顯示您有兩個邏輯卷(將它們視為分區):一個 50 GB 的根捲和一個 ~145 GB 的主卷。簡而言之,您的root容量(PostgreSQL 所在的位置)遠小於您的需求;相反,home考慮到它包含的數據量很少(< 5GB),您的捲非常大。

要解決此問題,您有兩種選擇:

  • 將 PostgreSQL 重新定位在home卷下,例如在/home/pgsl. 我會避免這種情況,因為這/home不是數據庫的正確位置,並且將來會造成管理負擔。此外,您需要將 SELinux 置於許可模式(setenforce 0+/etc/selinux/config編輯)才能讓重定位工作;
  • 縮小home體積和放大root。這說起來容易做起來難,特別是如果您使用不支持收縮的 XFS(預設 RHEL/CentOS 文件系統)。

當且僅當您的數據可以被丟棄/重新載入時,您可以按照home以下步驟刪除home捲和放大root。請注意,一個小錯誤(我的和您的)都會破壞您的數據(殺死約 100 公里範圍內的任何貓),因此我對最終結果不承擔***任何責任。***如果您不確定,請停在這裡並致電專業的系統管理員尋求支持。好的,讓我們繼續;我將發布一個帶有相關描述的命令序列:

  • umount /home:此解除安裝(即“禁用”)主卷;
  • lvremove centos/home:這將永久銷毀 /home及其所有內容;
  • lvextend centos/root -L +100G:這會將root音量擴大 100 GB;
  • xfs_growfs /:假設您使用的是 XFS,這會擴展根文件系統以匹配底層擴展卷。如果您正在使用ext4(這是不可能的),您需要發出resize2fs /dev/centos/root.

引用自:https://serverfault.com/questions/933401