Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ooze

Server mobility through ZFS filesystem migration.

Concept

Ooze enables moving running server workloads between hosts by leveraging ZFS send/receive. The system treats a ZFS dataset hierarchy as a portable server unit that can be migrated while preserving all properties (compression, snapshots, properties).

Architecture

ooze/ # Main wrapper (dumb dispatcher)
├── cmd/
│   ├── ooze/                 # Main entry point
│   ├── ooze-zfs/             # ZFS volume migration
│   └── ooze-nixos/           # NixOS root implementation
└── pkg/ooze/                 # Shared library

Commands

ooze (wrapper)

Dumb wrapper that delegates to subcommands. Follows the sensible pattern.

ooze zfs send tank/data/db1 root@server2
ooze nixos init tank

ooze-zfs

ZFS filesystem mobility:

ooze-zfs send <dataset> <target>   # Send dataset to target
ooze-zfs receive <dataset>         # Receive dataset
ooze-zfs snapshot <dataset>       # Create migration snapshot
ooze-zfs list [dataset]           # List datasets
ooze-zfs status <dataset>          # Show migration status

ooze-nixos

NixOS root on ZFS implementation:

ooze-nixos init <pool> # Initialize pool for NixOS root
ooze-nixos send <profile> <target> # Send NixOS config
ooze-nixos receive <pool>          # Configure this host
ooze-nixos list                    # List available profiles
ooze-nixos switch <profile>       # Switch to profile

ZFS Layout

The expected ZFS dataset hierarchy for server workloads:

pool/
├── os/                          # OS datasets (canmount=off)
│   ├── nix                      # /nix/store
│   ├── etc                     # /etc
│   └── var                     # /var
├── safe/                       # User data (canmount=on)
│   └── user/
│       ├── home                # /home
│       └── root                # /root
└── data/                       # Application data
    └── <app>                   # /var/lib/<app>

Migration Flow

  1. Snapshot: Create a point-in-time snapshot of the dataset
  2. Send: Stream the snapshot via SSH to target (zfs send -R | ssh | zfs receive)
  3. Receive: Import the stream and restore dataset properties
  4. Verify: Confirm data integrity and mountpoints

Installation

# System install
make install

# User install
make install-user

Building

make build        # Build all binaries
make test         # Run tests

Related Projects

  • sensible - Remote execution for AI agents (pattern followed here)
  • angelbox/nixbox - NixOS provisioning with ZFS support

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages