CLI Reference
Storage Tier Commands
Manage data across hot, warm, and cold storage tiers. Automatically move infrequently accessed files to cheaper storage while keeping active files instantly available.
Tiered Storage Architecture
Hot: Local SSD for active files (instant access). Warm: Cloud object storage like S3 Standard (seconds). Cold: Archive storage like Glacier (hours). Dits moves data between tiers based on access patterns.
| Command | Description | Usage |
|---|---|---|
| freeze-init | Initialize lifecycle tracking | dits freeze-init [OPTIONS] |
| freeze-status | Show storage tier status | dits freeze-status [OPTIONS] |
| freeze | Move chunks to colder storage | dits freeze [OPTIONS] <PATH> |
| thaw | Restore chunks from cold storage | dits thaw [OPTIONS] <PATH> |
| freeze-policy | Set or view lifecycle policy | dits freeze-policy [OPTIONS] |
dits freeze-init
Initialize lifecycle tracking for the repository. Sets up storage tier configuration and metadata tracking.
Synopsis
dits freeze-init [OPTIONS]Options
--warm-backend <URL> Configure warm storage backend
--cold-backend <URL> Configure cold storage backend
--hot-limit <SIZE> Maximum hot storage size (default: 100GB)
-v, --verbose Show detailed setupExamples
# Initialize with defaults
$ dits freeze-init
Initializing lifecycle tracking...
Storage Tiers:
HOT: .dits/objects/ (local)
WARM: Not configured
COLD: Not configured
Lifecycle tracking enabled.
Run 'dits freeze-policy' to configure automatic tiering.
# Initialize with S3 backends
$ dits freeze-init \
--warm-backend s3://my-bucket/warm \
--cold-backend s3-glacier://my-bucket/cold \
--hot-limit 50GB
Initializing lifecycle tracking...
Storage Tiers:
HOT: .dits/objects/ (local, limit: 50 GB)
WARM: s3://my-bucket/warm
COLD: s3-glacier://my-bucket/cold
Testing connectivity... done
Lifecycle tracking enabled.dits freeze-status
Show the current status of all storage tiers. Displays size, object counts, and cost estimates.
Synopsis
dits freeze-status [OPTIONS]Options
--cost Show cost estimates
--files List files by tier
--json Output as JSON
-v, --verbose Show detailed informationExamples
$ dits freeze-status
Storage Tier Status:
Tier Location Size Objects Access
────────────────────────────────────────────────────────────────────
HOT .dits/objects/ 45.2 GB 12,456 instant
WARM s3://my-bucket/warm 234.5 GB 45,892 ~seconds
COLD s3-glacier://my-bucket/cold 1.2 TB 156,234 ~hours
Total Storage: 1.48 TB
Recent Activity (last 7 days):
Promoted to HOT: 234 chunks (2.1 GB)
Demoted to WARM: 567 chunks (5.4 GB)
Archived to COLD: 1,234 chunks (15 GB)
# Show cost estimates
$ dits freeze-status --cost
Monthly Cost Estimate:
HOT (local): $0.00 (local storage)
WARM (S3 Standard):
Storage: 234.5 GB × $0.023/GB = $5.39
Requests: 45,000 × $0.0004 = $0.18
Transfer: 50 GB × $0.09/GB = $4.50
Subtotal: $10.07
COLD (Glacier):
Storage: 1.2 TB × $0.004/GB = $4.80
Retrieval: 2 restores avg = $3.00
Subtotal: $7.80
Total Estimated: $17.87/month
# List files by tier
$ dits freeze-status --files
HOT (45.2 GB, 12,456 chunks):
footage/scene01.mov 2.3 GB last accessed: 2h ago
footage/scene02.mov 1.8 GB last accessed: 1d ago
project.prproj 125 MB last accessed: 10m ago
...
WARM (234.5 GB, 45,892 chunks):
footage/old-takes/* 45 GB last accessed: 14d ago
archive/2024/* 189 GB last accessed: 30d ago
...dits freeze
Manually move files or chunks to colder storage. Useful for archiving completed projects or rarely accessed media.
Synopsis
dits freeze [OPTIONS] <PATH>...Options
--tier <TIER> Target tier (warm, cold) - default: warm
--reason <TEXT> Reason for freezing
-n, --dry-run Show what would be frozen
--progress Show progress
-v, --verbose Show detailed outputExamples
# Freeze old footage to warm storage
$ dits freeze footage/2023-archive/
Freezing: footage/2023-archive/
Files: 156
Size: 234.5 GB
Target tier: WARM
Uploading to warm storage... 100% ████████████████████
Removing from hot storage... done
Frozen: 234.5 GB moved to WARM tier
# Freeze to cold storage (for long-term archive)
$ dits freeze --tier cold footage/completed-projects/
Freezing: footage/completed-projects/
Files: 89
Size: 1.2 TB
Target tier: COLD
Warning: Cold storage retrieval takes 3-12 hours.
Continue? [y/N] y
Uploading to cold storage... 100% ████████████████████
Frozen: 1.2 TB moved to COLD tier
# Dry run
$ dits freeze -n footage/2023-archive/
Would freeze:
footage/2023-archive/project1/ (45.2 GB)
footage/2023-archive/project2/ (89.1 GB)
footage/2023-archive/project3/ (100.2 GB)
Total: 234.5 GB would move to WARMdits thaw
Restore files from cold or warm storage to hot storage. Required before accessing archived files.
Synopsis
dits thaw [OPTIONS] <PATH>...Options
--expedited Use expedited retrieval (faster, higher cost)
--bulk Use bulk retrieval (slower, lower cost)
--wait Wait for thaw to complete
--notify Send notification when complete
-n, --dry-run Show what would be thawedExamples
# Thaw archived footage
$ dits thaw footage/2023-archive/
Thawing: footage/2023-archive/
Current tier: COLD
Retrieval method: Standard
Estimated time: 3-5 hours
Initiating restore request... done
Thaw request submitted.
You will be notified when files are ready.
Check status with: dits freeze-status
# Expedited thaw (faster, costs more)
$ dits thaw --expedited footage/2023-archive/project1/hero.mov
Thawing: footage/2023-archive/project1/hero.mov (2.3 GB)
Retrieval method: Expedited
Estimated time: 1-5 minutes
Additional cost: ~$0.03/GB = $0.07
Restoring... done!
File is now available in HOT storage.
# Wait for thaw to complete
$ dits thaw --wait footage/old-project/
Thawing: footage/old-project/ (45 GB)
Estimated time: 3-5 hours
Waiting for restore... ████████░░░░░░░░░░░░ 42%
ETA: 2h 15m remaining
# Check thaw status
$ dits freeze-status
Pending Thaw Operations:
footage/2023-archive/ (234.5 GB)
Status: RESTORING
Progress: 65%
ETA: 1h 30mdits freeze-policy
Configure automatic lifecycle policies. Files are automatically moved between tiers based on access patterns.
Synopsis
dits freeze-policy [OPTIONS]Options
--set <KEY=VALUE> Set a policy value
--remove <KEY> Remove a policy rule
--list List current policies
--apply Apply policies immediately
--json Output as JSONExamples
# View current policies
$ dits freeze-policy --list
Lifecycle Policies:
Default Rules:
warm-after: 7d (move to warm after 7 days idle)
cold-after: 90d (move to cold after 90 days idle)
evict-hot: 30d (remove from hot after synced to warm)
Pattern Rules:
raw/** warm-after: 3d, cold-after: 30d
*.prproj warm-after: never (keep hot)
archive/** cold-after: 1d
# Set default warm policy
$ dits freeze-policy --set warm-after=14d
Updated: Files move to WARM after 14 days without access.
# Keep project files always hot
$ dits freeze-policy --set "pattern.*.prproj.warm-after=never"
Updated: *.prproj files will never be moved to warm storage.
# Aggressive archival for raw footage
$ dits freeze-policy --set "pattern.raw/**.warm-after=3d"
$ dits freeze-policy --set "pattern.raw/**.cold-after=30d"
Updated: raw/** files move to warm after 3d, cold after 30d.
# Apply policies immediately (run lifecycle check)
$ dits freeze-policy --apply
Applying lifecycle policies...
Would move to WARM:
footage/old-takes/ 45.2 GB (idle 14+ days)
Would move to COLD:
archive/2024-q1/ 189 GB (idle 90+ days)
Apply these changes? [y/N] y
Processing...
Moving to WARM: 45.2 GB
Moving to COLD: 189 GB
Done.Storage Backend Configuration
# .dits/config
[storage.warm]
type = s3
bucket = my-project-warm
region = us-west-2
storageClass = STANDARD_IA
[storage.cold]
type = s3-glacier
bucket = my-project-archive
region = us-west-2
retrievalTier = Standard
[lifecycle]
warmAfter = 7d
coldAfter = 90d
evictHotAfter = 30dRelated Commands
- VFS Commands - Mount and cache management
- Maintenance Commands - Garbage collection
- Remote Commands - Push/pull with remotes
Related Topics
- Storage Tiers Guide - Deep dive into tiered storage
- Configuration - Backend configuration