系统相关
首页 > 系统相关> > linux – 在复制文件之前保留磁盘空间

linux – 在复制文件之前保留磁盘空间

作者:互联网

我想在rsync发生之前保留(或者是关键字“声明”?)一些磁盘空间,这样其他程序就会认为磁盘空间较小(因为在rsync之后,磁盘的空间会大大减少).

背景

bash脚本rsync是一个位置的大量数据,有些工作,然后删除rsynced数据. bash脚本的多个实例可以同时运行.问题是,偶尔,多个脚本同时rsync并使用所有可用磁盘空间然后崩溃.

伪代码

这是当前的算法

check:

$disk_A = source disk
$disk_X = pick a different disk
$space_need = 12345  # disk space needed
$space_avail = space_available(some disk X)  # disk space available on $disk_X

if $space_need < $space_avail then
    rsync $disk_A/data $disk_X/data  # this step takes much time
else
    goto check:

do work
remove $disk_X/data

我想将步骤更改为(…与先前的伪代码相同)

...
if ... then
    reserve $space_avail on $disk_X
    # space_available() should now report $disk_X as $space_avail - original
    # HOW TO DO THAT?
    rsync $disk_A/data $disk_X/data  # this step takes much time
else
    ...
...
release $disk_X $space_avail  # HOW TO DO THAT?

利用修改的伪代码,空间被立即保留(或“声明”).其他脚本看到space_available()会立即返回更少的空间.目前,space_available()将返回一个下降的数字,而其他rsync实例运行.

解决方法:

如果您坚持使用独立于文件系统的工具,除了实际分配磁盘空间之外我无法想到这样做的方法,即保留需要创建一个所请求大小的(非稀疏!)文件,而且你’ d需要在启动rsync之前删除此文件.

如果文件位于ext2 / ext3 / ext4卷上,并且对某些操作使用root访问权限是可以接受的,则可以使用其reserved space功能.保留空间通常用于root,但您可以将其提供给其他用户或其他组.以该用户/组的身份运行rsync进程,并在运行rsync之前使用tune2fs -m调整保留空间.

对于ZFS或Btrfs池,可能​​有一个更灵活的解决方案,但我不知道该怎么做.

标签:linux,rsync,files,disk-usage,file-copy
来源: https://codeday.me/bug/20190814/1658694.html