Search

리눅스로 폴더 안전하게 옮기기

SSD에서 HDD로 폴더를 백업할 때, 가장 안전한 방법은?

문제점: mvcp의 한계

mv를 사용하면?
파일을 단순히 이동하지만, 중간에 작업이 끊기면 데이터 손상 가능성이 높음
복사 중에 에러가 발생하면 파일이 일부만 이동되거나 손실될 위험
cp를 사용하면?
모든 파일을 다시 복사하므로 시간이 오래 걸림
어디까지 복사되었는지 확인할 방법이 없음
파일이 이미 존재해도 덮어쓰므로 불필요한 디스크 작업 발생

해결책: rsync를 사용하자!

rsync는 효율적인 데이터 전송을 위해 변경된 파일만 복사하고, 네트워크 환경에서도 안정적인 복사를 지원하는 강력한 툴이다.

기본적인 rsync 백업 명령어

rsync -av --progress {from_dir} {to_dir}
Shell
복사

옵션 설명

a (archive) : 파일 권한, 심볼릭 링크, 타임스탬프 유지 (백업에 필수!)
v (verbose) : 진행 상황 출력
--progress : 각 파일별 전송 진행률 표시
{from_dir}{to_dir} : {from_dir}폴더 안의 모든 파일을 {to_dir}에 복사
이 방식의 장점:
cp와 다르게 파일이 이미 존재하면 건너뛰고, 새로운 파일만 복사
중단되어도 다시 실행하면 변경된 부분만 복사

파일이 존재하는 경우 건너뛰고 복사하려면?

rsync -av --ignore-existing --progress {from_dir} {to_dir}
Shell
복사
--ignore-existing : 이미 존재하는 파일은 건너뜀
속도 향상: 기존 파일을 덮어쓰지 않으므로 불필요한 I/O 작업을 줄임

백업 후 원본 파일 삭제 (파일 이동)

rsync -av --ignore-existing --checksum --remove-source-files --progress {from_dir} {to_dir} find {from_dir} -type d -empty -delete
Shell
복사

설명

1.
rsync를 사용해 파일을 HDD로 이동 (-remove-source-files 옵션 사용)
2.
find 명령어로 빈 폴더를 정리 (type d -empty -delete)
이 방식의 장점:
mv보다 안전함: 파일이 정상적으로 복사된 후 삭제됨
cp보다 효율적: 이미 존재하는 파일을 건너뛰어 속도를 높임

추가적인 안전장치: 체크섬(--checksum) 비교

파일 크기와 수정 시간이 같아도 실제 데이터가 다를 수 있음. 이를 방지하려면 --checksum 옵션을 추가!
rsync -av --ignore-existing --checksum --remove-source-files --progress {from_dir} {to_dir}
Shell
복사
--checksum : 파일 내용을 비교하여 변경된 경우에만 복사
무결성 검사를 수행하여 데이터 손상을 방지

rsync를 두 개 동시에 실행해도 될까?

같은 폴더를 대상으로 rsync를 동시에 실행하는 것은 위험함!
rsync -av --ignore-existing --checksum --remove-source-files --progress {from_dir} {to_dir} & rsync -av --ignore-existing --checksum --remove-source-files --progress {from_dir} {to_dir} &
Shell
복사
위와 같이 실행하면 발생할 수 있는 문제
1.
파일 삭제 충돌rsync가 파일을 삭제하는 과정에서 다른 rsync가 해당 파일을 찾지 못할 수 있음
2.
데이터 손실 가능성 → 일부 파일이 복사되지 않았는데 삭제될 수도 있음
3.
디스크 I/O 병목 현상 → SSD나 HDD에서 과부하 발생 가능
대신 안전한 실행 방법 하나의 rsync가 끝난 후 삭제를 실행하면 문제 없이 진행 가능
rsync -av --ignore-existing --checksum --progress {from_dir} {to_dir} rm -r ~/dataset
Plain Text
복사

tmux 세션에서 실행 중인지 확인하는 방법

백업 작업이 오래 걸리는 경우, tmux를 사용하면 안전하게 진행 가능
현재 tmux 세션에서 실행 중인지 확인하려면?
if [ -n "$TMUX" ]; then echo "현재 tmux 세션에서 실행 중입니다." else echo "tmux 세션이 아닙니다." fi
Plain Text
복사
tmux를 사용하면 SSH 연결이 끊겨도 작업이 중단되지 않음
tmux new -s backup rsync -av --ignore-existing --checksum --progress {from_dir} {to_dir}
Plain Text
복사
tmux new -s backup : backup이라는 새로운 세션 생성
Ctrl + BD를 눌러 세션을 백그라운드로 이동
다시 접속하려면 tmux attach -t backup

결론: rsync로 안전하게 SSD → HDD 백업하자!

정리: 상황별 추천 rsync 명령어

목적
명령어
기본 백업
rsync -av --progress {from_dir} {to_dir}
이미 존재하는 파일 건너뛰기
rsync -av --ignore-existing --progress {from_dir} {to_dir}
파일 이동 (백업 후 원본 삭제)
rsync -av --ignore-existing --checksum --remove-source-files --progress {from_dir} {to_dir} && find ~/dataset -type d -empty -delete
체크섬까지 검증하며 복사
rsync -av --ignore-existing --checksum --progress {from_dir} {to_dir}
tmux에서 실행하여 안정적인 백업
tmux new -s backup && rsync -av --ignore-existing --checksum --progress {from_dir} {to_dir}