--- tags: [infra, nas, sync, runbook, 51123, companyx] --- # 51123 -> 내부 NAS 동기화 점검 런북 ## 상위 원칙 - [Infra Project Identity](../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md) - [Core Infrastructure Principles](../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md) - [Operational Guardrails](../00_Philosophy/02_GUARDRAILS/Operational_Guardrails.md) - 공통 작성 원칙: [0_VALUE Writing Principles](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/writing-principles.md) ## 관련 문서 - [Infrastructure Project Structure](./Infrastructure_Project_Structure.md) - [260307 NAS(192.168.0.101) SSOT 전환 및 CIFS 실마운트 복구](../journey/troubleshooting/260307_NAS_192_168_0_101_SSOT_전환_및_CIFS_실마운트_복구.md) - [260313 내부 NAS -> 외부 NAS 경로 교정 및 Go 프로브 검증](../journey/troubleshooting/260313_internal_nas_external_nas_route_fix_and_go_probe_verification.md) - [260313 내부 NAS 직접 Go 동기화 가능성 리서치](../journey/research/260313_internal_nas_direct_go_sync_feasibility_research.md) ## 목적 - 51123 서버에서 내부 NAS `192.168.0.101`에 접속해 Company X 외부 NAS 동기화 상태를 같은 절차로 반복 점검한다. - 이 문서는 사건 기록이 아니라, 운영자가 다시 실행할 수 있는 고정 절차를 남기는 런북이다. ## 적용 범위 - 점검 주체: 51123 서버 - 점검 대상: 내부 NAS `192.168.0.101` - 점검 주제: - NAS SSH 접속 가능 여부 - NAS 라우팅이 외부 NAS 경로 기준으로 유지되는지 - Go 테스트 결과가 남아 있는지 - 현재 운영 중인 fullscan / hierarchical 동기화가 실패 없이 끝났는지 ## SSOT 기준값 - 내부 NAS 호스트: `192.168.0.101` - NAS 공유 기준: `/mnt/nas` - 51123 런타임 기준 파일: - `/home/admin/workspace-config/runtime.env` - `/home/admin/workspace-config/secrets.env` - 23 서버 cron 기준: - `*/30 * * * * /home/admin/infra/scripts/bin/companyx_external_nas_sync_hierarchical_cron.sh` - `0 1 * * * /home/admin/infra/scripts/bin/companyx_external_nas_sync_fullscan_cron.sh` - NAS 로컬 동기화 로그 기준: - `~/workspace/.sync-logs/` - `~/workspace/.sync-logs-hierarchical/` - NAS 로컬 Go 테스트 흔적 기준: - `~/workspace/.sync-logs-go/` - `~/workspace/.sync-logs-go-real-20260313/` - `~/workspace/.sync-logs-go-live/` ## 사전 확인 ### 1. 51123 기준값 확인 ```bash grep -n '^NAS_' /home/admin/workspace-config/runtime.env /home/admin/workspace-config/secrets.env crontab -l ls -la /mnt/nas/workspace/.sync-logs /mnt/nas/workspace/.sync-logs-hierarchical ``` 확인 기준: - `NAS_HOST=192.168.0.101`이어야 한다. - 30분 계층형과 1일 1회 전수조사 cron이 보여야 한다. - `/mnt/nas/workspace/.sync-logs*` 아래 최신 summary 파일이 있어야 한다. ### 2. NAS SSH 포트 확인 ```bash nc -vz -w 3 192.168.0.101 22 ssh-keygen -F 192.168.0.101 ``` 확인 기준: - `22/tcp` 접속 성공 - known_hosts에 기존 호스트키가 있으면 재확인 없이 바로 접속 가능 ## 접속 절차 ### 1. 51123에서 내부 NAS SSH 접속 ```bash ssh -o StrictHostKeyChecking=no admin@192.168.0.101 ``` 설명: - 현재 운영 확인 기준 계정은 `admin`이다. - 비대화형 키 접속이 보장되지 않으므로, 필요 시 비밀번호 입력으로 접속한다. - 이 문서는 접속 방법을 남기는 문서이며, 비밀번호 값 자체는 문서에 적지 않는다. ### 2. NAS 기본 상태 확인 ```bash date hostname whoami ip route ``` 성공 기준: - `hostname`은 내부 NAS 장비명으로 응답해야 한다. - 라우팅에 `default via 192.168.0.1 dev eth1`가 있어야 한다. - 외부 NAS 호스트 라우트가 있으면 `112.218.113.4 via 192.168.0.1 dev eth1` 형태여야 한다. ## 점검 절차 ### 1. NAS 내부에서 동기화 관련 경로 찾기 ```bash find ~ -maxdepth 3 \( -name '*companyx*' -o -name '*probe*' -o -name '*.log' -o -path '*/log/*' \) 2>/dev/null | sort | tail -n 200 ``` 목적: - Go 프로브/테스트 바이너리와 로컬 sync 로그 경로가 실제로 남아 있는지 본다. ### 2. Go 테스트 결과 확인 ```bash for f in \ ~/workspace/.sync-logs-go/companyx_sync_summary_*.json \ ~/workspace/.sync-logs-go-real-20260313/companyx_sync_summary_*.json \ ~/workspace/.sync-logs-go-live/companyx_sync_summary_*.json do [ -f "$f" ] && echo "FILE=$f" && cat "$f" done ``` 판단 기준: - 샘플 다운로드 테스트는 `downloaded > 0`, `failed = 0`이면 1차 성공으로 본다. - 같은 경로 재실행 테스트는 `downloaded = 0`, `skipped > 0`, `failed = 0`이면 증분 판정이 동작한 것으로 본다. - 루트 기준 go-live 테스트는 `files_seen`과 `downloaded/skipped/failed`가 남아 있어야 한다. ### 3. 현재 fullscan 운영 결과 확인 ```bash cat ~/workspace/.sync-logs/companyx_sync_state.json ls -1t ~/workspace/.sync-logs/companyx_sync_summary_*.json | head -n 3 | while read f; do echo "FILE=$f" cat "$f" done ``` 판단 기준: - 최신 summary에 `finished_at`이 있어야 한다. - `failed = 0`이면 실패 없이 종료한 것이다. - `downloaded = 0`이어도 `skipped > 0`이면 정상 재검사일 수 있으므로 실패로 보지 않는다. - state 파일의 `updated_at`, `last_scanned_path`, `last_downloaded_path`가 있으면 상태 기록 기능은 정상으로 본다. ### 4. 현재 hierarchical 운영 결과 확인 ```bash cat ~/workspace/.sync-logs-hierarchical/companyx_sync_state.json ls -1t ~/workspace/.sync-logs-hierarchical/companyx_sync_summary_*.json | head -n 3 | while read f; do echo "FILE=$f" cat "$f" done ``` 판단 기준: - 최근 30분 실행 summary가 계속 생성돼야 한다. - `failed = 0`이면 정상 종료다. - `downloaded = 0`, `skipped > 0`은 캐시 기반 점검에서 흔한 정상 결과다. ### 5. 필요 시 결과물 실체 확인 ```bash find ~/workspace/companyx_go_sample_real_20260313 -type f | wc -l stat -c '%n %s %y' ~/workspace/companyx_go_sample_real_20260313/Thumbs.db find ~/workspace/6.Company\ X -type f | wc -l stat -c '%n %s %y' ~/workspace/6.Company\ X/Thumbs.db ``` 목적: - summary 숫자만이 아니라 실제 파일이 존재하는지 한 번 더 닫는다. ## 성공 판정 규칙 ### A. NAS 접속 성공 - 51123에서 NAS SSH 접속이 된다. - NAS 라우팅이 `eth1` 기준으로 유지된다. ### B. Go 테스트 성공 - 샘플 다운로드 summary에 `downloaded > 0`, `failed = 0` - 재실행 summary에 `downloaded = 0`, `skipped > 0`, `failed = 0` ### C. 운영 동기화 정상 - latest fullscan summary에 `finished_at` 존재, `failed = 0` - latest hierarchical summary가 최근 시각까지 누적되고 `failed = 0` ### D. 주의 - `downloaded = 0`만으로 실패라고 판단하지 않는다. - 반드시 `failed`, `finished_at`, `updated_at`, 실제 파일 존재 여부를 함께 본다. ## 점검 결과를 어디에 남길지 - 반복 절차 자체는 이 런북을 SSOT로 유지한다. - 특정 날짜의 실제 점검 결과는 아래 중 하나에 남긴다. - 장애/이상 징후가 있으면 `journey/troubleshooting/` - 문제 없이 끝난 점검이면 `journey/worklog/` ## 이 런북이 다루지 않는 것 - NAS 로컬에 Go 동기화 본체를 상시 배포하는 절차 - DSM 작업 스케줄러 또는 NAS cron에 실제 운영 스케줄을 심는 절차 - 외부 NAS 계정/비밀번호 같은 민감값 기록 ## 한 줄 결론 - 이 런북은 `51123 -> 내부 NAS -> Go 테스트/운영 sync 상태 확인`을 같은 기준으로 반복하기 위한 고정 운영 절차다.