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 볼륨에 있고 특정 작업에 루트 액세스가 허용되는 경우 해당 파일을 사용할 수 있습니다.예약된 공간특징. 예약된 공간은 일반적으로 루트 사용자가 사용하지만 다른 사용자나 다른 그룹에 할당할 수 있습니다. 이 사용자/그룹으로 rsync 프로세스를 실행하고 예약된 공간을 조정합니다.tune2fs -mrsync를 실행하기 전에.

ZFS 또는 Btrfs 풀을 위한 보다 유연한 솔루션이 있을 수 있지만 방법은 모르겠습니다.

답변2

할당량 및 관련 도구는 이를 달성하는 한 가지 방법입니다.

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

친구와의 lvextend는 또 다른 옵션입니다

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

관련 정보