Skip to main content
Documentation

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.

CommandDescriptionUsage
freeze-initInitialize lifecycle trackingdits freeze-init [OPTIONS]
freeze-statusShow storage tier statusdits freeze-status [OPTIONS]
freezeMove chunks to colder storagedits freeze [OPTIONS] <PATH>
thawRestore chunks from cold storagedits thaw [OPTIONS] <PATH>
freeze-policySet or view lifecycle policydits 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 setup

Examples

# 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 information

Examples

$ 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] &lt;PATH&gt;...

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 output

Examples

# 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 WARM

dits thaw

Restore files from cold or warm storage to hot storage. Required before accessing archived files.

Synopsis

dits thaw [OPTIONS] &lt;PATH&gt;...

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 thawed

Examples

# 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 30m

dits 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 JSON

Examples

# 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 = 30d

Related Commands

Related Topics