linux - 在 Linux 中用符号链接(symbolic link)替换打开的文件?

标签 linux postgresql filesystems

现在,我在同一个磁盘上有一个包含数据的文件和一个数据库。长时间运行的原子插入可能会在提交之前填满磁盘。无论如何,即使数据库可能打开了当前文件,我是否可以用符号链接(symbolic link)替换数据文件以节省几百 GB 的空间?如果没有这样的文件系统级解决方案,并且需要“重新打开数据,并从检查点继续”操作,我使用的是 postgres 9.5 并且数据文件由 pg_dump 生成。

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

最佳答案

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

但是您可以动态扩展文件所在的文件系统,前提是您使用 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
    

    可用空间是 4 MB 的 476 倍或 1904 MB。

  • 将逻辑卷扩展 1 GB

    # lvextend -L +1G /dev/mapper/datalv
    
  • 调整 ext<em>n</em> 的大小在线文件系统

    # resize2fs /dev/mapper/datalv
    

关于linux - 在 Linux 中用符号链接(symbolic link)替换打开的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119277/

相关文章:

linux - 在Linux Mint Qiana中安装OpenCV,Cmake错误

linux - git 在提交 linux 时使用 root 而不是我的用户名

linux - 端口映射 I/O 地址空间的位置

postgresql - 对表格的每 3 行求和

c - 在 win32api 中直接读写硬盘,如 biosdisk 或 ms-dos 中的 absread

C编程: Segmentation Fault (Core Dumped)

sql - Postgres : filter out some results with join

SQL:从日期和时间将 UTC 时间戳列添加到表中

apache-spark - 提供者 org.apache.hadoop.fs.s3a.S3AFileSystem 无法实例化

filesystems - Lua: %UserProfile% 访问权限