What's an easy way to to use a union filesystem (read-only SquashFS + R/W overlay) as /? I'm thinking of using a custom boot script as the kernel init= argument. The script would mount the SquashFS + overlay, then chroot into the mounted filesystem and run the real /sbin/init... however I'm not sure how well this works with systemd init, and I'm wondering if there isn't a simpler option.
Asked
Active
Viewed 5,164 times
3
Gilles 'SO- stop being evil'
- 807,993
- 194
- 1,674
- 2,175
Anul
- 175
- 2
- 9
-
2Why not do this from an initramfs? Mounting the root filesystem is what they're for. What distribution is your system based on? What bootloader do you use? – Gilles 'SO- stop being evil' Jun 16 '15 at 22:52
-
1Besides chiming in to endorse the above comment, there is [this](http://unix.stackexchange.com/a/123257/52934). If at all possible, though, avoid UnionFS/awfs/etc like the plague. – mikeserv Jun 16 '15 at 23:26
-
@Gilles: Ubuntu; and I guess I've never understood much about initrd's, but I'm willing to learn – Anul Jun 17 '15 at 00:55
1 Answers
2
That configuration is related to a major application category called Live Linux systems. Common implementations include Ubuntu Live CD (with casper) and its derivative, Debian Live (with live-boot). They are using layered filesystems aufs for /, namely tmpfs on squashfs.
user@debian:~$ df -h
Filesystem Size Used Avail Use% Mounted on
aufs 501M 7.7M 493M 2% /
tmpfs 201M 4.4M 196M 3% /run
/dev/sr0 416M 416M 0 100% /lib/live/mount/medium
/dev/loop0 302M 302M 0 100% /lib/live/mount/rootfs/filesystem.squashfs
tmpfs 501M 0 501M 0% /lib/live/mount/overlay
devtmpfs 10M 0 10M 0% /dev
tmpfs 501M 0 501M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 501M 0 501M 0% /sys/fs/cgroup
tmpfs 501M 0 501M 0% /tmp
user@debian:~$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=204868k,mode=755)
/dev/sr0 on /lib/live/mount/medium type iso9660 (ro,noatime)
/dev/loop0 on /lib/live/mount/rootfs/filesystem.squashfs type squashfs (ro,noatime)
tmpfs on /lib/live/mount/overlay type tmpfs (rw,relatime)
tmpfs on /lib/live/mount/overlay type tmpfs (rw,noatime,mode=755)
aufs on / type aufs (rw,noatime,si=b1cf5f036a329049,noxino)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=10240k,nr_inodes=124332,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=22,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
And it seems current Debian jessie based Live CD runs systemd flawlessly.
I recommend you to download a ISO here and try it out on VM host (VirtualBox, KVM, etc.). Debian Live has a relatively sophisticated way to build live images (live-build), so you can easily create your own Live Linux distribution based on Debian Live.
yaegashi
- 12,108
- 1
- 36
- 41
-
... and use a "Live HDD", so to speak? I suppose that might be interesting. Though I worry about upgradability, esp. upgrading the kernel (which isn't normally done with a live cd) – Anul Jun 17 '15 at 00:56
-
@Anul live-build has [built-in support for USB-HDD](http://live.debian.net/manual/2.x/html/live-manual.en.html#186). You can write the image into your HDD using `dd` and boot off from it much like USB sticks. Regarding upgrading, you will need to replace a squashfs image in huge size, so you might want to apply a binary patch with `bsdiff` in your upgrading script. Fortunately binary diff of 2 squashfs images tends to fit in reasonably small size because squashfs uses per file / block aligned compression. – yaegashi Jun 17 '15 at 02:02
-
I understand the need to periodically "flatten" changes into a (revised) squashfs image to save space. But I'm not sure how easy it is to upgrade e.g. the kernel without doing a "Live HDD" rebuild. – Anul Jun 17 '15 at 02:04
-
@Anul I think live systems are not suitable for long term consecutive use in the common manner of Linux distros. With a persist rw partition, you can preserve filesystem changes by package upgrades, but for example kernel upgrades won't work as expected at all. It would be a pain to dodge package script errors and replace vmlinuz/inird in the live partition by hand every time. Live systems rather suit well with embedded applications, which feature a pre-built fixed system and upgrades without any user intervention, much like ChromeOS or Android. – yaegashi Jun 17 '15 at 08:17
-
That's exactly what I thought. Which is why I might prefer a unionfs solution with a small "boot distro" (as described in the question) – Anul Jun 17 '15 at 11:55
-
@yaegashi - somehow puppy linux and various slackware derivatives have been doing it for many years. – mikeserv Jun 17 '15 at 16:57