Postgres DB HDD 需要扩展

Postgres DB HDD 需要扩展

我有一个在 Unix 上运行 Postgres 的 Azure VM,由 Bitnami 提供:PostgreSQL 9.6.2-0(Ubuntu 14.04)

数据库运行良好并且我正在填充它,但是过了一段时间,数据库大小达到约 25GB 然后我的代码(填充数据库)崩溃了......

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

我以为这只是对我的虚拟机的简单调整。不。虚拟机现在的硬盘大小为 400GB。空间充足。

然后我又尝试了我的代码,到了 25GB,砰的一声,没有空间了。

我接下来要做的是通过 SSH 登录虚拟机并使用以下命令检查磁盘df -h

在此处输入图片描述

如上所示,/dev/sda1大小为 30GB,其中已使用 29GB。我怀疑我的 Postgres 正在使用这个 HDD... 当我使用 Bitnami Azure 模板时自动设置。

您可以通过 Azure 门户看到我设置的 400GB HDD:/dev/sdb1

我能做什么?我需要将更多数据存入我的 Postgres DB...并且没有明显的方式可以/dev/sda1通过门户更改大小。

更新

根据要求,以下是修改前的 fstab 内容(默认): 在此处输入图片描述

我改成/mnt/opt/bitnami/postgresql/data按照路径:https://stackoverflow.com/a/8237512/596841)。当我更新、保存、退出并重新启动服务器时,它又恢复为默认设置(如上所示)。

答案1

最简单的做法是挂载 /dev/sdb1,数据就在那里。如何找到数据所在的位置:(https://stackoverflow.com/questions/1137060/where-does-postgresql-store-the-database

因此,一旦您知道停止数据库并将数据移动到 /mnt 目录。

然后,您将把更大的驱动器放置在需要的位置,以便 postgres 能够看到它。

umount /dev/sdb1
mount /dev/sdb1 /original/path/to/data

现在您可能需要将 /etc/fstab 从 /mnt 更新为 /original/path/to/data,以便它在重启后仍然有效。

您还可以使用 LVM 并执行以下操作:https://kb.vmware.com/selfservice/search.do?cmd=displayKC&docType=kc&docTypeID=DT_KB_1_1&externalId=1006371

我个人认为mount方法是最简单的。

答案2

VM 现在的 HDD 大小为 400GB

/dev/sdb1是个临时存储,这个临时存储必须不是用于存储您不愿意丢失的数据。(重启将丢失临时数据)

我需要更多数据进入我的 Postgres DB

我们可以使用 Azure 门户向该 VM 添加新磁盘,然后将该磁盘挂载到该 VM。

添加新磁盘通过 Azure 门户: 在此处输入图片描述在此处输入图片描述

装载/dev/sdc到 Azure VM:

root@jasonvm:/home/jason# fdisk -l  #list all disks

Disk /dev/sdc: 429.5 GB, 429496729600 bytes   #we can find this new disk
255 heads, 63 sectors/track, 52216 cylinders, total 838860800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

然后使用此命令将此磁盘挂载到 Azure VM:

root@jasonvm:/home/jason# mkfs.ext4 /dev/sdc
root@jasonvm:/home/jason# mkdir -p /mnt/point1
root@jasonvm:/home/jason# mount /dev/sdc /mnt/point1
root@jasonvm:/home/jason# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  1.7G   12K  1.7G   1% /dev
tmpfs          tmpfs     344M  348K  344M   1% /run
/dev/sda1      ext4       30G  873M   28G   4% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs     1.7G     0  1.7G   0% /run/shm
none           tmpfs     100M     0  100M   0% /run/user
/dev/sdb1      ext4       50G   52M   47G   1% /mnt
/dev/sdc       ext4      394G   71M  374G   1% /mnt/point1
root@jasonvm:/home/jason# blkid    # list UUID
/dev/sr0: LABEL="rd_rdfe_stable.161107-1031" TYPE="udf" 
/dev/sda1: LABEL="cloudimg-rootfs" UUID="ce8fdc9c-fa56-49db-b69d-8c11634cbb7a" TYPE="ext4" 
/dev/sdb1: UUID="b0531bb0-dadf-4e20-a968-bd177989f7b8" TYPE="ext4" 
/dev/sdc: UUID="46c75dcc-51c8-4d53-8535-d4fc7bf3a5cb" TYPE="ext4" 
root@jasonvm:/home/jason# vi /etc/fstab   # add UUID to fstab, 
# CLOUD_IMG: This file was created/modified by the Cloud Image build process
UUID=ce8fdc9c-fa56-49db-b69d-8c11634cbb7a       /        ext4   defaults,discard        0 0
/dev/disk/cloud/azure_resource-part1    /mnt    auto    defaults,nobootwait,comment=cloudconfig 0       2
UUID=46c75dcc-51c8-4d53-8535-d4fc7bf3a5cb       /mnt/point1     ext4    defaults,nofail 0 0

笔记
我们应该将这个磁盘添加到/etc/fstab,这样,重新启动该虚拟机后我们就不会失去与该磁盘的连接。

将新磁盘挂载到Azure VM后,然后进行修改data_directory,我们可以按照以下步骤操作:

编辑 data_directory 以postgresql.conf指向新位置(例如/mnt/point1/postgresql/9.3/main

将 PG 数据目录的内容传输至/mnt/point1viasudo rsync -av /opt/bitnami/postgresql/data /mnt/point1

重新启动 posgtesql。

相关内容