在Linux中用Symlinks替换打开的文件?

时间:2016-10-18 22:41:07

标签: linux postgresql filesystems

现在,我有一个包含数据的文件和一个存放在同一磁盘上的数据库。长时间运行的原子插入可能会在磁盘提交之前填满磁盘。无论如何,我可以用符号链接替换数据文件以节省几百千兆字节,即使数据库可能已打开当前文件?如果没有这样的文件系统级解决方案,并且重新打开数据,并继续从检查点"需要采取行动,我使用postgres 9.5,数据文件由pg_dump生成。

我的主要问题和好奇心是关于用链接替换文件而不打断打开它们的程序的可能性,但我是出于这种情况的动机。任何有关如何将更多磁盘空间与数据库所在目录相关联而不中断当前正在运行的程序的知识也会派上用场。

1 个答案:

答案 0 :(得分:2)

无法“替换”进程当前打开的文件。

但是您可以动态扩展文件所在的文件系统,只要您使用LVM,包含文件系统的卷组中就有可用空间,文件系统类型允许调整大小。

以下是文件系统ext2及其后续版本的解决方案:

  • 找到文件所在的逻辑卷

    # df /path/to/large/file
    Filesystem           1K-blocks   Used Available Use% Mounted on
    /dev/mapper/datalv
                            991512 991500        12 100% /path/to
    
  • 查找文件所在的卷组

    # lvdisplay -c /dev/mapper/datalv | cut -d: -f2
    datavg
    
  • 查找物理范围大小以及有多少是免费的

    # vgdisplay -c datavg | cut -d: -f13,16
    4096:476
    

    可用空间为476倍4 MB或1904 MB。

  • 将逻辑卷扩展1 GB

    # lvextend -L +1G /dev/mapper/datalv
    
  • 在线调整extn文件系统的大小

    # resize2fs /dev/mapper/datalv