You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2实例PostgreSQL数据迁移至附加EBS卷的配置及存储排查

解决PostgreSQL数据存储与EBS卷排查问题

一、迁移现有PostgreSQL数据到指定EBS卷

  1. 停止PostgreSQL服务
    源码安装的PostgreSQL可使用:

    pg_ctl stop -D /usr/local/postgresql/pgsql/data
    

    若通过系统服务管理:

    sudo systemctl stop postgresql
    
  2. 确认EBS卷挂载状态
    用lsblk或df -h查看已挂载的EBS卷路径,比如假设gp2卷挂载在/mnt/gp2,确保挂载目录存在且可访问。

  3. 复制数据库数据到EBS卷
    保留文件权限和属性完整复制数据:

    sudo cp -a /usr/local/postgresql/pgsql/data/* /mnt/gp2/
    
  4. 修改PostgreSQL配置文件
    编辑/usr/local/postgresql/pgsql/data/postgresql.conf,修改data_directory参数指向EBS卷路径:

    data_directory = '/mnt/gp2'
    
  5. 修复目录权限
    确保PostgreSQL运行用户(通常为postgres)拥有EBS挂载目录的读写权限:

    sudo chown -R postgres:postgres /mnt/gp2
    
  6. 重启PostgreSQL服务

    pg_ctl start -D /mnt/gp2
    

    或系统服务方式:

    sudo systemctl start postgresql
    

二、配置PostgreSQL默认将新表存储到指定EBS卷

使用PostgreSQL表空间(Tablespace)实现定向存储:

  1. 创建表空间
    登录PostgreSQL控制台,创建指向EBS挂载目录的表空间(以gp2卷为例):

    CREATE TABLESPACE gp2_space LOCATION '/mnt/gp2';
    

    注意:挂载目录需提前设置postgres用户权限。

  2. 设置数据库默认表空间
    将目标数据库的默认表空间改为刚创建的表空间:

    ALTER DATABASE testdb SET default_tablespace = gp2_space;
    

    此后在该数据库中新建的表会默认存储到gp2卷对应的表空间。

  3. 指定单表存储位置(可选)
    若需单独指定某张表的存储位置,创建表时添加TABLESPACE参数:

    CREATE TABLE new_test_table (id INT, name TEXT) TABLESPACE gp2_space;
    

三、排查EBS卷2%占用来源

  1. 快速查看目录占用
    用df -h确认卷的挂载路径(如/mnt/gp2),执行:

    du -sh /mnt/gp2/*
    

    快速获取目录下各文件/文件夹的大小。

  2. 深度扫描大文件
    安装ncdu工具实现交互式可视化分析:

    # Debian/Ubuntu
    sudo apt install ncdu
    # RHEL/CentOS
    sudo yum install ncdu
    

    运行ncdu /mnt/gp2,可逐层查看目录占用情况,精准定位大文件。

  3. 检查隐藏文件与系统残留
    查看挂载目录下的隐藏文件:

    ls -la /mnt/gp2
    

    排查是否存在.lost+found(文件系统修复残留)、临时文件或日志文件占用空间。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:55:20