Docker Storage Setup
Lium expects every node's Docker daemon to use the overlay2 storage driver backed by an xfs filesystem mounted with pquota and ftype=1. The lium CLI inspects the host, formats the target device, and migrates /var/lib/docker for you.
- Required today if you want to enable GPU splitting — preflight blocks the portal toggle until the storage driver and backing filesystem match.
- Required for every node soon — Lium will extend this requirement to all nodes regardless of GPU splitting, so completing this setup now future-proofs the host.
The rest of this page covers the host-side setup and verification. Once the host is ready, GPU-splitting providers finish the portal-side step from Managing Nodes → Setting Minimum GPU Count for Rental.
Before You Run the CLI​
The --device argument is the storage target Lium will use for Docker storage.
You do not need to:
- pre-format it as XFS
- mount it at
/var/lib/docker - manually configure
overlay2
Lium handles partition creation, XFS formatting, mount setup, and Docker storage migration after the target passes safety checks.
Safe Device States​
Lium will use the device when it is one of these states:
- a blank whole disk
- a whole disk with one unambiguous free-space region
- an unused partition with no filesystem
- an empty XFS partition with
ftype=1
Device States That Will Be Rejected​
Lium will skip or reject the device when it is:
- the root disk
- the current Docker backing device
- mounted or otherwise in use
- a partition with an existing non-XFS filesystem
- a non-empty XFS partition
- a disk with an ambiguous layout
- a loop or device-mapper target
Prepare the Device​
Recommended Beginner Path​
The safest path is to attach a fresh extra SSD/NVMe and leave it unused and unmounted before you run the CLI.
- Attach a new extra disk.
- Make sure it is not your root disk.
- Make sure it is not the device currently backing
/var/lib/docker. - Pass that whole-disk path to the CLI.
Quick Checks​
Use these commands before running setup:
# See the candidate device, filesystem, and mount state
lsblk -o NAME,PATH,TYPE,FSTYPE,SIZE,MOUNTPOINTS
# See which device backs /
findmnt /
# See which device currently backs Docker storage
findmnt /var/lib/docker
If you want to reuse an existing XFS partition, confirm it is XFS with ftype=1:
sudo xfs_info /dev/<partition>
Common Remediation​
- If the device is mounted, unmount it first and confirm nothing important is using it.
- If the device has old filesystems or old data, the safest option is to use a different empty disk.
- If you want to reuse the same disk and it is safe to erase, reset it to a clean disk or unused partition before rerunning the CLI.
If you only have one drive, there is no supported single-disk path. The lium gpu-splitting CLI explicitly rejects the root disk and the disk currently backing /var/lib/docker, and this page does not document a manual workaround. Reusing the only drive on the host would mean repartitioning the live system — that is risky, unsupported, and not covered by the CLI safety checks. The only supported options today are: attach a second disk, or reinstall the host onto an XFS root before bringing the node back online.
Example: reset a dedicated extra disk so Lium can partition and format it itself:
# Warning: destructive. Replace /dev/nvme1n1 with the extra disk you want to erase.
sudo umount /dev/nvme1n1p1 2>/dev/null || true
sudo parted -s /dev/nvme1n1 mklabel gpt
After that, rerun:
lium gpu-splitting check --device /dev/nvme1n1
Run the Storage Setup​
Use the CLI in this order:
# Inspect the host and confirm the device is eligible
lium gpu-splitting check --device /dev/<device>
# Apply the storage migration
sudo lium gpu-splitting setup --device /dev/<device>
# Verify the final state
lium gpu-splitting verify
What each command does:
checkinspects the host and prints the exact storage plan without changing anythingsetupperforms the Docker storage migrationverifyconfirms the final Docker storage state
The commands live under lium gpu-splitting because GPU splitting is the first feature that depends on this storage layout. The migration itself is a generic Docker storage setup and the same commands are used regardless of whether you plan to enable GPU splitting.
setup stops Docker, formats the target partition as XFS, and remounts /var/lib/docker. It backs up existing Docker data first, but you should have an independent backup before running it on a host with live containers.
Verify the Host​
After setup, confirm these requirements are satisfied:
- Docker storage driver is
overlay2 - Docker backing filesystem is
xfs Supports d_typeistrue/var/lib/dockeris mounted withpquotaorprjquota
Quick verification:
docker info
findmnt /var/lib/docker
lium gpu-splitting verify
Manual setup​
If you can't or don't want to use the CLI, the manual sequence is: stop Docker → format the target partition as XFS with ftype=1 → mount it at /var/lib/docker with pquota → restore the previous contents → restart Docker.
# Stop Docker
sudo systemctl stop docker docker.socket
# Make sure /etc/docker/daemon.json sets the overlay2 storage driver
# {
# "storage-driver": "overlay2"
# }
# Format the new partition (replace $new_partition)
new_partition=<your-new-partition-device-name>
sudo rsync -aXS /var/lib/docker/ /tmp/docker-backup/
sudo mkfs.xfs -n ftype=1 "$new_partition" -f
sudo mount -t xfs -o defaults,inode64,pquota "$new_partition" /var/lib/docker
sudo rsync -aXS /tmp/docker-backup/ /var/lib/docker/
# Make the mount permanent
UUID=$(sudo blkid -s UUID -o value "$new_partition")
echo "UUID=${UUID} /var/lib/docker xfs defaults,inode64,pquota 0 2" | sudo tee -a /etc/fstab
# Start Docker
sudo systemctl start docker
Then run docker info and confirm Storage Driver: overlay2, Backing Filesystem: xfs, Supports d_type: true.
Next step (GPU splitting only)​
If you're enabling GPU splitting, finish the portal-side configuration:
- Open the Managing Nodes guide.
- Follow the Setting Minimum GPU Count for Rental steps.
For nodes that aren't using GPU splitting, no further action is needed — the host is ready and stays ready when the requirement extends to all providers.
Troubleshooting​
If the CLI does not use the device you passed, check these first:
- it is not the root or current Docker device
- it is not mounted
- it does not contain an existing non-XFS filesystem
- it is not a non-empty XFS partition
- the disk layout is simple enough for Lium to classify safely
If you are unsure, the most reliable fix is to use a fresh extra disk and rerun lium gpu-splitting check --device /dev/<device>.