Putting It Together With AuFS
Various parts of the final root filesystem are now mounted read-only under
separated folders in /memory/bundles. Core Linux system utilities and libraries
such as /bin/bash or /lib/ld-linux.so are located in /memory/bundles/01-core.sb/,
files related to KDE desktop environment can be found in /memory/bundles/04-kde.sb/,
and so on. Combining them into a single root filesystem, which is even writable,
is only possible thanks to AUFS - an union-like filesystem developed by Mr. Junjiro
Okajima. AUFS is capable of taking several folders (so called branches) and combining
them together to a single directory. That is exactly what happens next, the separated
parts are combined, together with a directory /memory/changes/, to AUFS union,
which gets mounted at /memory/union.
The empty directory /memory/changes is writable, thus the entire AUFS
mount in /memory/union happens to be writable as well. All new or changed files
inside the union are copied-up to this empty directory before the system creates
or modifies them. Since the directory for changes resides on tmpfs (that
is in RAM), all new and modified files are stored in RAM and thus are lost on
Yet if Slax is started from a writable media such as USB device or hard disk,
it recognizes that and mounts the writable drive over /memory/changes before it
is joined with the other branches in union, which effectively means that changed
and new files will be stored on the boot device rather than in RAM, and reboot
won't erase them. This feature is called Persistent Changes and can be turned
on or off by a boot menu setting.
Switching To The Real Root
At this point, fully writable final root filesystem has been built in /memory/union.
The temporary init's life is coming to its end. It uses pivot_root and
chroot system calls to make /memory/union the new root, transferring
the temporary tmpfs root to /mnt/live/ in the new root. Blue and green stars at
the diagram below denote what moves where. Finally, the real /sbin/init
from aufs root filesystem is executed. The booting of Slax operating system just
Adding Modules To Slax On The Fly
The root filesystem is writable and we could install new software packages
while running Slax just the usual way, by unpacking them. Yet there is another
possibility to add new files and directories to Slax on the fly without installing
any packages. Thanks to the fact Slax is running with AUFS as root, we can take
some other squashfs compressed filesystem, loop-mount it over a directory which
resides outside of the aufs tree (for example over /mnt/live/memory/bundles/name.sb/
which is on tmpfs), and then issue a remount command which adds the newly mounted
directory to aufs as a new branch.
All the files and directories from the new squashfs module will instantly appear
as like if they were installed in the system from the beginning, while decompression
is done on the fly, only for the files which are actually accessed.
Similarly, we can remove a previously added AUFS branch (mounted squashfs)
from the aufs root by another remount command. The files which were part of the
branch will instantly disappear from the system, which effectively uninstalls
When Slax is shutting down either for reboot or for system power off, it performs
all the standard tasks as every other Linux would do, like unmounting all partitions
mounted by the user, terminating all processes, and so on. But since the boot
device may be still mounted and used for persistent changes at the very end, some
more steps need to be done before the real power off is issued, to ensure the
boot device is cleanly unmounted.
Instead of turning the system off at the moment when init thinks it should
do that, Slax executes a cleanup script which resides in /mnt/live/lib/cleanup.
This script calls pivot_root and chroot as we know it in order to change the root
filesystem back to the tmpfs again. That is exactly the opposite of what was described
in the sections called Switching to the real root.
When the root filesystem is switched back to tmpfs, 'telinit u' is
executed to inform the current init process to terminate (it would otherwise block
the union from unmounting) and re-execute the cleanup script as a new init. The
union is no longer blocked since there are no open files and no running processes
on it any longer. It is properly unmounted, all loop-mounts disconnected and the
boot device is cleanly ejected. At the end, the computer reboots or shuts down,
depending on what the user intended to do.
Download the latest release of Slax Linux at Slax.org.