Persistence by Choice
The immutable nature of Lightwhale offers clear advantages, but in order to install, configure, run containers, and write data, a writable filesystem is required. And for the system to be genuinely useful, such changes must persist across reboots.
The Data Filesystem
Lightwhale provides both temporary and persistent writability through an automated subsystem activated early during startup. This mounts the data filesystem at /mnt/lightwhale-data .
All data written by Lightwhale is kept within a single subdirectory: /mnt/lightwhale-data/lightwhale-state . This in turn serves as the writable upper layer in an overlayfs stack, with the immutable root as the lower layer.
By default, Lightwhale mounts a volatile tmpfs as its data filesystem. When persistence is enabled, the data filesystem instead resides on a storage device and is mounted accordingly.
Key Directories
The data filesystem overlay does not cover the entire root filesystem; that would defeat the purpose of immutability and Lightwhale altogether. Instead, the writable overlays apply only to a few strategic directories:
/etc For customizing system configuration, including networking, password, and sshd settings. /var For log and other application data. /home For user account customization, including authorized SSH keys, and cloning Git repositories with Docker and Swarm stacks.
Docker Data
Docker is configured with its data root directory located directly on the data filesystem, where all Docker runtime data is stored, including images, containers, volumes, and network state:
/mnt/lightwhale-data/lightwhale-state/docker
Enable Persistence
Persistence must be enabled explictly by writing the magic header to the storage device to be used, e.g. /dev/sdx :
echo "lightwhale-please-format-me" | sudo dd conv=notrunc of=/dev/sdx
Multiple storage devices are supported to have a magic header written, and will be assembled into a Btrfs RAID1 volume.
The next time Lightwhale boots up, it will detect the magic disk, format it, and make it the data filesystem .
Managing Persistence
The persistence subsystem is initiated from /etc/init.d/S11persistence , and proceeds through a sequence of detailed steps, executed fully automatically: