특정 내부망 환경에만 PC가 총 2개가 있다고 가정합니다.
이때, 특정 해당 내부망 환경에 연결된 NAS가 있습니다.
PC-1, PC-2 라고 가정을 할 때, PC-2에 있는 특정한 폴더의 파일들을 NAS 쪽으로 업로드를 주기적으로 하고 싶습니다.
하지만 해당 환경은 “내부망” 입니다.
즉, 네트워크 없다는 가정으로 진행을 해야 합니다.
바로 세팅을 해보겠습니다.
우선은 내부망 IP를 이용해서 NAS에 한 번 접근을 해보겠습니다.
다음과 같이 IP 뒷부분에 5000포트를 통해 접근이 가능했습니다.
이러한 상황에서 미리 세팅을 해뒀던 계정을 통해 로그인이 가능합니다.
해당 과정이 진행이 되지 않는다면, 아마 제대로 된 IP를 모르거나 NAS가 꺼진 경우일 겁니다.
제가 원하는 방식은 로컬 PC의 특정 폴더가 있다면,
이 폴더에 있는 파일들을 주기적으로 NAS에 업로드 하는 방식입니다.
만약 로컬 폴더에서 파일을 삭제했다면, 해당 삭제된 파일이 NAS에는 반영이 되지 않았으면 좋겠습니다.
다만, 파일이 추가가 되거나 늘어나면 이는 NAS 쪽에 반영이 되기를 원합니다.
이를 위해서 NAS에 관리가 계정으로 로그인을 합니다.
이후, “제어판” >> “공유 폴더” 창에서 상단 탭에 있는 생성을 클릭합니다.
공유 폴더 생성하기를 클릭하면 다음과 같은 설정 팝업이 나타납니다.
위와 같이 꼭 필요한 부분은 이름이고, 위치에서 볼륨을 선택하면 됩니다.
이때 저는 “관리자 전용으로 액세스 제한” 체크박스를 해제할 겁니다.
이후 더한 고급 옵션은 선택하지 않고 그냥 건너뛰기로 폴더를 생성했습니다.
net use \\{nas ip} /user:{admin id} {admin password}
그럼 이제 로컬 PC에서 CMD를 켜봅시다.
관리자 권한으로 실행한 CMD 화면에서 위와 같은 명령어를 칠 겁니다.
내부망 NAS의 IP와, 로그인이 되는 계정의 ID, PW를 입력해주세요.
로그인이 잘 되었다면 성공 메시지가 출력이 될 겁니다.
net view \\{nas ip}
이후에는 위 명령어를 이용해서 내가 접근 가능한 공유 폴더를 쭉 보면 됩니다.
이곳에 방금 생성을 했던 공유 폴더가 보인다면 성공입니다.
# 로컬에 테스트 폴더 생성
mkdir C:\temp_test
echo "test file" > C:\temp_test\test.txt
이번에는 위 명령어를 차례대로 실행을 하겠습니다.
이렇게 하면 temp_test 라는 폴더가 내 C 드라이브 내부에 생성이 되며,
그 안에 test.txt 라는 파일이 생성이 되겠죠?
robocopy "C:\temp_test" "\\{nas ip}\{nas share folder}\test_copy" /E /R:3 /W:10
이후에 다음 명령어를 써줍니다.
이 명령어는 앞에 있는 경로인 원본을 뒤에 있는 경로인 타켓으로 업로드를 위한 명령어입니다.
/E 는 내부에 있는 하위 디렉토리를 모드 포함해서 업로드 하는 옵션입니다.
/R:3 는 재시도 횟수입니다. 복사를 실패하면 3번 정도 다시 시도를 합니다.
/W:10 은 업로드 실패시에 10초를 대기했다가 다시 시도를 하기 위해 설정하는 값입니다.
이외에도 아래와 같이 다양한 옵션들을 정리하겠습니다.
/S # 하위 디렉터리 포함 (빈 폴더 제외)
/E # 하위 디렉터리 포함 (빈 폴더 포함) ⭐
/MIR # 미러링 (대상을 원본과 완전히 동일하게)
/LOG:파일명 # 로그를 파일로 저장
/TEE # 화면과 로그파일에 동시 출력 ⭐
/V # 자세한 출력
/NP # 진행률 표시 안함
/XF *.tmp # .tmp 파일 제외
/XD temp # temp 폴더 제외
/MAX:1000000 # 1MB 이상 파일 제외
/MT:8 # 멀티스레드 (8개 스레드) - 속도 향상 ⭐
/Z # 재시작 가능한 모드 (큰 파일용)
/COPY:DAT # 데이터, 속성, 타임스탬프 복사
@echo off
chcp 65001 > nul
title GCG 폴더 백업 시스템
echo ===============================================
echo Local 폴더 NAS 백업 시작
echo ===============================================
echo.
:: 현재 날짜/시간 설정
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datetime=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
:: 로그 디렉터리 생성
if not exist "C:\Backup_Logs" mkdir "C:\Backup_Logs"
echo [%datetime%] 백업 작업 시작...
echo 📂 원본: C:\SRC {My SRC Folder}
echo 📂 대상: \\{my nas ip}\{nas shared folder}\{backup folder}
echo 📋 로그: C:\Backup_Logs\backup_%datetime%.log
echo.
:: 원본 폴더 존재 확인
if not exist "C:\SRC" (
echo ❌ 원본 폴더 C:\SRC 존재하지 않습니다!
echo [%datetime%] 오류: 원본 폴더 없음 >> "C:\Backup_Logs\error.log"
pause
exit /b 1
)
:: NAS 연결 확인 및 재연결
echo [%datetime%] NAS 연결 확인 중...
net use \\{my nas ip} /delete /y >nul 2>&1
net use \\{my nas ip} /user:{admin id} {admin pw} >nul 2>&1
if %errorlevel% neq 0 (
echo ❌ NAS 연결 실패!
echo [%datetime%] 오류: NAS 연결 실패 >> "C:\Backup_Logs\error.log"
pause
exit /b 1
)
echo ✅ NAS 연결 성공!
echo.
:: 백업 실행 (삭제 반영 안함 - /E 옵션만 사용)
echo [%datetime%] 파일 백업 중...
robocopy "C:\SRC" "\\{my nas ip}\{shared folder}\{backup folder}" /E /MT:4 /R:3 /W:10 /LOG:"C:\Backup_Logs\backup_%datetime%.log" /TEE /XO
:: 결과 확인
set backup_result=%errorlevel%
echo.
echo ===============================================
if %backup_result% leq 7 (
echo ✅ 백업 완료! ^(코드: %backup_result%^)
echo 📊 상세 결과:
if %backup_result%==0 echo → 복사할 새 파일 없음
if %backup_result%==1 echo → 새 파일이 복사됨
if %backup_result%==2 echo → 추가 파일/폴더 발견
if %backup_result%==3 echo → 파일 복사 + 추가 항목 있음
if %backup_result%==4 echo → 일부 파일 건너뜀
if %backup_result%==5 echo → 파일 복사 + 일부 건너뜀
if %backup_result%==6 echo → 추가 파일 + 일부 건너뜀
if %backup_result%==7 echo → 파일 복사 + 추가 + 건너뜀
echo [%datetime%] 백업 성공 ^(코드: %backup_result%^) >> "C:\Backup_Logs\success.log"
) else (
echo ❌ 백업 중 오류 발생! ^(코드: %backup_result%^)
echo [%datetime%] 백업 실패 ^(코드: %backup_result%^) >> "C:\Backup_Logs\error.log"
)
echo 📋 상세 로그: C:\Backup_Logs\backup_%datetime%.log
echo 백업 시간: %datetime%
echo ===============================================
:: 5초 후 자동 종료 (수동 실행시에만)
if "%1" neq "auto" (
echo.
echo 5초 후 자동으로 창이 닫힙니다...
timeout /t 5 /nobreak >nul
)
위와 같은 bat 파일을 생성했습니다.
이 bat 파일을 클릭하면 CMD 창이 열리면서 알아서 NAS 쪽으로 백업이 되는 것을 볼 수 있습니다.
그럼 이제 이 BAT 파일을 특정 경로에 넣어두고 다시 CMD를 켭니다.
schtasks /create /tn "24H_Backup" /tr "bat file path" /sc hourly /ru SYSTEM /f
위와 같은 명령어를 통해서 24시간 내내 1시간마다 백업을 돌릴 수 있습니다.
/sc hourly 가 매새간마다 실행을 하는 조건이고, /tr 뒤에 있는 경로의 파일을 실행합니다.
옵션들은 다음과 같습니다.
📌 Schedule (실행 주기)
📌 hourly = 매시간마다 실행
🔄 다른 옵션들:
- MINUTE: 분 단위
- HOURLY: 시간 단위
- DAILY: 일 단위
- WEEKLY: 주 단위
- MONTHLY: 월 단위
- ONCE: 한 번만
- ONSTART: 시스템 시작시
- ONLOGON: 로그온시
- ONIDLE: 유휴 상태시
/ru system 은 말 그대로 시스템 계정으로 해당 파일을 실행하는 것을 의미합니다.
/f 는 force 으로 강제로 실행함을 의미합니다.
robocopy "%SOURCE_DIR%" "%DEST_DIR%" /E /R:3 /W:5 /MT:4 /LOG+:"%LOG_FILE%" /TEE /NP
현재는 위와 같은 코드가 기존 bat 파일에 들어가 있습니다.
이는 현재 로컬 폴더에 있는 모든 파일을 그냥 덮어씌우는 느낌인데요.
이 방식을 Full Backup 이라고 합니다.
이 방식이 무식하지만 잃어버릴 걱정은 없겠으나, 효율을 생각해볼까요?
변경 사항이 있거나 추가된 데이터만을 백업하는 것이 좋을 겁니다.
이를 위해서 아래와 같은 사항들을 적용 가능합니다.
robocopy "%SOURCE_DIR%" "%DEST_DIR%" /E /XO /R:3 /W:5 /MT:4 /LOG+:"%LOG_FILE%" /TEE /NP
robocopy "%SOURCE_DIR%" "%DEST_DIR%" /E /XO /FFT /R:3 /W:5 /MT:4 /LOG+:"%LOG_FILE%" /TEE /NP
robocopy "%SOURCE_DIR%" "%DEST_DIR%" /E /XO /FFT /Z /R:3 /W:5 /MT:4 /LOG+:"%LOG_FILE%" /TEE /NP
위와 같이 다양한 옵션을 통해 딱 내가 원하는 파일의 경우만을 업로드 가능합니다.
/XO 가 들어가게 되면 변경 사항이 있는, 새로 추가된 데이터만 업로드가 가능합니다.
/FFT 가 들어가면 FAT 파일 시간 허용으로, 시간 비교 정확도가 향상이 됩니다.
/Z 는 재시작 가능하게 하는 모드로, 네트워크가 끊기는 것에 대비한 것입니다.
중요한 부분은 /XO 명령어가 되겠군요.
이상으로 내부망 PC에서 주기적으로 NAS에 파일들을 업로드할 수 있는 세팅 방법을 살펴봤습니다.
다음에도 또 비루한 주제를 가지고 포스팅을 해보겠습니다.
여기까지 봐주신 분들 정말 감사합니다.^^