rsyncがファイルをコピーする前にディスク領域を予約する

rsyncがファイルをコピーする前にディスク領域を予約する

長すぎます。必要なディスク容量が確実に使用できる場合にのみ、他のインスタンスがrsync実行されるようにする前に、特定の量のディスク容量を予約(または「要求」?)したいと思います。rsync

背景

タスク(実行されるシェルスクリプトrsync)は次のことを行います。

  1. rsyncソースディスクから別のターゲットディスクに大量のデータをコピーするために使用されます。
  2. コピーしたデータで操作を実行する
  3. コピーしたデータの削除

ジョブスクリプトの複数のインスタンスを同時に実行できます。

私の考えには時々、複数のジョブスクリプトを同時に実行しrsync、利用可能なすべてのディスク容量を使用します。すべてのrsyncインスタンスが失敗します(したがって操作が失敗します)。

擬似コード

これが私が想像するアルゴリズムです:

$job = get_next_incoming_job()
$disk_dst = $job.disk_dst()  # destination disk for rsync
$space_need = $job.calculate_space_needed()

_check_space:  # jump label

if $space_need > space_available($disk_dst) then
    sleep $RANDOM
    goto _check_space:

$handle = reserve_space($disk_dst, $space_need)  # How??

# rsync will "fill-in" the reserved space - How??
rsync $job.source_data_path() $disk_dst/$job.ID/

do work using $disk_dst/$job.ID/

remove $disk_dst/$job.ID/
release_reserved_space($handle)  # How??

この魔法の関数は、報告された空き領域(返された値)をreserve_space即座に変更します。他のジョブインスタンスは、より少ないスペースを返します。$disk_dstspace_availablersyncspace_available()すぐに(したがって、作業を後で延期します。)

現在space_available()の(実際のプログラムを介して)dfインスタンスの実行中に減少する数値が返されます。rsync問題は、複数のrsyncインスタンスの実行中にスペースが不足する可能性があることです。インスタンスが完了できることを確認した場合にのみ実行したいrsync(つまり、実行中にディスク容量が不足しない)。

答え1

reserveファイルシステム独立ツールの使用に固執する場合は、必要なサイズの(まれではありません!)ファイルを作成する必要があるディスク容量を実際に割り当てる以外に、他の方法を考えることはできません。このファイルは前に削除する必要がありますrsync

ファイルが ext2/ext3/ext4 ボリュームにあり、特定のジョブへのルートアクセスが許可されている場合は、そのファイルを使用できます。予約済みスペース特徴。予約済みスペースは通常、rootユーザーによって使用されますが、他のユーザーまたは別のグループに割り当てることができます。このユーザー/グループでrsyncプロセスを実行し、スケジュールされたスペースを調整します。tune2fs -mrsyncを実行する前に。

ZFSまたはBtrfsプールのためのより柔軟なソリューションがあるかもしれませんが、方法はわかりません。

答え2

クォータと関連ツールはこれを達成する1つの方法です。

https://linux.die.net/man/1/quota

友達とのlvextendは別のオプションです

https://linux.die.net/man/8/lvextend

関連情報