PostgreSQL - 無法擴展文件 設備上沒有剩餘空間。提示:檢查可用磁碟空間
我一直在將數據插入 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
.