더블

더블

한 드라이브에서 다른 드라이브로 백업을 실행하기 위해 rsync를 사용하고 있습니다. 두 쌍의 소스 및 대상 디렉토리가 있는데 단일 명령을 사용하여 작동시키는 방법을 모르겠습니다. 현재 전체 백업을 수행하기 위해 두 개의 별도 명령을 실행하고 있습니다.

소스 디렉터리는 별도의 마운트 지점입니다: /mnt/ssd_ext4/mnt/ssd_ntfs. 대상 드라이브에 일치하는 마운트 지점이 있습니다: /mnt/backup_ext4/mnt/backup_ntfs.

완전한 명령은 다음과 같습니다

rsync -aAXUxv --no-l --no-D --delete --info=progress2,stats2 --debug=FILTER --exclude-from=/home/xxx/excludelist.txt /mnt/ssd_ext4/ /mnt/backup_ext4

그리고

rsync -aAXUxv --no-l --no-D --delete --info=progress2,stats2 --debug=FILTER --exclude-from=/home/xxx/excludelist.txt /mnt/ssd_ntfs/ /mnt/backup_ntfs

단일 명령으로 이를 수행할 수 있는 영리한 방법이 있습니까?


편집하다:

대안을 제안해 주셔서 감사합니다. 하지만 정말 단일 명령이 필요합니다. 그 사실을 파악한 후에는 ssh를 통한 rsync를 사용하고 "force command" 옵션을 ssh 키에 바인딩하겠습니다. 이 방법을 사용하면 단일 명령만 매핑할 수 있습니다. 질문을 단순하게 하려고 이 내용을 언급하지 않았습니다.

답변1

Rsync는 다음과 같은 일에 훌륭합니다.rsync src1 src2 ... srcN dest_dir/

기본적으로 단일 호출에서는 단일 대상 디렉터리에만 백업할 수 있습니다. 두 대상 모두 rsync 프로토콜을 별도로 두 번 실행해야 합니다. 이를 효율적으로 수행하기 위해 자신만의 프로토콜을 만들 수 있지만 시도되고 테스트된 rsync 프로토콜은 아닙니다.

두 쌍의 소스 디렉터리와 대상 디렉터리가 있습니다.

"force command" 옵션을 사용하여 ssh를 통해 rsync를 사용하겠습니다.

"두 대상" 요구 사항은 Stock rsync 사용과 호환되지 않습니다. 목적지가 하나만 있도록 한 단계 위로 이동하는 것을 고려해 보세요.

예를 들어, tar각 호출마다 무조건 모든 비트를 보내는 간단한 파이프를 사용하면 다음을 사용할 수 있습니다.

cd /mnt && tar zcf - ssd_ext4/ ssd_ntfs/ |
  ssh server 'cd /mnt && tar zxvf -'

이름을 바꾸는 중이기 때문에

  • ssd_ext4--> backup_ext4그리고
  • ssd_ntfs-->backup_ntfs

처음에는 서버에서 "심볼릭 링크를 사용하여 문제를 해결"해야 했습니다.

cd /mnt
mkdir -p backup_{ext4,ntfs}
ln -s backup_ext4 ssd_ext4
ln -s backup_ntfs ssd_ntfs

나는 rsync가 비슷한 배열을 따르도록 설득할 수 있다고 생각합니다. 나는 이런 난관을 뛰어넘을 기회가 없었으며 심볼릭 링크 처리는 특별하게 취급되는 경향이 있습니다. 프로덕션에 문제를 일으키기 전에 QA 환경에서 신중하게 테스트하세요.


더블

서버에서 mkdir double_dest.

이제 일부 비트가 대상에 도달했을 때 네트워크 대역폭을 효율적으로 활용하는 rsync의 기능을 활용하여 rsync두 개의 소스 디렉터리를 이 디렉터리에 연결할 수 있습니다.double_dest/

rsync가 완료된 후 서버는 double_dest/에서 이러한 비트가 끝나는 위치까지 다른 로컬 디스크 간 rsync를 자유롭게 수행할 수 있습니다. 로컬 복제를 수행하면 잘못된 네트워크 클라이언트가 의도한 위치를 넘어서 쓸 수 있는 위험이 줄어들고 chroot()필요한 경우 이를 악용할 수도 있습니다. 그러나 이는 "이중 스토리지"라는 대가를 치르게 됩니다. 아마도 값싼 회전식 윈체스터 디스크 형태로 두 배의 스토리지를 구입해야 합니다.


요구사항 엔지니어링

정말 하나의 명령이 필요합니다. 그것을 알아낸 후에는 "force command" 옵션과 함께 ssh를 통한 rsync를 사용하겠습니다.

아니요, 단일 명령이 필요하지 않습니다. 요구 사항 문서의 일부로 "단일 명령"을 포함하도록 선택할 수 있지만 이로 인해 솔루션 구현 비용이 증가하는 경향이 있습니다.

당신 앞에는 이미 준비된 솔루션이 있습니다. 단일 강제 명령에 대해 sshd에 알려야 합니까? 불필요한. 각각 다른 대상 디렉토리를 갖는 이러한 명령 쌍을 정의하십시오. 문제가 해결되었습니다.

답변2

몇몇 사람들이 언급한 다중 소스, 단일 대상 기능이 있으며 rsync@J_H는 수준을 높이고 심볼릭 링크를 사용하되 모든 점을 연결하도록 제안했습니다.

백업 서버에서 디스크 파티션에 "ssd_ext4" 및 "ssd_ntfs"라는 GPT 레이블이 지정되어 있다고 가정합니다.

for fs in ext4 ntfs
do
  mkdir -p /backup/ssd_$fs
  ln -s ssd_$fs /backup/backup_$fs
  mount /dev/disk/by-partlabel/ssd_$fs /backup/ssd_$fs
done

[일부 운영 체제의 경우 장치는 /dev/gpt/ssd_$fs. ]

그런 다음 클라이언트에서 백업 서버로 백업을 푸시할 수 있습니다.

rsync ...options.... /mnt/ssd_ext4 /mnt/ssd_ntfs backup_server:/backup/

관련 정보