rsync 를 이용한 파일 안전한 동기화
이 단계에서는 rsync 명령어를 사용하여 시스템 간에 파일을 동기화하는 방법을 배웁니다. rsync는 로컬 및 원격으로 파일 및 디렉터리를 복사하고 동기화하는 강력하고 다재다능한 도구입니다. 주요 장점은 파일의 차이점만 전송할 수 있기 때문에 업데이트에 매우 효율적입니다. sftp와 마찬가지로 rsync는 SSH 를 사용하여 안전하고 암호화된 전송을 수행할 수 있습니다.
rsync의 가장 일반적인 옵션은 다음과 같습니다.
-a 또는 --archive: 여러 옵션 (-rlptgoD) 의 조합으로 대부분의 파일 속성 (재귀, 링크, 권한, 시간, 그룹, 소유자, 장치 파일) 을 보존합니다. "아카이브 모드"라고도 하며 대부분의 동기화 작업에 권장됩니다.
-v 또는 --verbose: 전송에 대한 자세한 정보를 표시하여 상세도를 높입니다.
-z 또는 --compress: 느린 연결을 통해 전송 속도를 높일 수 있도록 전송 중에 파일 데이터를 압축합니다.
-h 또는 --human-readable: 사람이 읽기 쉬운 형식으로 숫자를 출력합니다.
-n 또는 --dry-run: 실제 변경 사항 없이 시험 실행을 수행합니다. 명령어를 실제로 실행하기 전에 rsync가 무엇을 수행할지 확인하는 데 매우 유용합니다.
먼저 ~/project 디렉터리에 있는지 확인합니다.
cd ~/project
소스 디렉터리와 대상 디렉터리를 만들어 동기화 시나리오를 시뮬레이션합니다.
소스 디렉터리 source_dir을 만들고 몇 개의 파일을 추가합니다.
mkdir source_dir
echo "Content of fileA" > source_dir/fileA.txt
echo "Content of fileB" > source_dir/fileB.txt
mkdir source_dir/subdir
echo "Content of subfile1" > source_dir/subdir/subfile1.txt
빈 대상 디렉터리 dest_dir을 만듭니다.
mkdir dest_dir
이제 source_dir을 dest_dir로 동기화할 때 rsync가 수행할 작업을 미리 확인하기 위해 드라이 런을 수행합니다. 아카이브 모드, 상세 출력, 사람이 읽기 쉬운 크기 (-avh) 옵션과 함께 드라이 런 (-n) 옵션을 사용합니다.
rsync -avhn source_dir/ dest_dir/
경로명 뒤의 슬래시에 대한 중요 참고 사항:
source_dir/: 경로명 뒤의 슬래시는 source_dir의 내용을 복사한다는 의미입니다.
source_dir: 경로명 뒤에 슬래시가 없으면 source_dir 자체를 대상에 복사한다는 의미입니다.
드라이 런의 출력은 전송될 파일을 보여줍니다.
sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt
sent 186 bytes received 12 bytes 396.00 bytes/sec
total size is 66 speedup is 0.33 (DRY RUN)
마지막에 (DRY RUN)이 표시되어 실제 변경 사항이 없음을 나타냅니다.
이제 실제 동기화를 수행합니다. -n 옵션을 제거합니다.
rsync -avh source_dir/ dest_dir/
출력은 드라이 런과 유사하지만 (DRY RUN) 태그는 없습니다.
sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt
sent 186 bytes received 12 bytes 396.00 bytes/sec
total size is 66 speedup is 0.33
파일이 dest_dir로 복사되었는지 확인합니다.
ls -R dest_dir
다음과 같은 결과가 표시되어야 합니다.
dest_dir:
fileA.txt fileB.txt subdir
dest_dir/subdir:
subfile1.txt
이제 source_dir의 파일을 수정하고 새 파일을 추가하여 rsync의 효율성을 확인해 보겠습니다.
echo "Updated content for fileA" > source_dir/fileA.txt
echo "New file content" > source_dir/new_file.txt
이번에 rsync가 무엇을 전송할지 확인하기 위해 다시 드라이 런을 수행합니다.
rsync -avhn source_dir/ dest_dir/
출력은 변경되거나 새로 추가된 파일만 보여줍니다.
sending incremental file list
./
fileA.txt
new_file.txt
sent 128 bytes received 12 bytes 280.00 bytes/sec
total size is 100 speedup is 0.71 (DRY RUN)
이것은 rsync가 차이점만 전송할 수 있음을 보여줍니다.
이제 실제 동기화를 다시 수행합니다.
rsync -avh source_dir/ dest_dir/
dest_dir의 내용을 다시 확인합니다.
ls -R dest_dir
cat dest_dir/fileA.txt
cat dest_dir/new_file.txt
dest_dir에 new_file.txt가 있고 fileA.txt에는 "Updated content for fileA"가 포함되어 있어야 합니다.