EC2实例PostgreSQL数据迁移至附加EBS卷的配置及存储排查
一、迁移现有PostgreSQL数据到指定EBS卷
停止PostgreSQL服务
源码安装的PostgreSQL可使用:pg_ctl stop -D /usr/local/postgresql/pgsql/data若通过系统服务管理:
sudo systemctl stop postgresql确认EBS卷挂载状态
用lsblk或df -h查看已挂载的EBS卷路径,比如假设gp2卷挂载在/mnt/gp2,确保挂载目录存在且可访问。复制数据库数据到EBS卷
保留文件权限和属性完整复制数据:sudo cp -a /usr/local/postgresql/pgsql/data/* /mnt/gp2/修改PostgreSQL配置文件
编辑/usr/local/postgresql/pgsql/data/postgresql.conf,修改data_directory参数指向EBS卷路径:data_directory = '/mnt/gp2'修复目录权限
确保PostgreSQL运行用户(通常为postgres)拥有EBS挂载目录的读写权限:sudo chown -R postgres:postgres /mnt/gp2重启PostgreSQL服务
pg_ctl start -D /mnt/gp2或系统服务方式:
sudo systemctl start postgresql
二、配置PostgreSQL默认将新表存储到指定EBS卷
使用PostgreSQL表空间(Tablespace)实现定向存储:
创建表空间
登录PostgreSQL控制台,创建指向EBS挂载目录的表空间(以gp2卷为例):CREATE TABLESPACE gp2_space LOCATION '/mnt/gp2';注意:挂载目录需提前设置
postgres用户权限。设置数据库默认表空间
将目标数据库的默认表空间改为刚创建的表空间:ALTER DATABASE testdb SET default_tablespace = gp2_space;此后在该数据库中新建的表会默认存储到gp2卷对应的表空间。
指定单表存储位置(可选)
若需单独指定某张表的存储位置,创建表时添加TABLESPACE参数:CREATE TABLE new_test_table (id INT, name TEXT) TABLESPACE gp2_space;
三、排查EBS卷2%占用来源
快速查看目录占用
用df -h确认卷的挂载路径(如/mnt/gp2),执行:du -sh /mnt/gp2/*快速获取目录下各文件/文件夹的大小。
深度扫描大文件
安装ncdu工具实现交互式可视化分析:# Debian/Ubuntu sudo apt install ncdu # RHEL/CentOS sudo yum install ncdu运行
ncdu /mnt/gp2,可逐层查看目录占用情况,精准定位大文件。检查隐藏文件与系统残留
查看挂载目录下的隐藏文件:ls -la /mnt/gp2排查是否存在
.lost+found(文件系统修复残留)、临时文件或日志文件占用空间。
内容的提问来源于stack exchange,提问作者Sam

