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