Storage Management¶
Storage is the backbone of any NAS. Eight.ly OS gives you a storage stack managed from the dashboard: MergerFS + SnapRAID array creation, ZFS pools, parity protection, SSD cache tiering, and SMART monitoring.
Where to find it: Sidebar > Storage
How the Storage Stack Works¶
| Component | What it does |
|---|---|
| MergerFS | Pools multiple drives of any size into one logical volume. Your apps see /mnt/<array> instead of individual disks. |
| SnapRAID | Parity protection. Calculates checksums across your pool so you can recover data if a drive fails. Not real-time RAID — runs on a schedule. |
| The Shelver | The scheduled cache-to-array mover. Writes land on a fast cache drive first; the Shelver sweeps aged files off to the slower pool. Keeps writes fast without buying all-SSD storage. |
| ZFS | Alternative to MergerFS + SnapRAID for people who want copy-on-write, checksums, and snapshots built into the filesystem. Works best with matched drive sizes. |
You pick one storage strategy for the box: Media Server Storage (MergerFS + SnapRAID, with an optional cache drive and the Shelver) or ZFS Storage (one pool of matched drives). Choose it under Settings > Storage before you create your first array or pool.
The Storage page itself shows only the tabs that apply to what you picked — Overview and SMART are always there; MergerFS and SnapRAID appear if you chose Media Server Storage, ZFS appears if you chose ZFS Storage.
Setting Up a Storage Array (MergerFS + SnapRAID)¶
MergerFS combines any number of drives of any size into a single mount point. No striping, no matching drive sizes required. SnapRAID adds parity so a failed drive can be rebuilt.
You create the whole thing — data disks, parity, the MergerFS pool, and the SnapRAID config — from the dashboard in one guided, self-serve flow.
Create an array from the dashboard¶
- Open Storage in the sidebar. If you haven't chosen a storage strategy yet, pick Media Server Storage under Settings > Storage first.
- Start the Create Storage Array wizard from the Storage page.
- Name — name the array; it mounts at
/mnt/<name>. - Data — select the drives that will hold your data.
- Parity — select at least one parity drive. A parity drive must be at least as large as your biggest data drive (a SnapRAID requirement).
- Cache — optionally select one or more cache drives to pair with the array for the Shelver.
- Review — confirm the layout.
- Confirm — create the array.
The backend builds the array transactionally: it clears old RAID signatures from the disks (stops any auto-assembled md/LVM member and wipes the disk), formats each drive, mounts them, writes /etc/fstab so the array survives reboots, mounts the MergerFS union, generates /etc/snapraid.conf, and can run an initial parity sync. If an earlier step fails, everything already done is unwound in reverse — you don't end up with a half-built array. If the optional initial sync itself fails, your data is untouched; the sync is simply left to run later.
When it finishes, the Storage page shows your drives, the /mnt/<name> MergerFS pool, and SnapRAID parity configured.
Reusing drives from an old NAS or RAID
Drives pulled from a previous array usually carry RAID signatures that the kernel auto-assembles into ghost md devices. The wizard clears these for you before formatting.
Adding, Removing, and Replacing Drives¶
These are dashboard operations — you don't need shell access or to hand-edit configuration files:
- Add a data disk — from the Storage page, add a disk to the array. Eight.ly formats it, mounts it, and folds it into the running MergerFS pool without unmounting anything.
- Add a parity disk — same flow, for an additional parity drive.
- Remove a disk — Eight.ly moves its data off onto the rest of the pool first, then removes it from the array once it's empty. You can stop an in-progress move if you change your mind.
- Replace a failed disk — swap in the new hardware and tell Eight.ly to replace and rebuild; SnapRAID reconstructs the disk's contents from parity.
Each of these is transactional the same way array creation is: a mid-flow failure rolls back rather than leaving the array half-changed.
SnapRAID parity is invalidated when you change drives
After adding or removing a drive, run a SnapRAID sync before relying on parity protection.
Parity Protection (SnapRAID)¶
SnapRAID protects your data by calculating parity across all pool drives. If a drive fails, SnapRAID can reconstruct its contents from the parity data.
Key differences from traditional RAID:
- Not real-time. Parity is calculated on a schedule (or manually). Files written between syncs are unprotected until the next sync runs.
- Drives are independent. Each drive is a normal filesystem you can read individually. If SnapRAID itself breaks, your data is still on the drives.
- Mixed drive sizes work. Parity drives must be as large as or larger than the biggest data drive.
Configuring SnapRAID¶
- Go to Storage > SnapRAID
- Designate one or more parity drives (1 parity drive protects against 1 drive failure; 2 protects against 2)
- Set a sync schedule
- Enable email or webhook alerts for sync failures
Run a manual sync after large imports
If you just moved a lot of data onto the server, don't wait for the scheduled sync. Run Sync Parity from the Storage page to protect it immediately.
Quick Actions¶
The Storage page's Quick Actions card gives you one-click access to common operations. What's shown depends on your storage strategy:
| Action | What it does |
|---|---|
| Refresh | Re-scan drive status and pool metrics |
| View Logs | Show recent SnapRAID sync/scrub logs |
| Start Array | Mount the storage pool |
| Stop Array | Unmount the storage pool (stops all file sharing) |
| Sync Parity | Run a SnapRAID parity sync now |
| Scrub Data | Verify data integrity against parity |
| Test SnapRAID | Run a SnapRAID self-test |
| Balance Cache | Rebalance a ZFS pool (ZFS storage only) |
| Spin Down | Spin down idle drives to save power and reduce noise |
| SMART Test | Run a short or extended SMART self-test on selected drives |
Set up alerts early
Go to Settings > Notifications and configure email or webhook alerts. A failing drive gives SMART warnings days or weeks before it dies. If you're not watching, you'll miss the window to replace it safely.
After an unclean shutdown¶
If the box goes down without a clean stop — a power loss, a crash — Eight.ly notices at the next boot and offers a parity check. It's an offer, not an automatic run: checking parity across a large array can take hours, so the dashboard tells you what happened and lets you decide when to run it.
The Shelver (Cache Tiering)¶
The Shelver — Eight.ly's scheduled cache-to-array mover — gives you fast-drive write speeds without the cost of an all-fast-drive array.
How it works: new data lands on your designated cache drive(s) first. On a schedule, the Shelver moves files older than a configurable threshold off the cache and onto the MergerFS pool, preserving hardlinks so linked files (for example an *arr download hardlinked into your library) move together, never as orphans. Files are moved, not copied — the source is removed once the transfer completes.
Configuration¶
Go to Settings > Storage > Cache Mover settings:
- Set the move schedule (the Shelver runs at 03:00 by default)
- Set the age threshold — files older than this get moved
- Set a minimum free-space floor on the cache — the Shelver stops promoting a linked file set rather than push the cache below it
The Shelver doesn't route writes for you
The Shelver only moves aged files off the cache on a schedule. It does not configure MergerFS to send new writes to the cache first — getting apps to write to the cache drive is a separate step (point the app at the cache path, or set a MergerFS write policy).
ZFS Pool Management¶
ZFS is the alternative storage strategy for people who want copy-on-write semantics, inline checksums, and native snapshots. It replaces MergerFS + SnapRAID for those use cases and works best with matched drive sizes — mismatched drives waste capacity, so if your drives vary in size, Media Server Storage is the better choice.
Importing an existing pool is a terminal step
Creating and managing ZFS pools works from the Storage page. Importing a pool built on another system doesn't have a dashboard flow — Eight.ly appliances don't have SSH access by default, so do this from the dashboard's built-in web terminal with zpool import.
Creating a ZFS Pool¶
- Go to Storage > ZFS
- Create a pool
- Select drives and choose a topology:
- Mirror — 2+ drives, mirrored (like RAID 1)
- RAIDZ1 — 3+ drives, single parity (like RAID 5)
- RAIDZ2 — 4+ drives, double parity (like RAID 6)
- Set a mount point and create
Scrubs¶
ZFS scrubs verify every block on disk against its checksum. Schedule them from Storage > ZFS or run manually. A scrub on a large pool takes a few hours.
Snapshots¶
ZFS snapshots are instant, space-efficient point-in-time copies:
- Select a pool or dataset
- Create a snapshot, named or timestamped
- Roll back anytime from the snapshot list
Snapshots are useful as pre-upgrade checkpoints — take one before changing an app's config, roll back if something breaks.
Drive Health and SMART Monitoring¶
The SMART tab on the Storage page shows the health of every drive in your system:
- Total / Used / Free capacity across the pool
- Protection status — whether SnapRAID parity is current
- Drive count and health
Each drive shows its SMART attributes: temperature, power-on hours, reallocated sectors, and pending sectors. Drives with concerning SMART values get flagged.
Shutting down cleanly¶
A graceful shutdown from the dashboard stops things in an order that protects the array: virtual machines, then LXC containers, then your apps and the Docker service itself, then the Shelver, and finally the storage array — only then does the box power off. Eight.ly remembers what was running before it started stopping things, so after the next boot it starts those apps, VMs, and LXC containers back up automatically. Anything you had stopped by hand beforehand stays stopped.
Common Tasks¶
Expand the Pool¶
Add a disk to the array from the Storage page (see Adding, Removing, and Replacing Drives above). If using SnapRAID, run a sync afterward. Pool capacity increases immediately.
Replace a Failed Drive¶
If SnapRAID parity is current, use Replace and rebuild from the Storage page: install the replacement drive, tell Eight.ly to replace the failed one, and it reconstructs the data from parity onto the new drive.
Check Pool Status¶
The Storage page's Overview tab shows everything at a glance — capacity, protection status, and drive health. The MergerFS, SnapRAID, and SMART tabs give per-drive detail, sync logs, and SMART history.
Related Guides¶
- File Sharing — expose your storage pool over SMB and NFS
- Backup — back up your server with Eight.ly Backup Server
- Monitoring — track disk I/O and storage metrics in Grafana
