PostgreSQL - 无法扩展文件设备上没有剩余空间。提示:检查可用磁盘空间

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,,vgslvs

在此处输入图片描述

答案1

您的服务器分区不当。这不能完全怪您,而是我认为默认的 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

相关内容