Server mobility through ZFS filesystem migration.
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).
ooze/ # Main wrapper (dumb dispatcher)
├── cmd/
│ ├── ooze/ # Main entry point
│ ├── ooze-zfs/ # ZFS volume migration
│ └── ooze-nixos/ # NixOS root implementation
└── pkg/ooze/ # Shared library
Dumb wrapper that delegates to subcommands. Follows the sensible pattern.
ooze zfs send tank/data/db1 root@server2
ooze nixos init tankZFS 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 statusNixOS 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 profileThe 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>
- Snapshot: Create a point-in-time snapshot of the dataset
- Send: Stream the snapshot via SSH to target (
zfs send -R | ssh | zfs receive) - Receive: Import the stream and restore dataset properties
- Verify: Confirm data integrity and mountpoints
# System install
make install
# User install
make install-usermake build # Build all binaries
make test # Run tests- sensible - Remote execution for AI agents (pattern followed here)
- angelbox/nixbox - NixOS provisioning with ZFS support
MIT