Rediacc CLI 참조
개요
**Rediacc CLI** (`rdc`)는 자체 호스팅 인프라(머신, 저장소, 스토리지, 백업 등)를 관리하는 명령줄 인터페이스입니다.
설치
[Rediacc 릴리스 페이지](https://www.rediacc.com)에서 플랫폼에 맞는 최신 바이너리를 다운로드하거나 패키지 매니저를 통해 설치하세요:
# macOS / Linux
curl -fsSL https://www.rediacc.com | sh
# Or use the packaged binary directly
./rdc --help
전역 옵션
모든 명령에서 다음 전역 플래그를 사용할 수 있습니다:
| 플래그 | 설명 |
|---|---|
--output | 출력 형식 (table|json|yaml|csv) |
--config | 이 명령에 특정 구성 사용 |
--lang | 언어 재정의 ({{languages}}) |
--force | 확인 프롬프트 건너뜀 |
1. 구성 관리
설정 파일을 관리합니다: 생성, 전환, 편집, 상태 reconcile, 범용 기능(필드, 감사, SSH 키, 원격 동기화)
구성 파일은 연결 세부 정보 (API URL, 자격 증명, 기본 팀/리전/브리지)를 저장하여 환경 간 빠른 전환을 가능하게 합니다.
1.1 prune
~/.config/rediacc/<config>.json의 로컬 설정 파일에서 불필요한 항목을 제거합니다. 세 가지 버킷이 정리되며 모두 로컬에서만 처리됩니다 (SSH/renet 호출 없음): (1) 앵커 GUID/저장소/머신이 더 이상 활성 설정에 없는 ACME 인증서 캐시 항목; (2) 유예 기간이 만료된 보관된 저장소 (기본값 7일, defaults.pruneGraceDays 참조); (3) 끊어진 교차 참조 (machine→strategy, strategy→repo). 여전히 사용 중인 리소스, 자격증명, 스토리지 토큰, known-hosts는 변경되지 않습니다. 기본 동작은 변경 사항을 적용합니다. 미리 보기만 하려면 --dry-run을 사용하십시오.
rdc config prune [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--dry-run | 설정 파일을 수정하지 않고 제거될 항목을 미리 봅니다. 다른 prune 명령의 기본 비활성 의미론을 따릅니다. | 아니오 | - |
--certs-only | ACME 인증서 캐시 버킷만 처리합니다. 보관 삭제 및 교차 참조 정리를 건너뜁니다. --archives-only 및 --refs-only와 함께 사용할 수 없습니다. | 아니오 | - |
--archives-only | 만료된 보관 삭제만 처리합니다. 인증서 캐시 및 교차 참조 정리를 건너뜁니다. --certs-only 및 --refs-only와 함께 사용할 수 없습니다. | 아니오 | - |
--refs-only | 끊어진 교차 참조만 처리합니다 (machine→strategy, strategy→repo excludes/includes). 인증서 캐시 및 보관을 건너뜁니다. --certs-only 및 --archives-only와 함께 사용할 수 없습니다. | 아니오 | - |
--purge-archived | 유예 기간을 지난 것뿐 아니라 경과 기간과 무관하게 보관된 저장소를 모두 삭제합니다. 모든 보관 저장소에 대해 'rdc repo admin archive purge'를 실행하는 것과 동일합니다. 복원용으로 저장된 자격증명이 전혀 필요 없다고 확신할 때만 사용하세요 | 아니오 | - |
--orphan-repos | 어떤 머신에도 배치되지 않은 저장소 항목을 제거합니다. 각 항목에는 해당 저장소의 자격증명과 SSH 키가 들어 있어 복구할 수 없습니다. 먼저 'rdc config reconcile'을 실행하여 배치 정보가 머신 상태를 반영하도록 하세요. | 아니오 | - |
--grace-days <days> | 이번 실행에 대한 보관 유예 기간 (일 단위)을 재정의합니다. 설정의 defaults.pruneGraceDays로 대체되며 둘 다 설정되지 않은 경우 7을 사용합니다. | 아니오 | - |
1.2 init
새로운 이름 지정 설정 파일을 생성합니다
머신을 직접 추가할 수 있습니다:
rdc config init [name] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--ssh-key <path> | SSH 개인 키 경로 (예: ~/.ssh/id_rsa) | 아니오 | - |
--renet-path <path> | renet 바이너리 경로 (기본값: PATH의 renet) | 아니오 | - |
--master-password <password> | 마스터 비밀번호로 리소스를 암호화합니다 | 아니오 | - |
--server <url> | 계정 서버 URL | 아니오 | - |
1.3 list
모든 설정 파일을 나열합니다
rdc config list
1.4 show
현재 설정 세부 정보를 표시합니다
rdc config show [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--reveal | 민감한 값의 평문을 표시합니다 (대화형 전용) | 아니오 | - |
1.5 current
활성 설정을 표시합니다: 이름, 파일, 확인된 서버 및 채널, 토큰 상태
rdc config current
1.6 delete
설정 파일을 삭제합니다
rdc config delete <name>
1.7 set
기본값을 설정합니다 (team, region, bridge)
rdc config set <key> <value>
1.8 clear
기본값을 지웁니다 (전체 또는 특정 키)
rdc config clear [key]
1.9 recover
백업 (.bak) 파일에서 설정을 복원합니다
rdc config recover [name] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
1.10 ssh
SSH 키 설정을 관리합니다
set
현재 설정의 SSH 키를 설정합니다
rdc config ssh set [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--key <path> | SSH 개인 키 파일 경로 | 예 | - |
--embed | 경로 저장 대신 키 내용을 설정에 직접 포함합니다 | 아니오 | - |
show
현재 SSH 키 설정을 표시합니다
rdc config ssh show
remove
현재 설정에서 SSH 키를 제거합니다
rdc config ssh remove
1.11 remote
원격 설정 스토리지 연결을 관리합니다
enable
이 설정을 원격 암호화 스토리지에 연결합니다
rdc config remote enable [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--headless | 기기 코드 흐름을 사용합니다 (헤드리스 서버용) | 아니오 | - |
--password | 사전 프로비저닝된 비밀번호 슬롯으로 헤드리스 등록 (브라우저 불필요) | 아니오 | - |
--api-url <url> | 계정 서버 URL | 아니오 | - |
--force | 확인 없이 다른 로컬 내용을 서버 사본으로 교체합니다 | 아니오 | - |
disable
원격 스토리지 연결을 끊고 설정을 로컬에 저장합니다
rdc config remote disable
status
원격 연결 상태를 표시합니다
rdc config remote status
refresh
원격 스토리지에서 설정을 강제로 다시 가져옵니다
rdc config remote refresh
1.12 field
포인터 주소 지정 설정 필드 작업 (get/set/unset/rotate/list). RFC 6901 JSON 포인터 (예: /credentials/cfDnsApiToken).
get
JSON 포인터로 단일 설정 값을 읽습니다. 민감한 필드는 --reveal 없이 가려집니다 (인간 전용).
rdc config field get [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--pointer <pointer> | 필드에 대한 JSON 포인터 (예: /credentials/cfDnsApiToken) | 예 | - |
--reveal | 민감한 값의 평문을 표시합니다 (대화형 TTY 전용; 감사 기록됨) | 아니오 | - |
--digest | 값 대신 SHA-256 다이제스트를 출력합니다 (에이전트와 공유하기 안전합니다) | 아니오 | - |
set
JSON 포인터에서 설정 값을 씁니다. 민감한 경로는 --current가 필요합니다 (지식 게이트).
rdc config field set [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--pointer <pointer> | 필드에 대한 JSON 포인터 (예: /credentials/cfDnsApiToken) | 예 | - |
--new <value> | 새 값 (JSON처럼 보이면 JSON으로 파싱됩니다: {, [, ", true/false/null/숫자) | 예 | - |
--current <value> | 현재 평문 값 -- 민감한 경로 변경 시 필요합니다 (지식 게이트 증명) | 아니오 | - |
unset
JSON 포인터에서 설정 값을 삭제합니다. 민감한 경로는 --current가 필요합니다.
rdc config field unset [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--pointer <pointer> | 필드에 대한 JSON 포인터 (예: /credentials/cfDnsApiToken) | 예 | - |
--current <value> | 현재 평문 값 -- 민감한 경로 삭제 시 필요합니다 | 아니오 | - |
rotate
--current 없이 민감한 값을 교체합니다. 대화형 TTY 전용; 명시적으로 감사 기록됩니다.
rdc config field rotate [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--pointer <pointer> | 민감한 필드에 대한 JSON 포인터 (예: /credentials/cfDnsApiToken) | 예 | - |
--new <value> | 새 값 | 예 | - |
list
등록된 모든 민감도 포인터 템플릿과 해당 종류 및 commit/encrypt 정책을 나열합니다.
rdc config field list [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--sensitive | 민감한 (비공개) 템플릿만 표시합니다 | 아니오 | - |
1.13 edit
$EDITOR에서 활성 설정을 가려진 JSONC 프로젝션으로 엽니다. 인간 전용; 에이전트는 거부됩니다.
rdc config edit [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--reveal | 민감한 값의 평문을 표시합니다 (대화형 TTY 전용; 감사 기록됨) | 아니오 | - |
--dump | 현재 설정을 JSONC로 stdout에 출력합니다 (읽기 전용; 가려진 경우 에이전트에게 안전합니다) | 아니오 | - |
--apply <file> | 편집된 JSONC 파일을 적용합니다 ($EDITOR 실행을 건너뜁니다) | 아니오 | - |
--current-secrets <file> | --apply의 지식 게이트를 위한 pointer→이전 평문 매핑 JSON 파일 | 아니오 | - |
--editor <cmd> | 편집기 명령 재정의 (git 우선순위를 따름: 플래그 > $GIT_EDITOR > git config core.editor > $VISUAL > $EDITOR) | 아니오 | - |
1.14 audit
설정 감사 로그를 검사합니다 (~/.config/rediacc/audit.log.jsonl의 해시 체인 JSONL)
log
최근 감사 항목을 JSON으로 출력합니다
rdc config audit log [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--since <spec> | 이 시간 이후의 항목만 표시합니다 (예: '24h', '7d', ISO 타임스탬프) | 아니오 | - |
--path <glob> | JSON 포인터 글로브로 필터링합니다 (예: /credentials/*) | 아니오 | - |
--actor <kind> | 액터 종류로 필터링합니다 (human|agent) | 아니오 | - |
tail
새 감사 항목을 실시간으로 스트리밍합니다 (중지하려면 Ctrl+C)
rdc config audit tail
verify
모든 감사 항목에 걸친 SHA-256 해시 체인 무결성을 검증합니다
rdc config audit verify
1.15 reconcile
머신의 실제 상태를 기준으로 런타임 상태를 재구축합니다. 오래된 어태치 정보와 라우팅 데이터를 수정합니다
rdc config reconcile [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--machine <m...> | reconcile 대상을 이 머신들로 제한합니다 | 아니오 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
--accept-observed | 선언된 배치를 이미지가 실제로 있는 위치와 일치하도록 다시 씁니다. 단, 모호하지 않은 경우에만 적용됩니다 (정확히 하나의 머신에서 관찰된 경우). 중복은 계속 충돌로 남습니다. | 아니오 | - |
1.16 rotate-cek
조직의 설정 암호화 키를 교체합니다
rdc config rotate-cek [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--api-url <url> | 계정 서버 URL | 아니오 | - |
2. 데이터스토어 관리
저장소를 담는 이름 지정 스토리지 풀입니다. 데이터스토어는 이동 가능하며(머신에 어태치하고 다른 머신으로 옮길 수 있음) 단일 마운터입니다(항상 정확히 한 대의 머신만 보유). 각 머신의 암묵적 기본 데이터스토어는 여기서 관리하지 않습니다
2.1 resize
데이터스토어를 확장하거나 축소합니다. 이는 오프라인 작업이므로 내부의 저장소를 먼저 정지해야 합니다
rdc datastore resize <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--size <size> | 새 크기 (예: 200G) | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
2.2 fork
데이터스토어를 copy-on-write 방식으로 포크합니다. 포크는 즉시 완료되며 비용은 풀 크기에 비례해 늘지 않습니다. rbd 백엔드가 필요합니다: local 데이터스토어에는 블록 수준 클론이 없으므로, 내부의 저장소는 대신 reflink로 하나씩 포크합니다 (rdc repo fork)
rdc datastore fork <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--tag <tag> | 포크의 태그 (결과는 name:tag 형태) | 예 | - |
--attach-to <machine> | 생성 즉시 포크를 이 머신에 어태치합니다 (--writes 필요) | 아니오 | - |
--writes <disposition> | 포크의 쓰기 대상: local (즉시, 일시적) 또는 ceph (영구 클론) | 아니오 | - |
--cow-size <size> | --writes local용 오버레이 크기 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
2.3 status
데이터스토어 하나를 표시합니다: 백엔드, 어태치 상태, 사용량, 저장소, 스냅샷. 분리된 데이터스토어도 레코드는 표시됩니다
rdc datastore status <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
2.4 create
머신에 추가로 이름 지정 데이터스토어를 생성합니다. local 백엔드는 해당 머신 위의 파일 기반 풀이며 그 머신에 고정됩니다. rbd 백엔드는 Ceph에 존재하므로 같은 클러스터에 도달할 수 있는 모든 머신으로 이동할 수 있습니다. Kubernetes 세계의 데이터스토어로 만들려면 --cluster를 전달하세요. 이 역참조는 생성 시 고정됩니다
rdc datastore create <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 데이터스토어를 생성할 머신 | 예 | - |
--size <size> | 데이터스토어 크기 (예: 100G) | 예 | - |
--backend <type> | 스토리지 백엔드: local (파일 기반, 이 머신에 고정) 또는 rbd (Ceph, 이동 가능) | 아니오 | local |
--pool <name> | rbd 백엔드용 Ceph 풀 (기본값: rbd) | 아니오 | - |
--image <name> | rbd 백엔드용 RBD 이미지 이름 (기본값: 데이터스토어 이름) | 아니오 | - |
--cluster <name> | 이 데이터스토어가 속한 Kubernetes 클러스터. 지정하면 Kubernetes 저장소 전용, 지정하지 않으면 Docker 저장소 전용입니다. 생성 시 고정됩니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
2.5 list
이름 지정 데이터스토어 목록, 어태치 위치, 보유 중인 항목을 표시합니다
rdc datastore list [place]
2.6 attach
데이터스토어를 머신에 어태치합니다. 항상 정확히 한 대의 머신만 데이터스토어를 보유하므로, 다른 곳에 어태치하면 실질적으로 이동하게 됩니다: 기존 보유 머신이 먼저 반납하며, 인계에 실패하면 원래의 어태치가 그대로 유지됩니다. 포크는 쓰기 대상(--writes)을 지정해야 합니다
rdc datastore attach <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--to <machine> | 데이터스토어를 어태치할 머신 | 예 | - |
--writes <disposition> | 포크의 쓰기 대상: local (즉시, 일시적, 분리 시 소멸) 또는 ceph (풀 내 영구 클론). 포크의 경우 필수 | 아니오 | - |
--cow-size <size> | --writes local용 오버레이 크기 | 아니오 | - |
--no-auto | 부팅 시 이 데이터스토어를 자동으로 다시 어태치하지 않습니다 | 아니오 | - |
--force | 데이터스토어를 정상적으로 반납하지 않은 오래된 보유 머신을 펜싱합니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
2.7 detach
데이터스토어를 머신에서 분리합니다. 내부의 저장소는 먼저 정지됩니다. --writes local로 어태치된 포크는 오버레이를 되돌려 쓸 곳이 없으므로, 분리하면 오버레이가 폐기되며 --discard가 필요합니다
rdc datastore detach <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--discard | local 쓰기 포크와 그 오버레이를 폐기합니다. 데이터는 복구할 수 없습니다 | 아니오 | - |
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
2.8 snapshot
데이터스토어의 특정 시점 스냅샷을 생성하고 나열합니다. 스냅샷은 유휴 상태에서 비용이 전혀 들지 않으며 포크는 여기서 복제됩니다
create
데이터스토어의 특정 시점 스냅샷을 생성합니다. 아무것도 정지되지 않습니다. 이 순간은 크래시 컨시스턴트일 뿐 애플리케이션 컨시스턴트는 아닙니다. 특정 쓰기가 스냅샷에 반드시 포함되어야 한다면 먼저 동기화하세요.
rdc datastore snapshot create <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--snapshot <label> | 스냅샷 레이블 (기본값: UTC 타임스탬프) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
list
데이터스토어의 스냅샷을 나열합니다
rdc datastore snapshot list <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
2.9 delete
데이터스토어와 그 안의 모든 것을 파기합니다. 먼저 분리를 시도하며, 정상적으로 분리되지 않으면 마운트된 풀을 고아 상태로 만들지 않도록 삭제 자체가 실패합니다
rdc datastore delete <datastore> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
--force | 저장소가 아직 이를 참조하고 있어도 삭제합니다. 해당 데이터도 함께 사라집니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
3. 머신 관리
원격 머신 상태를 검사합니다: 시스템 리소스, 실행 중인 컨테이너, systemd 서비스, 배포된 저장소, 상태 진단. 읽기 전용 조회이며, 저장소를 수정하려면 `repo`를 사용하세요. 주요 하위 명령어: status (--system, --containers, --repositories, --services로 좁힐 수 있는 전체 상태), health, list, add, remove, setup, prune, provision, deprovision.
3.1 list
머신 목록을 나열합니다
rdc machine list [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--search <text> | {{field}}에서 검색 | 아니오 | - |
--sort <field> | 필드로 정렬 | 아니오 | - |
--desc | 내림차순 정렬 | 아니오 | - |
3.2 health
CI/CD 파이프라인을 위한 머신 상태를 확인합니다
health 명령은 시스템 메트릭, 컨테이너 상태, 서비스 안정성, 스토리지 정보를 출력합니다 -- CI/CD 파이프라인 검사에 유용합니다.
rdc machine health <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-t, --team <name> | 팀 이름 | 아니오 | - |
3.3 provision
OpenTofu를 사용하여 클라우드 제공자에서 새 머신을 프로비저닝합니다
rdc machine provision <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--provider <name> | 클라우드 제공자 이름 (machine provider add에서 설정) | 예 | - |
--region <region> | 기본 지역 재정의 | 아니오 | - |
--type <type> | 기본 인스턴스 유형 재정의 | 아니오 | - |
--image <image> | 기본 OS 이미지 재정의 | 아니오 | - |
--ssh-user <user> | 새 VM의 SSH 사용자 이름 (기본값: root) | 아니오 | - |
--base-domain <domain> | 인프라를 위한 기본 도메인 (예: example.com). --infra를 내포합니다 | 아니오 | - |
--no-infra | 인프라 설정 건너뜀 (프록시 + DNS) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
3.4 deprovision
클라우드 프로비저닝된 머신을 삭제하고 설정에서 제거합니다
rdc machine deprovision <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--force | 확인 프롬프트 건너뜀 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
3.5 prune
머신에서 고아 데이터스토어 리소스와 오래된 스냅샷을 제거합니다. 기본 실행은 renet 내부 데이터스토어 아티팩트(BTRFS 서브볼륨, 잠금 파일, 임시 파일)를 정리합니다. 아래의 선택적 플래그는 점진적으로 더 좁은 저장소 정리를 활성화합니다: --orphaned-repos는 로컬 CLI 설정만을 신호로 사용하고, --prune-unknown은 추가로 renet .interim/state 미러를 참조하여 다른 도구로 생성된 합법적인 포크가 로컬 설정에 없더라도 살아남을 수 있습니다. 두 삭제 경로 모두 마운트 안전 사전 확인을 실행합니다; --force-delete-mounted로 재정의할 수 있습니다.
rdc machine prune <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--dry-run | 변경 없이 제거될 항목을 표시합니다 | 아니오 | - |
--orphaned-repos | 로컬 CLI 설정에 없는 머신의 모든 저장소 이미지를 삭제합니다. 광범위함 - renet 미러가 올바르게 포크로 식별하더라도 로컬 설정 항목이 없는 다른 도구로 생성된 포크도 제거합니다. 미러를 존중하는 더 좁은 동작에는 --prune-unknown을 사용하세요. | 아니오 | - |
--prune-unknown | renet .interim/state 미러가 분류할 수 없는 저장소만 삭제합니다 (로컬 설정에 없고 포크 표시 미러도 없는 경우). --orphaned-repos보다 엄격하게 더 좁음: 미러가 식별한 포크 없음 설정은 미러가 식별할 때 보존됩니다. 이전 미러 레거시 고아 및 설정 항목이 삭제된 오래된 grand 모두 이 버킷에 해당합니다. | 아니오 | - |
--force-delete-mounted | 마운트 안전 사전 확인을 재정의하고 현재 마운트되어 있거나 실행 중인 Docker 컨테이너가 있는 저장소도 삭제합니다. --force(아카이브 유예 기간만 재정의)와는 별개입니다. --orphaned-repos와 --prune-unknown 모두에 적용됩니다. | 아니오 | - |
--force | 확인 프롬프트 건너뜀 | 아니오 | - |
--grace-days <days> | 최근 보관된 저장소의 유예 기간 (일 단위, 기본값: 7) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
3.6 add
현재 설정에 머신을 추가합니다. SSH 호스트 키를 자동으로 검사합니다. 추가 후 실행하십시오: config machine setup <name>
rdc machine add <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--ip <address> | 머신 IP 주소 또는 호스트명 | 예 | - |
--user <username> | SSH 사용자 이름 | 예 | - |
--port <port> | SSH 포트 | 아니오 | 22 |
3.7 infra
인프라 설정을 관리합니다 (프록시, DNS, 인증서)
cert
캐시된 TLS 인증서를 관리합니다
인증서 캐시를 제거합니다
rdc machine infra cert clear
머신에서 TLS 인증서를 다운로드하고 캐시합니다
rdc machine infra cert pull <machine> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--no-prune | 오래된 네트워크 ID 인증서 정리를 건너뜁니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
캐시된 TLS 인증서를 머신에 업로드합니다
rdc machine infra cert push <machine> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
캐시된 인증서 목록을 표시합니다
rdc machine infra cert status
push
인프라 설정을 머신에 푸시합니다 (Traefik 프록시, 라우터, Cloudflare DNS). 먼저 'machine infra set <machine>'을 실행하십시오
rdc machine infra push <machine> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
set
머신에 대한 인프라 설정을 지정합니다 (머신별: IP, 도메인, 포트; 공유: 인증서 이메일, CF DNS 토큰)
rdc machine infra set <machine> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--public-ipv4 <ip> | 공용 IPv4 주소 (머신별) | 아니오 | - |
--public-ipv6 <ip> | 공용 IPv6 주소 (머신별) | 아니오 | - |
--base-domain <domain> | 애플리케이션의 기본 도메인 (머신별) | 아니오 | - |
--cert-email <email> | TLS 인증서 알림을 위한 이메일 (머신 간 공유) | 아니오 | - |
--cf-dns-token <token> | ACME DNS-01 챌린지를 위한 Cloudflare DNS API 토큰 (머신 간 공유) | 아니오 | - |
--tcp-ports <ports> | 포워드할 TCP 포트 (쉼표로 구분, 예: 25,143,465) | 아니오 | - |
--udp-ports <ports> | 포워드할 UDP 포트 (쉼표로 구분, 예: 53) | 아니오 | - |
show
머신의 인프라 설정을 표시합니다
rdc machine infra show <machine>
3.8 provider
자동화된 머신 프로비저닝을 위한 클라우드 공급자를 관리합니다
add
클라우드 공급자를 추가합니다
rdc machine provider add <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--provider <source> | 알려진 공급자 소스 (예: linode/linode, hetznercloud/hcloud) | 아니오 | - |
--source <source> | 커스텀 OpenTofu 공급자 소스 (예: vultr/vultr) | 아니오 | - |
--token <token> | 클라우드 공급자의 API 토큰 | 예 | - |
--region <region> | 새 머신의 기본 지역 | 아니오 | - |
--type <type> | 기본 인스턴스 유형/크기 | 아니오 | - |
--image <image> | 기본 OS 이미지 | 아니오 | - |
--ssh-user <user> | 새 VM의 SSH 사용자 이름 (기본값: root) | 아니오 | - |
--resource <type> | 커스텀: VM의 OpenTofu 리소스 유형 | 아니오 | - |
--label-attr <attr> | 커스텀: VM 레이블의 속성 이름 | 아니오 | - |
--region-attr <attr> | 커스텀: 지역의 속성 이름 | 아니오 | - |
--size-attr <attr> | 커스텀: 인스턴스 유형의 속성 이름 | 아니오 | - |
--image-attr <attr> | 커스텀: OS 이미지의 속성 이름 | 아니오 | - |
--ipv4-output <attr> | 커스텀: IPv4 주소의 출력 속성 | 아니오 | - |
--ipv6-output <attr> | 커스텀: IPv6 주소의 출력 속성 | 아니오 | - |
--ssh-key-attr <attr> | 커스텀: SSH 키의 속성 이름 | 아니오 | - |
--ssh-key-format <format> | 커스텀: SSH 키 형식 (inline_list 또는 resource_id) | 아니오 | - |
--ssh-key-resource <type> | 커스텀: SSH 키의 OpenTofu 리소스 유형 | 아니오 | - |
list
설정된 클라우드 공급자를 나열합니다
rdc machine provider list
remove
클라우드 공급자 설정을 제거합니다
rdc machine provider remove <name>
3.9 remove
현재 설정에서 머신을 제거합니다
rdc machine remove <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
--force | 저장소가 아직 배치되어 있어도 머신을 제거하며, 그 배치는 댕글링 상태로 남습니다. | 아니오 | - |
3.10 scan-keys
현재 설정의 머신에 대한 SSH 호스트 키를 검사합니다
rdc machine scan-keys [name]
3.11 setup
저장소를 위한 원격 머신을 프로비저닝합니다 (renet 설치, Docker 구성, BTRFS 데이터스토어). 멱등성. 'config machine add' 후 'repo create' 전에 필요합니다
rdc machine setup <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--datastore-path <path> | 원격 머신의 데이터스토어 경로 | 아니오 | /mnt/rediacc |
--datastore-size <size> | 데이터스토어 크기 (예: 95%, 100G) | 아니오 | 95% |
--debug | 디버그 출력 활성화 | 아니오 | - |
3.12 status
전체 머신 상태를 표시합니다 (인프라, 시스템, 이름/guid 포함 저장소, repository/repository_guid/domain/autoRoute 포함 컨테이너, repository/repository_guid 포함 서비스)
rdc machine status [name] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
--system | 시스템 정보만 포함 | 아니오 | - |
--repositories | 저장소만 포함 | 아니오 | - |
--containers | 컨테이너만 포함 | 아니오 | - |
--services | 서비스만 포함 | 아니오 | - |
--network | 네트워크 인터페이스만 포함 | 아니오 | - |
--block-devices | 블록 장치만 포함 | 아니오 | - |
--licenses | 저장소 라이선스 상태 포함 | 아니오 | - |
--storage-health | 저장소별 BTRFS 단편화 및 reflink 절감량 표시 | 아니오 | - |
--datastores | 어태치된 데이터스토어를 표시합니다 (마운트, 어태치, 사용량) | 아니오 | - |
--health-check | 상태 확인 모드 - 비정상 컨테이너가 있으면 종료 코드 2로 종료 | 아니오 | - |
--stability-check | 안정성 확인 모드 - 실패하거나 재시작 중인 서비스가 있으면 종료 코드 2로 종료 | 아니오 | - |
--search <text> | 이름으로 저장소 필터링 | 아니오 | - |
--sync-certs | 쿼리 후 머신에서 ACME 인증서 캐시도 가져오기 | 아니오 | - |
--strict | 컨테이너가 상태 드리프트 임계값을 초과한 경우 비정상 종료 (코드 2) | 아니오 | - |
4. 클러스터 관리
클러스터를 프로비저닝하고 관리합니다: 프라이빗 네트워크상의 노드 풀(ceph, k8s-server, k8s-agent, hyperconverged)로 이루어진 이름 있는 집합입니다. 풀 멤버는 실제 머신으로 구체화되므로 모든 -m 명령이 그대로 작동합니다.
4.1 create
클러스터를 선언하고 프로비저닝합니다: 머신, Ceph 풀, Kubernetes. --provider와 --pool을 전달하면 한 단계로 선언할 수 있습니다. 인자 없이 create를 실행하면 이미 선언된 클러스터를 프로비저닝합니다
rdc cluster create <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--provider <provider> | 공급자: cloudProviders 키 또는 'kvm' | 아니오 | - |
--pool <spec...> | 풀 사양 name:role:count[:size] (role: ceph|k8s-server|k8s-agent|hyperconverged) | 아니오 | - |
--declare-only | 프로비저닝 없이 클러스터를 설정에 기록합니다 | 아니오 | - |
--network-cidr <cidr> | 프라이빗 네트워크 CIDR (예: 10.0.0.0/24) | 아니오 | - |
--network-primitive <primitive> | 네트워크 프리미티브 (예: vlan, vpc, network) | 아니오 | - |
--control-node <machine> | 명시적 컨트롤 노드 머신 (기본값: 첫 번째 k8s-server 멤버) | 아니오 | - |
--net-name <name> | KVM: 이 클러스터의 libvirt 네트워크 (예: renet12) | 아니오 | - |
--net-base <prefix> | KVM: 네트워크 접두사, 처음 세 옥텟 (예: 192.168.112) | 아니오 | - |
--net-offset <n> | KVM: 주소를 도출할 때 각 VM id에 더해지는 오프셋 | 아니오 | - |
--control-id <n> | KVM: 컨트롤 및 레지스트리 노드의 VM id (기본값: 1) | 아니오 | - |
--docker-registry <endpoint> | KVM: 이 클러스터의 VM 내 Docker 레지스트리 엔드포인트 | 아니오 | - |
--ssh-user <user> | 프로비저닝된 멤버의 SSH 사용자 | 아니오 | - |
--base-domain <domain> | 클러스터 공개 DNS용 기본 도메인 (지정하지 않으면 형제 머신에서 상속) | 아니오 | - |
--control-ds-size <size> | 앵커 컨트롤 데이터스토어 크기 (기본값 10G) | 아니오 | - |
--control-ds-backend <backend> | 앵커 컨트롤 데이터스토어 백엔드: local | ceph (기본값: 클러스터에 ceph가 있으면 ceph, 없으면 local) | 아니오 | - |
--control-ds-pool <pool> | 앵커 컨트롤 데이터스토어용 Ceph rbd 풀 (ceph 백엔드) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.2 status
모든 클러스터를 나열하거나, --name으로 특정 클러스터의 전체 설정을 표시합니다.
rdc cluster status [cluster]
4.3 scale
풀의 멤버 수를 변경합니다(머신 추가/제거, 노드 조인/드레인). k8s-agent 풀은 제자리에서 크기가 조정되며, ceph 풀 확장은 cephadm을 통해 직접 수행합니다.
rdc cluster scale <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--pool <pool> | 풀 이름 | 예 | - |
--count <n> | 원하는 멤버 수 | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.4 destroy
프로비저닝된 멤버를 해체하고 클러스터와 그 머신을 설정에서 제거합니다.
rdc cluster destroy <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--force | 확인을 건너뛰고 해체 중 오류가 발생해도 계속 진행합니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.5 kubeconfig
SSH를 통해 클러스터 컨트롤 노드에서 kubeconfig를 가져와 kubectl용으로 로컬에 캐시합니다(0600).
rdc cluster kubeconfig <cluster>
4.6 fork
클러스터 전체를 하위 저장소의 데이터까지 포함해 새 클러스터로 복제합니다: 클러스터 이미지와 PV 이미지의 copy-on-write를 조율한 뒤 노드 identity를 다시 써서 포크가 새 주소로 기동하도록 합니다. 원본 클러스터는 계속 실행됩니다.
rdc cluster fork <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--tag <tag> | 포크 태그 | 예 | - |
--to <dest-cluster> | 포크를 호스팅할 노드를 가진 대상 클러스터 (해당 컨트롤 노드와 에이전트). 클러스터는 자기 자신의 머신으로는 포크할 수 없습니다 (두 개의 k3s가 하나의 호스트 네트워크 네임스페이스를 공유할 수 없기 때문) | 예 | - |
--writes <disposition> | 포크 쓰기 방식: local (일시적 dm-COW 오버레이, Ceph 사용량 0) | ceph (영구 클론). 기본값 local | 아니오 | - |
--up | 포크된 저장소를 기동하고 포크가 부팅된 후 클러스터 상태를 게이트로 확인합니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.7 migrate
클러스터 전체를 하위 저장소의 데이터까지 포함해 다른 머신이나 데이터센터로 짧은 컷오버로 이동합니다(실행 중 핫 프리카피 후 대상에서 정지 및 재시작).
rdc cluster migrate <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--to <dest-cluster> | 대상 | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.8 join
기존에 등록된 머신을 클러스터의 Kubernetes 에이전트 노드로 편입시킵니다. 앵커 구성 및 재참여 때와 동일한, CA에서 파생된 join 토큰을 사용합니다.
rdc cluster join <machine> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--cluster <name> | 머신을 가입시킬 클러스터 | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.9 evict
노드를 드레인하고 해당 Node 오브젝트를 삭제한 뒤 클러스터 멤버십을 해제합니다. 클러스터는 머신으로부터 자동으로 결정됩니다. 데이터스토어를 아직 마운트 중인 머신은 거부됩니다.
rdc cluster evict <machine> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--force | 노드가 이미 죽은 경우 드레인을 건너뜁니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.10 rehearse
릴리스/업그레이드를 리허설합니다: 클러스터를 일회용 임시 포크로 대상에 포크하고(writes=local, 시크릿이 없는 role=rehearsal), 기동한 뒤 상태를 게이트로 확인하고 나서 폐기합니다. 원본 클러스터에는 전혀 손대지 않습니다.
rdc cluster rehearse <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--on <dest-cluster> | 일회용 리허설을 부팅할 대상 클러스터 | 예 | - |
--tag <tag> | 리허설 포크에 사용할 태그 (선택 사항, 기본값은 타임스탬프) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
4.11 snapshot
클러스터 전체의 특정 시점 스냅샷입니다. 클러스터가 소유한 모든 rbd 백엔드 데이터스토어에 걸친 크래시 컨시스턴트한 단일 순간을 Ceph의 그룹 스냅샷을 통해 확보합니다: 아무것도 정지되지 않고 클러스터는 전혀 알아채지 못합니다. local 백엔드 데이터스토어는 블록 수준의 그룹 프리미티브가 없어 이 순간의 범위 밖에 있으며 그렇게 보고됩니다. 이 순간은 크래시 컨시스턴트일 뿐 애플리케이션 컨시스턴트는 아닙니다. 특정 쓰기가 스냅샷에 반드시 포함되어야 한다면 먼저 동기화하세요.
create
클러스터 내 모든 rbd 백엔드 데이터스토어를 단 하나의 순간에 스냅샷합니다. 아무것도 정지되지 않습니다. 클러스터 내 local 백엔드 데이터스토어는 이 순간의 범위 밖으로 표시되며 스냅샷에 포함되지 않습니다. 이 순간은 크래시 컨시스턴트일 뿐 애플리케이션 컨시스턴트는 아닙니다. 특정 쓰기가 스냅샷에 반드시 포함되어야 한다면 먼저 동기화하세요.
rdc cluster snapshot create <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--snapshot <label> | 스냅샷 레이블 (기본값: UTC 타임스탬프) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
list
클러스터의 그룹 스냅샷을 나열합니다
rdc cluster snapshot list <cluster> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
5. MCP 서버
AI 에이전트와의 통합을 위해 CLI를 Model Context Protocol (MCP) 서버로 노출합니다. 서버는 CLI 명령어를 구조화된 JSON 입출력을 갖는 MCP 도구로 래핑합니다. 주요 하위 명령어: serve (stdio 기반 MCP 서버 시작).
5.1 serve
MCP 서버 시작 (stdio 전송)
rdc mcp serve [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--config <name> | 모든 명령어에 사용할 설정 이름 | 아니오 | - |
--timeout <ms> | 기본 명령어 타임아웃 (밀리초) | 아니오 | 120000 |
6. 저장소 라이프사이클
머신에서 암호화된 저장소를 배포하고 관리합니다. 주요 하위 명령어: create, up (배포), down (중지), fork (즉시 CoW 클론), delete, push/pull (백업), sync (파일 전송). 수명 주기: repo create → repo up → repo down. 아키텍처, 라우팅, 환경 변수 세부 정보는 rdc --help의 핵심 개념을 참조하십시오.
6.1 up
저장소를 배포하거나 업데이트합니다 (마운트하고, renet compose를 호출하는 Rediaccfile의 up을 실행). 머신은 참조의 배치에서 자동으로 결정됩니다. 프록시 라우트는 배포 후 약 3초 후에 활성화됩니다. 완료 시 HTTP로 노출된 서비스(rediacc.service_port 레이블)의 URL 패턴을 출력합니다. 최초 배포와 포크는 자동으로 마운트됩니다. CRIU 체크포인트 복원은 자동으로 감지됩니다. 새로 시작하려면 --skip-checkpoint를 사용하세요. 머신의 모든 저장소를 배포하려면 --all --machine <m>을 사용하세요
rdc repo up [ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--no-start | up() 단계를 실행하지 않고 저장소를 마운트하고 준비만 합니다 (폐지된 'repo mount'를 흡수: LUKS 오픈, 클러스터 저장소의 경우 PV 생성) | 아니오 | - |
--skip-checkpoint | 체크포인트 데이터가 있더라도 CRIU 체크포인트 복원을 건너뜁니다 (새로 시작 강제) | 아니오 | - |
--tls | 이 저장소에 대한 전용 TLS 인증서를 요청합니다 (포크는 기본적으로 공유 머신 인증서를 사용) | 아니오 | - |
--no-wait | 컨테이너가 시작되면 바로 반환됩니다. 상태 확인은 백그라운드에서 계속됩니다 | 아니오 | - |
--all | --machine을 홈으로 하는 모든 저장소를 배포합니다 (일괄 형식) | 아니오 | - |
-m, --machine <name> | --all과 함께 사용: 일괄 작업 대상 저장소를 가진 머신 | 아니오 | - |
--include-forks | 포크된 저장소도 마운트 및 시작합니다 | 아니오 | - |
--parallel | 저장소를 동시에 시작합니다 | 아니오 | - |
--concurrency <n> | 최대 동시 저장소 수 (기본값: 3) | 아니오 | 3 |
-y, --yes | 일괄 작업에 대한 확인을 건너뜁니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
6.2 down
저장소 Docker 컨테이너를 정지합니다 (renet compose를 통해 Rediaccfile의 down 실행). 머신은 참조의 배치에서 자동으로 결정됩니다. 암호화 볼륨은 마운트 해제하지 않습니다. 저장소는 마운트된 상태를 유지하며 'repo up'으로 다시 시작할 수 있습니다. 정지 후 LUKS 컨테이너도 닫으려면 --unmount를 사용하세요 (폐지된 'repo unmount'를 흡수). 정지 전 CRIU 프로세스 상태를 저장하려면 --checkpoint를 사용하세요 (다음 'repo up'에서 자동 복원). 머신의 모든 저장소를 정지하려면 --all --machine <m>을 사용하세요
rdc repo down [ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--unmount | 정지 후 마운트도 해제합니다 (LUKS 컨테이너 닫기). 'repo resize' 전이나 볼륨을 완전히 보호하려면 필요 | 아니오 | - |
--checkpoint | 중지 전에 CRIU 체크포인트를 생성합니다 ('repo up'을 통해 나중에 복원하기 위해 프로세스 메모리 상태를 저장합니다) | 아니오 | - |
--all | --machine을 홈으로 하는 모든 저장소를 정지합니다 (일괄 형식) | 아니오 | - |
-m, --machine <name> | --all과 함께 사용: 일괄 작업 대상 저장소를 가진 머신 | 아니오 | - |
--parallel | 저장소를 동시에 시작합니다 | 아니오 | - |
--concurrency <n> | 최대 동시 저장소 수 (기본값: 3) | 아니오 | 3 |
-y, --yes | 일괄 작업에 대한 확인을 건너뜁니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
6.3 status
저장소 상태를 가져옵니다 (마운트 상태, Docker 데몬 실행 여부, 컨테이너 수, 디스크 사용량)
rdc repo status <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.4 cat
저장소 내 파일의 제한된 범위를 읽어 stdout에 씁니다 (서버 측에서 범위 제한; 진단 정보는 stderr로 출력)
rdc repo cat <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--remote-file <path> | 읽을 파일 경로 (저장소 마운트 루트 기준 상대 경로) | 예 | - |
--max-bytes <n> | 읽고 출력할 최대 바이트 수 (기본값 1 MiB, 최대 한도 50 MiB) | 아니오 | - |
--offset <n> | 읽기 시작할 바이트 오프셋 | 아니오 | - |
--head <lines> | 처음 N줄만 출력합니다 (바이트 범위와 함께 사용할 수 없음) | 아니오 | - |
--tail <lines> | 마지막 N줄만 출력합니다 (바이트 범위와 함께 사용할 수 없음) | 아니오 | - |
--stat | 크기, 유형, 수정 시간만 출력하고 내용은 읽지 않습니다 | 아니오 | - |
--force-binary | 바이너리(NUL 포함) 콘텐츠 읽기를 허용합니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.5 diff
복사-온-라이트로 포크된 두 저장소 간의 git 스타일 파일 단위 비교. 추가, 수정, 삭제, 이름 변경된 파일을 보고합니다. --name(대상/새 쪽)으로 지정된 저장소를 로컬 구성에서 해석된 부모 또는 명시적 --base 저장소(기준/이전 쪽)와 비교합니다. 메타데이터만 사용하고 크기에 독립적: 암호화된 LUKS 이미지를 복호화하지 않고 블록 수준에서 비교하므로 1GB 저장소와 100GB 저장소가 같은 밀리초 안에 비교됩니다.
rdc repo diff <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--base <ref> | 비교할 저장소 (기준/이전 쪽); 기본값은 --name 의 부모 | 아니오 | - |
--name-only | 변경된 파일 경로만 한 줄에 하나씩 출력 (상태 문자 없음) | 아니오 | - |
--stat | 파일별 변경 규모(바이트 및 블록 델타)와 합계 표시 | 아니오 | - |
--content [path] | 단일 파일에 대한 통합 텍스트 비교 표시 (파일 경로 필요) | 아니오 | - |
--fast | 블록 필터를 신뢰하고 콘텐츠 해시 확인 건너뛰기 (수정 항목이 과다 보고될 수 있음) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.6 list
머신의 저장소를 나열합니다
rdc repo list [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 아니오 | - |
--datastore <name> | 이 데이터스토어 안의 저장소를 나열합니다 (현재 보유 중인 머신으로 자동 해석됨) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.7 create
새 저장소를 생성합니다. 홈을 한 번만 지정하세요: 머신 또는 데이터스토어
rdc repo create <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 아니오 | - |
--datastore <name> | 저장소를 담을 이름 지정 데이터스토어 (Docker 계층화 또는 클러스터 형식) | 아니오 | - |
--size <size> | 저장소 크기 (예: 10G, 100G, 1T) | 아니오 | - |
--no-docker | 생성 후 Docker 데몬 시작을 건너뜁니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.8 delete
저장소와 그 데이터를 삭제합니다. 설정 항목은 유지됩니다. --archive-config를 사용하면 자격증명을 deletedRepositories로 옮겨 'repo admin archive restore'로 복구할 수 있습니다. 위치 인자로 <ref>를 받습니다. 이름만 전달하면 그랜드 계열로 해석되지만, 같은 기본 이름을 여러 저장소가 공유하면 거부되므로 포크를 지정하려면 이름:태그를 전달하세요
rdc repo delete <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--archive-config | 설정 항목을 나중에 복구할 수 있도록 deletedRepositories로 이동합니다 | 아니오 | - |
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
6.9 commit
마운트된 작업 fork의 현재 상태를 새로운 불변 commit으로 고정합니다(git과 유사). commit은 메시지, 작성자, 타임스탬프, 부모 정보를 볼륨 내부에 기록하므로 push 시 함께 이동하며, 읽기 전용으로 표시되어 마운트를 거부합니다. 작업 fork는 git이 작업 트리를 그대로 두는 것처럼 변경 없이 유지됩니다. 쓰기 가능한 사본을 얻으려면 'rdc repo checkout'으로 commit을 체크아웃하세요.
rdc repo commit <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--message <msg> | commit 메시지 | 예 | - |
--author <author> | commit 작성자 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.10 branch
작업 fork의 현재 commit(팁)을 가리키는 이름 있는 branch 참조를 생성합니다. branch 참조는 CLI 설정에 저장됩니다(머신 = 오브젝트 저장소, 설정 = 참조 저장소).
rdc repo branch <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--branch <branch> | 새 브랜치의 이름 | 예 | - |
6.11 checkout
불변 commit(또는 branch 팁)을 새로운 쓰기 가능한 작업 fork로 reflink 복제하고 HEAD가 이를 가리키도록 합니다. 거의 즉각적이며 크기와 무관하게 일정한 시간이 소요됩니다(BTRFS reflink).
rdc repo checkout <commit-or-branch-ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--tag <name> | 새 쓰기 가능한 작업 fork의 이름 | 예 | - |
--from <workingFork> | 위치 인자 <commit-or-branch-ref>를 이 작업 포크의 브랜치 이름으로 확인 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.12 log
작업 fork의 현재 commit(또는 commit 참조)에서 도달 가능한 commit 이력을 출력하며, 'rdc repo commit'이 기록한 부모 체인을 따라갑니다. 볼륨 외부의 미러를 읽으므로 어떤 commit도 잠금 해제되지 않습니다.
rdc repo log <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
6.13 merge
소스 commit 또는 fork를 대상 작업 fork로 merge합니다. 라이브 대상은 제자리에서 변경되지 않으며, 결과는 reflink 복제본에 만들어진 뒤 원자적으로 교체됩니다. 마운트되었거나 실행 중인 대상은 --force 없이는 거부되며, --force를 사용하면 먼저 대상을 깔끔하게 정지시킵니다. --resolve가 없으면 전체 이미지에 대한 take-theirs 방식입니다(대상이 소스가 됩니다). --resolve ours|theirs를 사용하면 공통 조상에 대한 파일별 3-way merge가 수행되어, 각 측의 고유한 변경 사항을 가져오고 양측 충돌은 플래그에 따라 ours 또는 theirs로 해결합니다.
rdc repo merge <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--from <source> | merge할 소스 commit 또는 fork | 예 | - |
--force | 마운트/실행 중인 대상을 먼저 정지시킨 뒤 merge합니다(실행 중인 마운트는 절대 변경하지 않음) | 아니오 | - |
| `—resolve <ours | theirs>` | 3-way merge의 파일별 충돌 해결: 'ours'는 대상의 버전을 유지하고, 'theirs'는 소스의 버전을 가져옵니다. 전체 이미지 fast-forward(take-theirs)에는 생략하세요. | 아니오 |
--base <guid> | 3-way merge의 공통 조상 commit GUID(--resolve와 함께 사용). 기본값은 소스 commit의 부모 또는 대상의 현재 commit입니다. | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.14 gc
어떤 branch나 HEAD에서도 도달할 수 없는 머신의 불변 commit 객체를 삭제합니다(도달성 GC). 머신은 객체 저장소이고, CLI 구성은 참조 저장소입니다. 기본은 dry-run이며, 삭제하려면 --apply를 전달하세요. 마운트된 객체나 작업 fork는 절대 건드리지 않습니다.
rdc repo gc [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
--apply | 도달 불가능한 commit을 실제로 삭제합니다(기본값은 미리보기 dry-run) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.15 fork
저장소의 CoW(Copy-on-Write) 포크를 생성합니다. 포크는 저장소 크기와 무관하게 거의 즉시, 일정한 시간에 완료됩니다. BTRFS reflink가 기반 이미지를 복제하므로 100 GB 저장소와 1 GB 저장소가 같은 몇 초 안에 포크됩니다. 포크는 새 GUID, networkId, IP 범위, 자동 라우트 도메인({service}-fork-{tag}.{repo}.{machine}.{baseDomain})을 가지며 완전히 독립된 사본입니다. 온라인 포크를 지원하므로 상위 저장소는 계속 실행된 상태로 두어도 됩니다. 포크는 상위의 암호화 자격증명을 자동으로 상속합니다. --checkpoint를 사용하면 포크 전에 CRIU 프로세스 상태를 캡처하며, 포크는 첫 번째 'repo up' 시 자동으로 복원됩니다(메모리 내 상태 보존). 크로스 머신 포크: 먼저 로컬에서 포크한 뒤 전송하세요: (1) rdc repo fork <parent-ref> --tag <name>, (2) rdc repo push <fork-ref> --to <target-machine>, (3) rdc backup restore <fork-ref> --as <fork-name> -m <target-machine> --up. 경고: 포크를 위해 "repo push"만 단독으로 사용하지 마세요. 동일한 GUID를 가진 원시 사본이 생성됩니다(독립적인 포크가 아님). 항상 먼저 포크하여 새 식별자를 얻으세요. 자동 라우트는 저장소 이름을 사용하므로 각 포크는 자동으로 고유한 도메인을 얻습니다
rdc repo fork <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--tag <name> | 포크의 태그 (name:tag 형태로 생성) | 예 | - |
--checkpoint | 포크 전 소스에서 CRIU 체크포인트를 생성합니다 (포크에서 복원을 위해 프로세스 메모리 상태를 캡처합니다) | 아니오 | - |
--immutable | 포크를 읽기 전용으로 표시합니다. 마운트를 거부하고 이미지를 영구적으로 바이트 수준에서 안정적으로 유지합니다(머신 간 델타 푸시를 위한 고정된 커밋/베이스) | 아니오 | - |
--up | 포크 후 서비스를 마운트하고 시작합니다 (fork + mount + up을 하나의 명령으로) | 아니오 | - |
--no-wait | --up 와 함께: 컨테이너가 시작되면 즉시 반환합니다. 헬스체크는 백그라운드에서 계속됩니다 (일회용 포크에 적합) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.16 replicate
데이터베이스 크기와 무관하게 몇 초 만에 저장소의 읽기 전용 복제본 N개를 생성합니다. 먼저 데이터스토어 스냅샷을 한 번 찍은 뒤, 클러스터의 노드들에 분산된 형태로 N개의 상수 시간 포크-어태치(copy-on-write, 일회성 로컬 쓰기)를 수행하고, 생성된 오버레이를 적용합니다: 복제본마다 고정된 PersistentVolume 하나, StatefulSet 하나, 그리고 두 개의 Service(프라이머리를 향하는 {repo}-rw와 모든 복제본에 걸친 {repo}-ro). 복제본은 특정 시점의 사본입니다: 복제 스트림이 없고, read-your-writes도 보장되지 않습니다. 각 복제본은 서비스를 시작하기 전에 크래시 복구를 한 번 수행합니다. 'repo replicate refresh'로 최신화할 수 있습니다. 복제본 세트는 관리되는 상태이며, 'repo replicate status'로 확인하고 'repo replicate remove'로 제거합니다.
status
관리 중인 복제본 세트를 표시합니다: 복제본, 호스팅 노드, 포크한 데이터스토어, 스냅샷, 갱신 시각.
rdc repo replicate status <ref>
remove
복제본 세트를 제거합니다: 생성된 k8s 오브젝트를 삭제하고(레이블 범위로 대상 지정), 포크한 데이터스토어를 폐기하고, 스냅샷을 삭제한 뒤, 상태를 잊습니다. 인프라 단계는 best-effort로 수행되므로 클러스터 일부가 이미 사라진 상태에서도 제거 작업은 결국 수렴합니다.
rdc repo replicate remove <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
refresh
모든 복제본을 새로운 특정 시점 스냅샷으로 한 번에 하나씩 순차 전환합니다: 복제본 Pod를 재시작하고, 같은 경로에서 데이터스토어를 폐기한 뒤 다시 포크하며, readiness 체크를 통과하면 다시 트래픽을 받도록 합니다. 이 과정 내내 나머지 N-1개의 복제본이 서비스를 계속 제공합니다.
rdc repo replicate refresh <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
6.17 canary
새 이미지를 안정 버전과 나란히 실행하고 실 트래픽을 비율로 나눕니다(릴리스 사다리 2단계). 동일한 라이브 데이터 위에 카나리 Deployment와 Service를 하나 생성합니다(포크하지 않음: 포크된 데이터에서 카나리 사용자가 오래된 데이터를 읽고, 어차피 버려질 사본에 쓰게 되기 때문입니다). 그리고 Rediacc 프록시에게 안정 버전 호스트네임으로 향하는 트래픽 중 지정한 비율을 카나리로 라우팅하도록 지시합니다. 가중치 0은 카나리를 다크 상태로 유지하고, 가중치 100은 blue/green 완전 전환입니다. 카나리를 변경할 때마다 클러스터 데이터스토어의 자동 그룹 스냅샷이 먼저 촬영되며(릴리스 사다리 0단계), 이는 만능 되돌리기 수단으로 쓰입니다. 두 버전 간 스키마 호환성(expand-contract 방식 유지)은 애플리케이션의 책임입니다. 스키마를 깨뜨리는 릴리스에는 대신 blue/green 방식을 사용하십시오: 저장소를 포크하고(즉시 완료, 데이터 포함), 포크의 Service를 가중치 100으로 여기에 연결한 뒤, 손대지 않은 원본을 재시작해 롤백합니다. 전환 이후에 이루어진 쓰기는 새 사본에만 존재하므로, 롤백 가능 기간은 정책으로 정할 문제입니다.
status
관리 중인 카나리 세트를 표시합니다: 가중치, 이미지, 안정 버전 Service, 가장 최근의 릴리스 되돌리기 스냅샷.
rdc repo canary status <ref>
weight
카나리로 라우팅되는 트래픽 비율을 변경합니다. 먼저 새로운 릴리스 되돌리기용 그룹 스냅샷을 찍은 뒤 오버레이를 다시 적용하며, 프록시는 다음 갱신 주기에 새 분할 비율을 반영합니다. 가중치를 100으로 설정하면 모든 트래픽이 새 버전으로 전송됩니다(blue/green 완전 전환).
rdc repo canary weight <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--weight <percent> | 카나리로 라우팅되는 트래픽 비율 (0-100 정수; 0 = 다크, 100 = 완전 전환) | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
remove
카나리의 Deployment와 Service를 제거합니다(레이블 범위로 대상 지정). 이후 안정 버전 Service가 다시 트래픽의 100%를 처리합니다. 릴리스 되돌리기용 스냅샷은 그대로 유지되며, 데이터스토어 스냅샷 명령으로 정리합니다.
rdc repo canary remove <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
create
새 이미지를 안정 버전과 나란히 실행하고 실 트래픽의 일부를 보냅니다. 카나리는 저장소의 라이브 데이터를 공유하므로(포크하지 않음) 두 버전 간 스키마 호환성은 애플리케이션의 책임입니다. 되돌리기 수단으로 클러스터 데이터스토어의 그룹 스냅샷을 먼저 찍습니다
rdc repo canary create <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--image <image> | 카나리 Deployment가 실행할 새 이미지 (공유 라이브 데이터 대상) | 예 | - |
--port <port> | 앱이 서비스하는 포트 (안정 버전 Service와 일치해야 함) | 예 | - |
--weight <percent> | 카나리로 라우팅되는 트래픽 비율 (0-100 정수; 0 = 다크, 100 = 완전 전환) | 예 | - |
--service <name> | 트래픽을 나눌 대상 안정 버전 Service (기본값: 저장소 이름) | 아니오 | - |
--replicas <n> | 카나리 Deployment의 레플리카 수 (기본값: 1) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.18 resize
저장소를 오프라인으로 크기를 조정합니다 (확장 및 축소 모두 지원). 저장소를 먼저 마운트 해제해야 합니다 ('repo down --unmount'). 서비스를 중지하지 않고 무중단으로 확장하려면 'repo expand'를 사용하십시오
rdc repo resize <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--size <size> | 새 저장소 크기 (예: 10G, 100G, 1T) | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.19 expand
마운트된 저장소를 온라인으로 확장합니다 (무중단, 확장만 가능). 컨테이너가 실행 중인 상태에서 LUKS 컨테이너와 파일 시스템을 확장합니다. 축소는 불가합니다. 축소하려면 'repo resize'를 사용하십시오 (마운트 해제 필요)
rdc repo expand <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--size <size> | 새 저장소 크기 (예: 10G, 100G, 1T) | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.20 trim
마운트된 저장소에서 데이터스토어 풀 공간을 회수합니다 (온라인, 무중단). 저장소 안에서 삭제된 블록은 fstrim을 통해 풀로 반환됩니다. 참조를 생략하면 -m의 마운트된 모든 저장소와 데이터스토어 자체를 트림합니다. 백업이 진행 중인 저장소는 fstrim을 건너뛰지만 --docker 회수는 계속 실행됩니다
rdc repo trim [ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--docker | Docker 공간 회수(중지된 컨테이너, 댕글링 이미지, 빌드 캐시). 백업 스냅샷이 활성 상태일 때도 실행됩니다 | 아니오 | - |
--docker-volumes | 사용하지 않는 Docker 볼륨도 정리 | 아니오 | - |
--report-only | 트림하지 않고 discard 상태와 회수 가능 추정치만 표시 | 아니오 | - |
-m, --machine <name> | 대상 머신 이름 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.21 policy
머신의 스토리지 유지 관리자가 적용하는 자동 크기 정책을 관리합니다: 저장소가 가득 차면 쿼터를 온라인으로 확장하고(max-quota를 넘지 않으며 풀 여유 공간이 부족하면 확장하지 않음) 예약된 트림을 실행합니다. 자동 축소는 없습니다. 축소하려면 'repo resize'를 사용하세요. 참조를 생략하면 -m의 머신 전체 기본 정책을 다룹니다
set
크기 정책 필드를 설정합니다. 전달한 플래그만 변경되며 다른 저장된 필드는 값을 유지합니다. 자동 확장을 켜려면 --max-quota가 필요합니다. 상한은 풀 초과 할당에 대한 명시적 동의입니다
rdc repo policy set [ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--auto-grow <bool> | 쿼터의 온라인 자동 확장 활성화(true/false) | 아니오 | - |
--max-quota <size> | 자동 확장 상한(예: 200G); 자동 확장에 필수 | 아니오 | - |
--grow-threshold <percent> | 확장을 트리거하는 파일 시스템 사용률 %(기본 85) | 아니오 | - |
--grow-step <step> | 단계당 확장량: 절대값(10G) 또는 쿼터의 백분율(20%) | 아니오 | - |
--auto-trim <bool> | 예약 트림 활성화(true/false) | 아니오 | - |
--trim-interval <hours> | 자동 트림 사이의 최소 시간(기본 24) | 아니오 | - |
-m, --machine <name> | 대상 머신 이름 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
get
저장된 머신 기본값, 저장소 재정의(참조 지정 시), 유지 관리자가 실제로 적용하는 병합된 유효 정책을 표시합니다
rdc repo policy get [ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.22 push
저장소를 원격 (머신 또는 스토리지)으로 푸시합니다. 대상 유형은 설정에서 자동으로 감지됩니다. 머신 간 전송 시 암호화된 저장소 이미지가 동일한 GUID로 복사됩니다. 이는 백업/마이그레이션이며 포크가 아닙니다. 독립적인 포크를 생성하려면 먼저 'repo fork'를 사용한 후 푸시하십시오. 푸시된 사본은 백업 아티팩트로 저장됩니다: 대상에서 'backup restore <ref> --as <name> -m <target> --up'으로 부팅하세요
rdc repo push <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--to <remote> | 대상 머신 또는 스토리지 이름 (설정에서 자동 감지) | 아니오 | - |
--to-machine <machine> | — | 아니오 | - |
--provision <provider> | 대상이 존재하지 않는 경우 클라우드 공급자를 통해 자동으로 대상 머신을 프로비저닝합니다 | 아니오 | - |
--checkpoint | 백업 전에 CRIU 체크포인트를 생성합니다 (라이브 마이그레이션을 위해 프로세스 메모리 상태를 캡처합니다) | 아니오 | - |
--force | 기존 백업을 강제로 덮어씁니다 | 아니오 | - |
-w, --watch | 변경 사항 감시 | 아니오 | - |
--bwlimit <limit> | rsync 전송의 대역폭 제한 (예: "6M", "10M") | 아니오 | - |
--delta-base <guid> | 두 머신에 바이트 단위로 동일하게 존재하는 불변 베이스 GUID; 변경된 블록만 전송합니다 (머신 대상). 자동 베이스를 사용하려면 생략하십시오 | 아니오 | - |
--strategy <strategy> | 델타 베이스 사용 시 블록 델타 전략: auto, physical, 또는 shared | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.23 pull
원격 (머신 또는 스토리지)에서 저장소를 가져옵니다. 이름을 생략하면 모든 저장소를 가져옵니다. 소스 유형은 설정에서 자동으로 감지됩니다. 가져온 후 배포하려면 --up을 사용하십시오
rdc repo pull <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--from <remote> | 소스 머신 또는 스토리지 이름 (설정에서 자동 감지) | 아니오 | - |
--from-machine <machine> | — | 아니오 | - |
--force | 기존 저장소를 강제로 덮어씁니다 | 아니오 | - |
--up | 가져온 후 이 머신에서 저장소를 마운트하고 배포합니다 | 아니오 | - |
-w, --watch | 변경 사항 감시 | 아니오 | - |
--bwlimit <limit> | rsync 전송의 대역폭 제한 (예: "6M", "10M") | 아니오 | - |
--delta-base <guid> | 두 머신에 바이트 단위로 동일하게 존재하는 불변 베이스 GUID; 변경된 블록만 수신합니다 (머신 소스) | 아니오 | - |
--strategy <strategy> | 델타 베이스 사용 시 블록 델타 전략: auto, physical, 또는 shared | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.24 migrate
다운타임을 최소화하며 저장소를 한 머신에서 다른 머신으로 라이브 마이그레이션합니다. 2단계 rsync: 실행 중에 대량 전송을 수행한 후, 델타 동기화를 위해 짧게 정지합니다. 저장소 전체를 이동시키며 (라우팅이 새 위치로 재설정됩니다), 이동이 성공하면 원본 이미지를 삭제합니다 (유지하려면 --keep-source 사용). 프로세스 메모리 상태 마이그레이션을 위한 CRIU 체크포인트와 대상 머신 자동 프로비저닝을 지원합니다
rdc repo migrate <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--to <place> | 대상 머신 또는 클러스터 | 예 | - |
--provision <provider> | 클라우드 공급자를 통해 대상을 자동 프로비저닝합니다 (예: hetzner, linode) | 아니오 | - |
--bwlimit <limit> | rsync 전송의 대역폭 제한 (예: 10M) | 아니오 | - |
--checkpoint | CRIU 라이브 마이그레이션: 프로세스 메모리 상태를 캡처하고 복원합니다 | 아니오 | - |
--delta-base <guid> | 전환 델타를 위한 불변 베이스 GUID (고급; 기본값은 1단계 베이스) | 아니오 | - |
--strategy <strategy> | 전환을 위한 블록 델타 전략: auto, physical, 또는 shared | 아니오 | - |
--skip-dns | 마이그레이션 후 DNS 레코드 전환을 건너뜁니다 | 아니오 | - |
--keep-source | 성공적으로 이동한 후에도 원본 이미지를 유지합니다 (기본적으로 삭제됨. 남은 사본은 어떤 설정 레코드로도 참조할 수 없으며 reconcile이 이를 미아로 표시합니다) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.25 sync
저장소와 파일을 동기화합니다 (일괄 push/pull, 파일 전송)
upload
SSH를 통한 rsync로 저장소에 파일을 업로드합니다 (델타 전송). 원격 추가 파일을 삭제하려면 --mirror, 미리 보기는 --dry-run, 패턴을 건너뛰려면 --exclude를 사용하십시오
rdc repo sync upload <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--local <paths...> | 하나 이상의 로컬 파일 또는 디렉터리 경로 (기본값: 현재 디렉터리) | 아니오 | - |
--remote <path> | 저장소 내 원격 하위 디렉터리 경로 | 아니오 | - |
--remote-file <path> | 업로드할 단일 원격 파일 경로 (저장소 루트 기준 상대 경로). --remote와 상호 배타적. | 아니오 | - |
--mirror | 미러 모드 -- 로컬에 없는 원격 파일 삭제 | 아니오 | - |
--verify | 동기화 후 체크섬으로 파일 검증 | 아니오 | - |
--confirm | 동기화 전 변경 사항 미리 보기 및 확인 요청 | 아니오 | - |
--exclude <patterns...> | 동기화에서 제외할 패턴 | 아니오 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
download
SSH를 통한 rsync로 저장소에서 파일을 다운로드합니다 (델타 전송). 로컬 추가 파일을 삭제하려면 --mirror, 미리 보기는 --dry-run, 패턴을 건너뛰려면 --exclude를 사용하십시오
rdc repo sync download <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--local <path> | 로컬 디렉터리 경로 (기본값: 현재 디렉터리) | 아니오 | - |
--remote <path> | 저장소 내 원격 하위 디렉터리 경로 | 아니오 | - |
--remote-file <path> | 저장소 내 원격 파일 경로 (단일 파일 전송 시 --remote의 대안) | 아니오 | - |
--mirror | 미러 모드 -- 원격에 없는 로컬 파일 삭제 | 아니오 | - |
--verify | 동기화 후 체크섬으로 파일 검증 | 아니오 | - |
--confirm | 동기화 전 변경 사항 미리 보기 및 확인 요청 | 아니오 | - |
--exclude <patterns...> | 동기화에서 제외할 패턴 | 아니오 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
status
로컬과 원격 파일을 드라이런으로 비교합니다 (실제 전송 없이 전송될 내용을 표시합니다)
rdc repo sync status <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--local <path> | 로컬 디렉터리 경로 (기본값: 현재 디렉터리) | 아니오 | - |
--remote <path> | 저장소 내 원격 하위 디렉터리 경로 | 아니오 | - |
--remote-file <path> | 저장소 내 원격 파일 경로 (단일 파일 전송 시 --remote의 대안) | 아니오 | - |
6.26 tunnel
원격 머신에서 컨테이너 포트로 SSH 포트 포워드 터널을 생성합니다. 모호하지 않은 경우 컨테이너와 포트를 자동으로 감지합니다. Ctrl+C를 누를 때까지 터널이 유지됩니다
rdc repo tunnel <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-c, --container <name> | 컨테이너 이름 (실행 중인 컨테이너가 하나뿐이면 자동 감지) | 아니오 | - |
--port <port> | 포워드할 원격 컨테이너 포트 | 아니오 | - |
--local <port> | 로컬 포트 (기본값: 원격 포트와 동일) | 아니오 | - |
--url-only | 터널이 준비되면 로컬 URL만 출력합니다 (머신 판독용) | 아니오 | - |
6.27 secret
배포 시 주입되는 저장소별 시크릿을 관리합니다. 쓰기 전용: get은 다이제스트만 반환합니다 (평문 없음). set/unset은 --current 다이제스트 일치 또는 --rotate-secret이 필요합니다. 두 가지 전달 모드: env (REDIACC_SECRET_<KEY>) 및 file (compose `secrets:`를 통해 /var/run/rediacc/secrets/<networkId>/<KEY>의 tmpfs). 시크릿은 암호화된 LUKS 이미지에 저장되지 않으며, 포크는 시크릿을 상속하지 않습니다.
get
시크릿의 SHA-256 다이제스트를 표시합니다. 평문 값은 설계상 반환되지 않습니다 (쓰기 전용). 이미 알고 있는 값을 확인하려면 후속 set/unset에서 --current를 사용하거나 `set --rotate-secret`으로 교체하십시오.
rdc repo secret get <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--key <KEY> | UPPER_SNAKE_CASE의 시크릿 키 (최대 64자). env 모드에서는 REDIACC_SECRET_<KEY>로, file 모드에서는 컨테이너의 /run/secrets/<key>로 노출됩니다. | 예 | - |
list
시크릿 키와 모드를 나열합니다 (값 및 다이제스트는 표시되지 않습니다).
rdc repo secret list <ref>
set
시크릿을 설정하거나 덮어씁니다. 포크는 상속하지 않으므로 포크에 명시적으로 설정하십시오. 에이전트 컨텍스트에서는 --current 다이제스트 일치가 필요합니다 (passwd 방식).
rdc repo secret set <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--key <KEY> | UPPER_SNAKE_CASE의 시크릿 키 (최대 64자). env 모드에서는 REDIACC_SECRET_<KEY>로, file 모드에서는 컨테이너의 /run/secrets/<key>로 노출됩니다. | 예 | - |
--value <value> | 시크릿 값. 셸 이력 노출을 피하려면 `-`를 전달하여 stdin에서 읽으십시오. | 예 | - |
--mode <mode> | 전달 모드: 'env' (컨테이너 env 및 docker inspect에서 표시) 또는 'file' (tmpfs 파일, env에 없음). 기본값: file. | 아니오 | file |
--current <value> | 이전 평문 값 (passwd 방식 사전 조건). 덮어쓰기/삭제 시 필요하며 --rotate-secret과 함께 사용할 수 없습니다. | 아니오 | - |
--rotate-secret | 교체를 인정합니다. --current 사전 조건을 건너뜁니다 (교체로 감사 기록). 이전 값을 확인하지 않고 의도적으로 교체할 때 사용하십시오. | 아니오 | - |
unset
시크릿을 삭제합니다. 에이전트 컨텍스트에서는 --current 다이제스트 일치가 필요합니다.
rdc repo secret unset <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--key <KEY> | UPPER_SNAKE_CASE의 시크릿 키 (최대 64자). env 모드에서는 REDIACC_SECRET_<KEY>로, file 모드에서는 컨테이너의 /run/secrets/<key>로 노출됩니다. | 예 | - |
--current <value> | 이전 평문 값 (passwd 방식 사전 조건). 덮어쓰기/삭제 시 필요하며 --rotate-secret과 함께 사용할 수 없습니다. | 아니오 | - |
--rotate-secret | 교체를 인정합니다. --current 사전 조건을 건너뜁니다 (교체로 감사 기록). 이전 값을 확인하지 않고 의도적으로 교체할 때 사용하십시오. | 아니오 | - |
6.28 admin
저장소 관리 및 유지보수 명령 모음
archive
보관된 저장소 레코드 관리
보관된 저장소 자격증명을 나열합니다
rdc repo admin archive list
보관된 모든 자격증명을 영구적으로 삭제합니다
rdc repo admin archive purge [name] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
보관된 저장소 자격증명을 복원합니다
rdc repo admin archive restore <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--new-name <name> | 새 리소스 이름 | 아니오 | - |
validate
저장소 무결성을 검사합니다 (LUKS 컨테이너, 파일 시스템 일관성, 설정). 예상치 못한 종료 후 또는 백업 상태를 확인하는 데 사용하십시오
rdc repo admin validate <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
fsck
CLI 구성의 참조(branch, HEAD)를 머신에 실제로 존재하는 객체와 대조하여 검증합니다. 댕글링 참조(누락된 객체를 가리키는 참조)와 고아 commit(어떤 참조도 도달하지 못하는 불변 commit)을 보고합니다. 읽기 전용입니다.
rdc repo admin fsck [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
ownership
마운트된 볼륨에서 저장소 디렉터리 소유권 UID를 변경합니다 (기본값: 7111). 컨테이너가 저장소 파일에 접근하기 위해 특정 UID가 필요한 경우 사용하십시오
rdc repo admin ownership <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--uid <uid> | 소유자 UID (기본값: 7111) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
autostart
부팅 시 저장소 자동 시작을 관리합니다
저장소의 자동 시작을 활성화합니다 (이름을 생략하면 모두 활성화)
rdc repo admin autostart enable [ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
저장소의 자동 시작을 비활성화합니다 (이름을 생략하면 모두 비활성화)
rdc repo admin autostart disable [ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
자동 시작이 활성화된 저장소를 나열합니다
rdc repo admin autostart list [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
template
배포 템플릿을 관리하고 적용합니다 (docker-compose.yml, Rediaccfile 및 추가 파일을 작성합니다). Rediaccfile은 'docker compose'가 아닌 'renet compose'를 사용해야 합니다. 재시작 정책은 안전합니다 (renet watchdog에 의해 자동 관리). Renet은 network_mode:host, CRIU 기능, rediacc 레이블을 자동으로 주입합니다. 위험한 설정 (privileged, pid:host)은 차단됩니다. 사용 가능한 내장 템플릿을 보려면 'list'를, 저장소에 배포하려면 'apply'를 사용하십시오
CLI에 내장된 모든 배포 템플릿을 나열합니다
rdc repo admin template list
저장소에 템플릿을 적용합니다. 내장 템플릿 이름 (예: app-postgres)을 사용하거나 커스텀 JSON 템플릿에는 --file을 사용하십시오. Rediaccfile 수명 주기: up()은 컨테이너를 시작하고 (이미지 풀, 설정 생성은 여기서), down()은 중지합니다. 최소 Rediaccfile: up() { renet compose -- pull; renet compose -- up -d; } down() { renet compose -- down; }. 중요: Rediaccfile은 반드시 'renet compose'를 사용해야 합니다. 'docker compose'는 허용되지 않습니다. 환경 변수는 두 가지 수준: (a) Rediaccfile 셸: ${SVCNAME_IP} (예: APP_IP), ${REDIACC_WORKING_DIR}, ${REDIACC_NETWORK_ID}. (b) 컨테이너 내부: renet이 SERVICE_IP와 REDIACC_NETWORK_ID 환경 변수를 자동으로 주입합니다. eBPF 바인드 재작성이 IP 격리를 투명하게 처리하므로 앱은 0.0.0.0에 바인드하고 커널이 올바른 루프백 IP로 재작성합니다. 상태 확인은 localhost를 사용할 수 있습니다. network_mode:host가 주입되며 ports:는 무시됩니다. 스토리지: ${REDIACC_WORKING_DIR}/... 바인드 마운트와 Docker 명명 볼륨 모두 안전합니다. Docker data-root는 암호화된 LUKS 마운트 내부에 있습니다. 재시작 정책: 재시작 정책은 안전합니다. renet이 CRIU 호환성을 위해 자동으로 제거하며 watchdog이 복구를 처리합니다. Compose: network_mode 또는 rediacc.* 레이블을 추가하지 마십시오 (renet이 주입합니다). 멀티 프로젝트: 각 하위 프로젝트를 자체 Rediaccfile이 있는 별도 하위 디렉터리에 배치하십시오. renet이 자동으로 순서대로 검색하고 실행합니다. HTTPS 라우팅: (A) 자동 경로 (fork 친화적, 권장): traefik.enable을 추가하지 마십시오. Renet이 https://{serviceName}.{repoName}.{machineName}.{baseDomain}을 자동 생성합니다. 80이 아닌 포트에는 rediacc.service_port=<port> 레이블을 추가하십시오. 각 포크는 고유한 도메인을 갖습니다. (B) Traefik 레이블 (커스텀 도메인, fork 비친화적): traefik.enable=true, traefik.http.routers.<n>.rule=Host(`domain`), traefik.http.routers.<n>.entrypoints=websecure,websecure-v6, traefik.http.routers.<n>.tls.certresolver=letsencrypt, traefik.http.services.<n>.loadbalancer.server.port=<port>. TCP/UDP의 경우: rediacc.tcp_ports=3306 / rediacc.udp_ports=53
rdc repo admin template apply <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--template <name> | 적용할 템플릿 | 예 | - |
--file <path> | 커스텀 템플릿 JSON 파일 경로 ({"version":"2","files":{"Rediaccfile":"...","docker-compose.yml":"..."}}): 내장 템플릿 이름을 대체합니다 | 아니오 | - |
--grand <name> | 상위 자격증명 저장소 (이름을 GUID로 자동 확인). 상위와 시크릿을 공유하는 저장소에만 해당 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.29 promote
grand 저장소의 데이터를 포크의 데이터로 교체합니다. grand는 자신의 식별자 (GUID, networkId, 도메인, 자동 시작, 백업 체인)를 유지하지만 포크의 업그레이드된 데이터를 갖게 됩니다. 이전 프로덕션 데이터는 백업 포크로 보존됩니다. 사용 사례: 포크에서 업그레이드 테스트 → 검증 → 프로덕션으로 takeover.
rdc repo promote <fork-ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
6.30 logs
저장소 컨테이너의 애플리케이션 로그를 표시합니다. Docker 저장소는 저장소 자체의 Docker 데몬에서 읽고, Kubernetes 저장소는 저장소의 네임스페이스 안의 Pod 로그를 읽습니다. 저장소가 컨테이너를 두 개 이상 실행하면 --container로 원하는 컨테이너를 지정하세요
rdc repo logs <ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-c, --container <name> | 로그를 읽을 컨테이너 (저장소가 컨테이너를 두 개 이상 실행할 때만 필요) | 아니오 | - |
-f, --follow | 중단할 때까지 새 로그 줄을 계속 스트리밍합니다 | 아니오 | - |
--lines <n> | 표시할 이력 줄 수 (기본값: 100) | 아니오 | 100 |
--timestamps | 각 줄 앞에 타임스탬프를 붙입니다 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
6.31 exec
저장소 컨테이너 내부에서 명령을 실행합니다. 명령 자체의 종료 코드가 그대로 전달되므로 스크립트와 조건문에서도 사용할 수 있습니다. Docker 저장소는 저장소의 Docker 데몬을 통해 실행되고, Kubernetes 저장소는 저장소의 네임스페이스 안에서 실행됩니다
rdc repo exec <ref> <cmd...> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-c, --container <name> | 실행할 컨테이너 (저장소가 컨테이너를 두 개 이상 실행할 때만 필요) | 아니오 | - |
-i, --interactive | 터미널을 할당합니다 (터미널을 필요로 하는 명령용) | 아니오 | - |
-u, --user <user> | 명령을 실행할 사용자 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
7. 분리된 작업
머신에서 분리된(detached) 작업을 관리합니다: 목록을 조회하고, 상태를 확인하고, 이벤트 로그를 재생하거나 스트리밍하고, 작업을 취소하거나, 완료된 작업을 가비지 컬렉션(정리)합니다. 분리된 작업은 머신에서 systemd로 실행되므로 연결이 끊겨도 계속 실행되며 나중에 다시 연결(재접속)할 수 있습니다.
7.1 list
머신의 분리된 작업을 최신순으로 나열합니다
rdc job list [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
7.2 status
분리된 작업의 상태를 표시합니다
rdc job status <job-id> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
7.3 logs
분리된 작업의 이벤트 로그를 재생하거나 스트리밍합니다
rdc job logs <job-id> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
-f, --follow | 작업이 끝날 때까지 스트리밍합니다 | 아니오 | - |
--since-line <n> | 지정한 줄 수 이후부터 재개합니다(이미 수신한 줄 수) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
7.4 cancel
실행 중인 분리된 작업을 취소합니다
rdc job cancel <job-id> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
7.5 gc
완료된 작업과 해당 로그를 삭제합니다
rdc job gc [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
--older-than <duration> | 지정한 시간(시간 단위)보다 오래전에 완료된 작업을 정리합니다(기본값: 168) | 아니오 | - |
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
8. 백업 및 복원
백업 전략과 예약된 실행, 그리고 그 결과물인 아티팩트를 관리합니다: 저장소에 대한 전략을 선언하고, 필요할 때 실행하거나 복원하며, 스토리지 엔드포인트에 기록된 아카이브를 확인합니다.
8.1 schedule
원격 머신에 백업 일정을 배포합니다 (systemd 타이머)
rdc backup schedule [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 머신 이름 | 예 | - |
--dry-run | 배포하지 않고 생성된 유닛을 미리 봅니다 | 아니오 | - |
--force | 현재 백업이 실행 중이어도 진행합니다 (새 유닛은 다음 틱에 적용됩니다; 실행 중인 호출은 이전 유닛을 유지합니다) | 아니오 | - |
--reset-failed | 성공적인 배포 후 수정된 서비스의 실패 상태를 지웁니다 (기본적으로 꺼져 있으며, 실패 신호를 보존합니다) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
8.2 cancel
원격 머신에서 실행 중인 백업을 취소합니다
rdc backup cancel [strategy] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 머신 이름 | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
8.3 list
머신 또는 스토리지의 백업 아티팩트를 나열합니다
rdc backup list [artifact-ref] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 머신 이름 | 아니오 | - |
--storage <name> | 이 스토리지 엔드포인트의 아티팩트를 나열합니다 | 아니오 | - |
--path <subdir> | 스토리지 루트 내 하위 디렉터리. 생략하면 hot/과 cold/를 모두 나열해 병합합니다 | 아니오 | - |
-w, --watch | 변경 사항 감시 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
8.4 restore
백업 아티팩트를 실행 중인 저장소로 되돌립니다. 배치 위치는 여기서 지정합니다
rdc backup restore <artifact-ref> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--as <name> | 복원된 저장소의 이름 (기본값: 아티팩트 이름) | 아니오 | - |
-m, --machine <name> | 머신 이름 | 아니오 | - |
--datastore <name> | 이 이름 지정 데이터스토어로 복원합니다 (어태치된 머신이 호스팅) | 아니오 | - |
--up | 전송 후 복원된 저장소를 배포합니다 | 아니오 | - |
--health-window <seconds> | 전체 상태 게이트 윈도우(초) (기본값 300) | 아니오 | - |
--health-timeout <seconds> | 상태 확인 1회 시도당 제한 시간(초) (기본값 30) | 아니오 | - |
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
8.5 run
원격 머신에서 즉시 백업을 실행합니다
rdc backup run [strategy] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 머신 이름 | 예 | - |
-w, --watch | 변경 사항 감시 | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
8.6 status
원격 머신의 백업 상태 및 타이머 상태를 표시합니다
rdc backup status [strategy] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 머신 이름 | 예 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
8.7 strategy
이름 지정 백업 전략을 관리합니다 (hot/cold 모드, 대상, 스케줄링)
set
백업 전략을 생성하거나 업데이트합니다
rdc backup strategy set <strategy> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--destination <name> | 전략 내 대상 이름 | 아니오 | - |
--storage <name> | 스토리지 설정 이름 (rclone 자격증명) | 아니오 | - |
--cron <expression> | 크론 스케줄 (예: "0 * * * *" 은 매시간) | 아니오 | - |
--mode <mode> | 백업 모드: "hot" (무중단) 또는 "cold" (중지, 스냅샷, 재시작) | 아니오 | - |
--bwlimit <limit> | Rclone 대역폭 제한 (예: "6M", "10M:off", "08:00,3M;22:00,10M") | 아니오 | - |
--include <repos> | 이 저장소만 백업합니다 (쉼표로 구분된 이름) | 아니오 | - |
--exclude <repos> | 백업에서 이 저장소를 제외합니다 (쉼표로 구분된 이름) | 아니오 | - |
--folder <path> | 이 대상에 대한 스토리지 버킷 아래의 하위 폴더 (예: hot, cold) | 아니오 | - |
--enable | 전략 또는 대상을 활성화합니다 | 아니오 | - |
--disable | 전략 또는 대상을 비활성화합니다 | 아니오 | - |
bind
백업 전략을 머신에 연결하여 일정이 그곳에 배포되도록 합니다
rdc backup strategy bind <strategy> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
unbind
머신에서 백업 전략 연결을 해제합니다
rdc backup strategy unbind <strategy> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 대상 머신 이름 | 예 | - |
remove
백업 전략 또는 대상을 제거합니다
rdc backup strategy remove <strategy> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--destination <name> | 이 대상만 제거합니다 (다른 대상은 유지) | 아니오 | - |
list
모든 백업 전략을 나열합니다
rdc backup strategy list
show
백업 전략 세부 정보를 표시합니다
rdc backup strategy show [strategy]
9. 스토리지 관리
외부 백업 스토리지 엔드포인트(S3 및 기타 rclone 호환 대상)를 관리합니다: 등록하거나 제거하고, 등록된 목록을 확인하고, 보관 중인 아티팩트를 탐색하고, 고아가 된 백업을 정리합니다.
9.1 list
스토리지 엔드포인트를 나열합니다. 이름을 지정하면 상세 정보를 표시합니다
rdc storage list [name] [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--reveal | 스토리지 구성을 평문으로 표시합니다 (대화형 TTY 전용; 감사 기록됨) | 아니오 | - |
9.2 browse
스토리지 시스템의 파일을 탐색합니다
rdc storage browse <storage> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--path <subpath> | 나열할 하위 디렉터리 경로 | 아니오 | “ |
9.3 prune
더 이상 어떤 설정에도 없는 스토리지의 고아 백업을 삭제합니다. 유예 기간 보호가 있는 다중 설정 안전. rclone 호출은 --machine (실행자)에서 실행되며, 노트북에서 실행되지 않으므로 클라이언트에 rclone을 로컬에 설치할 필요가 없습니다; --machine은 소스가 아닌 실행자입니다.
rdc storage prune <storage> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 실행자 머신 - 스토리지에 대해 rclone 목록/삭제 호출을 실행합니다. 클라이언트에 rclone이 로컬에 설치되어 있지 않아도 되므로 필수입니다; 스토리지 자격 증명은 여전히 로컬 설정에서 가져옵니다. | 예 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
--force | 확인 프롬프트 건너뜀 | 아니오 | - |
--force-delete-mounted | 마운트 안전 확인을 재정의하고 소스 GUID가 현재 마운트되어 있거나 실행자 머신에서 실행 중인 컨테이너가 있는 경우에도 클라우드 백업을 삭제합니다. --force(아카이브 저장소의 유예 기간만 재정의)와는 별개입니다. | 아니오 | - |
--grace-days <days> | 최근 보관된 저장소의 유예 기간 (일 단위, 기본값: 7) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
--skip-router-restart | 바이너리 업데이트 후 라우트 서버 재시작 건너뜀 | 아니오 | - |
9.4 add
스토리지 엔드포인트를 등록합니다
rdc storage add <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--vault <json> | JSON 문자열로 된 볼트 내용 | 예 | - |
9.5 import
rclone 설정 파일에서 스토리지를 가져옵니다
rdc storage import <file> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--name <name> | 이 이름의 섹션만 가져옵니다 | 아니오 | - |
9.6 remove
설정에서 스토리지 엔드포인트를 제거합니다
rdc storage remove <name> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-y, --yes | 확인 프롬프트 건너뜀 | 아니오 | - |
--dry-run | 변경 없이 수행될 작업 표시 | 아니오 | - |
10. VS Code 통합
샌드박스 처리된 저장소별 환경을 사용하여 머신 또는 저장소에 VS Code Remote SSH를 엽니다. `term`과 동일한 SSH 연결을 사용하지만 VS Code를 실행합니다. 주요 하위 명령어: connect (또는 위치 축약어), list (설정된 연결 표시), cleanup (SSH 설정 항목 제거), check (VS Code 설치 확인).
10.1 connect
머신에서, 또는 저장소 안에서 VS Code를 엽니다
rdc vscode connect <target> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-f, --folder <path> | 열 원격 폴더 경로 | 아니오 | - |
--url-only | 실행 대신 VS Code URI 출력 | 아니오 | - |
-n, --new-window | 새 VS Code 창에서 열기 | 아니오 | - |
--skip-env-setup | 원격 환경 설정 건너뜀 | 아니오 | - |
--insiders | VS Code Insiders 설정 사용 | 아니오 | - |
--browser | 저장소 샌드박스 안에서 브라우저용 VS Code 서빙 (로컬 VS Code 불필요) | 아니오 | - |
--no-open | 로컬 브라우저를 실행하지 않고 URL만 출력합니다 | 아니오 | - |
--local <port> | 로컬 포트 (기본값: 원격 포트와 동일) | 아니오 | - |
--server-provider <id> | 브라우저용 VS Code 서버 구현체 (openvscode, code-server) | 아니오 | - |
--server-archive <file> | 머신에 미리 준비된 서버 tarball 경로 (에어갭 설치용) | 아니오 | - |
10.2 list
설정된 VS Code SSH 연결을 나열합니다
rdc vscode list
10.3 cleanup
VS Code SSH 설정을 제거합니다
rdc vscode cleanup [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--all | 모든 rediacc SSH 구성 제거 | 아니오 | - |
-c, --connection <name> | 특정 연결 제거 | 아니오 | - |
10.4 check
VS Code 설치 및 설정을 확인합니다
rdc vscode check [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--insiders | VS Code Insiders 설정 사용 | 아니오 | - |
10.5 serve
샌드박스 내 브라우저용 VS Code 서버를 관리합니다
status
브라우저용 VS Code 서버가 실행 중인지 표시합니다
rdc vscode serve status <target> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--server-provider <id> | 브라우저용 VS Code 서버 구현체 (openvscode, code-server) | 아니오 | - |
stop
브라우저용 VS Code 서버를 중지합니다
rdc vscode serve stop <target> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--server-provider <id> | 브라우저용 VS Code 서버 구현체 (openvscode, code-server) | 아니오 | - |
11. SSH 터미널 접속
머신 또는 저장소로 SSH 터미널을 엽니다. 대상은 머신 이름이나 저장소 참조이며, 저장소 컨텍스트(DOCKER_HOST, 작업 디렉터리, 환경)는 자동으로 설정됩니다. `-c`로 단일 명령을 비대화형으로 실행할 수 있습니다. 컨테이너 로그나 컨테이너 내 일회성 명령에는 `repo logs`와 `repo exec`를 사용하세요. VS Code에는 `vscode`를 사용하세요
11.1 connect
머신에서, 또는 Docker가 설정된 저장소 안에서 셸을 엽니다
rdc term connect <target> [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-c, --command <cmd> | 대화형 셸 대신 명령 실행 | 아니오 | - |
--external | 외부 터미널 창에서 강제 실행 | 아니오 | - |
--reset-home | 새로 시작을 위해 저장소별 홈 오버레이 초기화 | 아니오 | - |
12. 빠른 명령 (단축키)
12.1 run
경고: 디버깅 및 실험 전용 저수준 명령어입니다. 프로덕션 환경에서는 사용하지 마세요. 더 높은 수준의 명령어(repo up, repo down 등)를 사용하세요. 머신에서 원시 브릿지 함수를 실행합니다.
rdc run
12.2 trace
작업 추적 (단축키: queue trace)
rdc trace
12.3 cancel
작업 취소 (단축키: queue cancel)
rdc cancel
12.4 retry
실패한 작업 재시도 (단축키: queue retry)
rdc retry
13. 구독 관리
라이선스와 구독 토큰을 관리합니다. login으로 로그인하고, status로 확인하고, refresh로 라이선스를 재발급합니다
13.1 login
브라우저 또는 API 토큰으로 인증합니다
rdc subscription login [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-t, --token <token> | API 토큰 (rdt_...) | 아니오 | - |
--server <url> | 계정 서버 URL | 아니오 | - |
13.2 logout
저장된 구독 토큰을 지웁니다
rdc subscription logout
13.3 status
구독 상태와 머신의 라이선스 상태를 표시합니다
rdc subscription status [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 머신 이름 | 아니오 | - |
13.4 refresh
계정 서버에서 라이선스를 갱신합니다
rdc subscription refresh [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-m, --machine <name> | 머신 이름 | 아니오 | - |
--repo <ref> | 저장소 참조: 이름, 또는 이름:태그, 선택적으로 @machine 포함 (예: shop 또는 shop:test) | 아니오 | - |
14. CLI 업데이트
새 CLI 버전을 확인하고 업데이트를 적용합니다. 설치 없이 확인만 하려면 --check-only를, 이미 최신 버전이어도 업데이트하려면 --force를 사용합니다.
rdc update [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--force | 이미 최신 버전이어도 강제 업데이트 | 아니오 | - |
--check-only | 다운로드 없이 업데이트만 확인 | 아니오 | - |
--rollback | 이전 버전으로 롤백 | 아니오 | - |
--status | 자동 업데이트 상태 및 진단 정보 표시 | 아니오 | - |
--channel <channel> | 릴리즈 채널 설정 (stable 또는 edge) | 아니오 | - |
15. 서드파티 크레딧
rdc에 번들된 서드파티 구성 요소를 출력합니다: renet이 내장하고 전달하는 바이너리(CRIU, rsync, rclone), 내장된 Node.js 런타임, 번들된 npm 의존성입니다. 버전, SPDX 라이선스 식별자, GPL 준수에 필요한 정확한 버전의 소스 아카이브 URL을 표시합니다. 릴리스 빌드에 포함된 THIRD_PARTY_LICENSES 전문을 출력하려면 --licenses를 사용하십시오.
rdc credits [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--licenses | 릴리스 빌드에 포함된 THIRD_PARTY_LICENSES 전문을 출력합니다 | 아니오 | - |
16. 시스템 진단
CLI 환경에 대한 진단 검사를 실행합니다: Node.js 버전, renet 바이너리 가용성, 설정 파일 유효성, SSH 키 상태, 네트워크 연결. 통과/실패 지표와 함께 구조화된 상태 보고서를 출력합니다.
rdc doctor
17. 로컬 VM 작업
KVM/QEMU/Hyper-V를 사용한 로컬 VM 프로비저닝 및 관리 (플랫폼 자동 감지). 원격 머신용이 아닙니다. 원격 머신에는 `machine`을 사용하세요. 주요 하위 명령어: up (VM 시작), down (중지), status (실행 중인 VM 나열), ssh (VM에 연결), setup (필수 조건 설치), check (호스트 준비 상태 확인).
17.1 up
로컬에서 VM 클러스터를 프로비저닝합니다
rdc ops up [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--force | 모든 VM 강제 재시작 | 아니오 | - |
--parallel | VM 병렬 생성 | 아니오 | - |
--basic | 최소 클러스터 (브리지 + 워커 1개) | 아니오 | - |
--lite | VM 프로비저닝 건너뜀 (상태 확인만) | 아니오 | - |
--skip-orchestration | 클러스터 오케스트레이션 건너뜀 | 아니오 | - |
--backend <backend> | 가상화 백엔드 (kvm|qemu, 자동 감지) | 아니오 | - |
--os <name> | VM 운영 체제 (예: ubuntu-24.04, debian-13) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
17.2 down
VM 클러스터를 삭제합니다
rdc ops down [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--backend <backend> | 가상화 백엔드 (kvm|qemu, 자동 감지) | 아니오 | - |
--debug | 디버그 출력 활성화 | 아니오 | - |
17.3 status
VM 클러스터 상태를 표시합니다
rdc ops status [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--backend <backend> | 가상화 백엔드 (kvm|qemu, 자동 감지) | 아니오 | - |
17.4 ssh
VM에 SSH로 접속합니다
rdc ops ssh [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--vm-id <id> | 가상 머신 ID | 예 | - |
-c, --command <cmd> | 대화형 셸 대신 명령 실행 | 아니오 | - |
--backend <backend> | 가상화 백엔드 (kvm|qemu, 자동 감지) | 아니오 | - |
--user <user> | VM 연결을 위한 SSH 사용자 이름 | 아니오 | - |
17.5 setup
가상화 필수 조건을 설치합니다
rdc ops setup [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
--debug | 디버그 출력 활성화 | 아니오 | - |
17.6 check
가상화 필수 조건을 확인합니다
rdc ops check
18. 실행기 서비스
클라이언트가 직접 SSH로 연결하는 대신 이 프로세스를 통해 명령을 실행할 수 있도록 실행기로 구동합니다
rdc serve [options]
| 플래그 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-p, --port <port> | 수신 대기할 포트 | 아니오 | 8080 |
--host <host> | 바인딩할 주소 | 아니오 | 0.0.0.0 |
--mode <mode> | 배치 위치: daemon(고객 호스트) 또는 container | 아니오 | daemon |
일반적인 오류 메시지
문제가 발생하면 CLI가 명확한 오류 메시지를 제공합니다:
| 오류 | 의미 |
|---|---|
| 인증이 필요합니다. 실행: rdc subscription login | 먼저 로그인해야 합니다 |
| 활성 설정이 없습니다. 다음 명령으로 생성하세요: rdc config init <name> | 활성 구성이 없습니다 -- `rdc config init`으로 생성하세요 |
| 권한이 거부되었습니다 | 계정에 필요한 권한이 없습니다 |
| 머신 이름이 필요합니다. --machine <name>을 사용하세요 | `--machine`으로 머신을 지정하거나 구성 기본값을 설정하세요 |
| 팀 이름이 필요합니다. --team을 사용하거나 다음 명령으로 기본값을 설정하세요: rdc config set team <name> | `--team`으로 팀을 지정하거나 구성 기본값을 설정하세요 |
| 리전 이름이 필요합니다. --region을 사용하거나 다음 명령으로 기본값을 설정하세요: rdc config set region <name> | `--region`으로 리전을 지정하거나 구성 기본값을 설정하세요 |
출력 형식
모든 목록/조회 명령은 `--output`을 통해 다양한 출력 형식을 지원합니다:
rdc machine list --output json
rdc machine list --output yaml
rdc machine list --output csv
rdc machine list --output table # default
이를 통해 Rediacc CLI를 스크립트, CI/CD 파이프라인, 자동화 워크플로에 쉽게 통합할 수 있습니다.