Fullmoon System

Robocopy 백업 운영: 삭제 전파를 막고 복원 가능한 사본 만들기

AI Editter

Robocopy로 원본과 대상 폴더를 맞춰 놓았는데 원본에서 삭제한 파일이 대상에서도 사라졌다면, 사용한 옵션을 확인해야 합니다. /MIR는 미러링을 위한 옵션이며 대상의 추가 파일을 삭제할 수 있습니다. 원본의 현재 상태를 복제하는 것과 과거 파일을 복구할 수 있는 백업은 다릅니다.

이 글은 일반 업무 파일을 날짜별 새 폴더에 복사하고, 로그와 복원 시험으로 확인하는 방식입니다. 실행 중인 데이터베이스나 가상머신 디스크의 일관된 백업을 Robocopy만으로 해결하려는 절차는 아닙니다.

같은 폴더 덮어쓰기와 시점별 사본의 차이

방식삭제 파일 보존잘못 수정한 파일 복원저장 공간
같은 대상에 복사옵션에 따라 다름이전 내용이 덮일 수 있음비교적 적음
/MIR 미러링삭제가 전파될 수 있음별도 이력 없으면 어려움현재 상태 중심
실행마다 새 대상이전 사본에 남음해당 시점 사본에서 가능실행 횟수에 따라 증가
전용 버전 백업 도구정책에 따라 보존버전별 복원중복 제거 등 도구별 차이

매일 전체 사본을 만들면 공간이 빠르게 늘어납니다. 데이터가 커지면 버전 관리와 중복 제거를 지원하는 백업 도구가 더 적합할 수 있습니다. 다만 작은 규모에서도 “어제 파일을 되돌릴 수 있는가”는 반드시 시험해야 합니다.

실행 전 경로와 대상 장치를 확인

원본과 대상이 같은 경로이거나, 대상이 원본 아래에 있으면 잘못된 복사가 될 수 있습니다. 실제 해석된 절대 경로와 연결된 드라이브를 확인합니다. 외장 드라이브 문자가 바뀌는 환경이라면 볼륨 이름 등 추가 식별 기준도 사용합니다.

다음은 Windows PowerShell에서 사용할 예시입니다. 실제 경로를 확인한 뒤 수정합니다. 먼저 /L로 복사 예정 목록만 확인합니다.

robocopy 'D:\Work' 'E:\Backup\Work\2026-10-20-preview' /E /XJ /R:2 /W:2 /COPY:DAT /DCOPY:DAT /L

/E는 빈 폴더를 포함한 하위 폴더를, /XJ는 정션 제외를 뜻합니다. 이 예시는 데이터·속성·시간 중심 복사이며 소유자·감사 설정·모든 권한을 복제하는 설계는 아닙니다. 옵션 의미와 종료 코드는 Microsoft Robocopy 문서에서 확인합니다.

실행마다 새 폴더와 별도 로그를 만든다

아래는 지정한 백업 루트가 이미 존재하는 경우에 새 대상 폴더로 복사하는 예입니다. 운영 전 시험 폴더에서 확인합니다.

$backupSource = 'D:\Work'
$backupRoot = 'E:\Backup\Work'
if (-not (Test-Path -LiteralPath $backupSource -PathType Container)) {
    throw '원본 폴더를 찾을 수 없습니다.'
}
if (-not (Test-Path -LiteralPath $backupRoot -PathType Container)) {
    throw '백업 루트와 대상 드라이브를 확인하세요.'
}
$backupName = (Get-Date -Format 'yyyyMMdd-HHmmss') + '-' + [guid]::NewGuid().ToString('N')
$backupTarget = Join-Path $backupRoot $backupName
$backupLog = Join-Path $backupRoot ($backupName + '.log')
robocopy $backupSource $backupTarget /E /XJ /R:2 /W:2 /COPY:DAT /DCOPY:DAT "/LOG:$backupLog"
$copyResult = $LASTEXITCODE
if ($copyResult -ge 8) {
    throw "복사 실패가 있습니다. 종료 코드: $copyResult, 로그: $backupLog"
}
Write-Output "종료 코드 $copyResult. 로그와 복원 시험을 확인하세요: $backupTarget"

이 스크립트에는 자동 삭제가 없습니다. 경로 관계 검증과 대상 장치 식별은 실행 전에 별도로 수행해야 합니다. 백업 대상의 여유 공간과 로그 쓰기 권한도 확인합니다.

Robocopy는 0만 성공인 일반 명령과 종료 코드 해석이 다릅니다. 8 이상은 실패가 포함된 상태로 보고, 그보다 작더라도 복사·추가 파일·불일치 관련 내용을 로그에서 검토합니다. “프로세스가 끝남”을 “검증된 백업”으로 표현하지 않습니다.

로그에서 반드시 확인할 항목

실패 파일 수, 복사된 파일 수, 제외된 폴더, 재시도, 예상보다 적은 총 바이트를 확인합니다. 원본 경로가 잘못돼 빈 폴더를 복사한 경우에도 작업 자체는 종료될 수 있습니다.

잠긴 파일이나 작업 중 수정되는 파일은 별도 주의가 필요합니다. 관련 앱을 종료하거나 앱의 백업 기능을 사용합니다. 여러 파일이 동시에 맞아야 하는 업무 자료는 각각 복사됐다는 사실만으로 같은 시점의 일관성이 보장되지 않습니다.

삭제와 잘못된 수정의 복원 시험

시험 원본에 A.txt, B.txt를 만들고 첫 사본을 생성합니다. 이후 A의 내용을 바꾸고 B를 삭제한 뒤 두 번째 사본을 만듭니다. 원본을 건드리지 않는 별도 복원 폴더에 첫 사본의 A와 B를 복원합니다.

통과 기준은 첫 A의 원래 내용이 돌아오고 B가 존재하는 것입니다. 최신 사본이 잘 열리는 것만으로는 과거 복원 가능성을 확인할 수 없습니다. 중요한 파일은 원본과 복원본 해시를 비교하고 실제 앱으로 열어 봅니다.

보관과 삭제는 별도 정책으로 관리

몇 일치·몇 주치를 보관할지, 백업 장치를 얼마나 자주 분리할지, 실패 알림을 누가 볼지 정합니다. 항상 연결된 쓰기 가능한 백업은 악성코드나 계정 오용의 영향을 받을 수 있으므로 추가 보호 수단을 검토합니다.

오래된 사본을 지우기 전에 최소 한 개 이상의 최근 정상 사본과 복원 시험 기록이 있는지 확인합니다. 자동 정리 기능을 나중에 추가하더라도 대상 경로를 명확히 제한하고, 삭제 예정 목록을 먼저 확인할 수 있도록 만드는 것이 좋습니다.

관련 절차: NAS 랜섬웨어 대비 백업: 스냅샷·오프라인 보관·복원 시험