I’ve looked into this a little further and it does look like a genuine bug.
Booting a Fedora Linux 39 LiveCD and running the lsblk and losetup commands shows that it did try to create an overlay. But the overlay file appears to have been “deleted”.
[root@localhost-live ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 1.9G 1 loop
loop1 7:1 0 7.6G 1 loop
├─live-rw 253:0 0 7.6G 0 dm /
└─live-base 253:1 0 7.6G 1 dm
loop2 7:2 0 32G 0 loop
└─live-rw 253:0 0 7.6G 0 dm /
sda 8:0 0 149G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 148G 0 part
sdb 8:16 0 149G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 148G 0 part
sr0 11:0 1 2G 0 rom /run/initramfs/live
sr1 11:1 1 1024M 0 rom
zram0 252:0 0 3.7G 0 disk [SWAP]
[root@localhost-live ~]# losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop1 0 0 0 1 /LiveOS/rootfs.img 0 512
/dev/loop2 0 0 0 0 /overlay (deleted) 0 512
/dev/loop0 0 0 0 1 /LiveOS/squashfs.img 0 512
I have a hunch that /overlay was created in the initramfs and then lost when the “switch root” to /sysroot happend. There is, however, a workaround. If you look here, you can see that a different code-path is followed if you add rd.live.overlay.thin on the kernel command line. The alternate code-path stores the overlay on a tmpfs filesystem and yields the following results when booted.
[root@localhost-live ~]# cat /proc/cmdline
BOOT_IMAGE=/images/pxeboot/vmlinuz root=live:CDLABEL=Fedora-WS-Live-39-1-5 rd.live.image quiet rhgb rd.live.overlay.thin
[root@localhost-live ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 1.9G 1 loop
loop1 7:1 0 7.6G 1 loop
├─live-rw 253:1 0 7.6G 0 dm /
└─live-base 253:2 0 7.6G 1 dm
loop2 7:2 0 32G 0 loop
loop3 7:3 0 3.2G 0 loop
└─live-overlay-pool 253:0 0 32G 0 dm
└─live-rw 253:1 0 7.6G 0 dm /
loop4 7:4 0 32G 0 loop
└─live-overlay-pool 253:0 0 32G 0 dm
└─live-rw 253:1 0 7.6G 0 dm /
sda 8:0 0 149G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 148G 0 part
sdb 8:16 0 149G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 148G 0 part
sr0 11:0 1 2G 0 rom /run/initramfs/live
sr1 11:1 1 1024M 0 rom
zram0 252:0 0 3.7G 0 disk [SWAP]
[root@localhost-live ~]# losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop1 0 0 0 1 /LiveOS/rootfs.img 0 512
/dev/loop4 0 0 0 0 /initramfs/thin-overlay/data 0 512
/dev/loop2 0 0 0 0 /overlay (deleted) 0 512
/dev/loop0 0 0 0 1 /LiveOS/squashfs.img 0 512
/dev/loop3 0 0 0 0 /initramfs/thin-overlay/meta 0 512
We are not quite there yet though because the table for the live-rw device is using the minimum size of the two underlying devices (i.e. the size of the original squashfs.img from the DVD) instead of the full size of the writable overlay (this appears to be a second bug).
[root@localhost-live ~]# dmsetup table
live-base: 0 15876096 linear 7:1 0
live-overlay-pool: 0 67108864 thin-pool 7:3 7:4 1024 1024 0
live-rw: 0 15876096 thin 253:0 0 7:1
If you are quick about it, you can get away with using dmsetup to suspend the live-rw device, fix its sector mappings to use the full allocation of live-overlay-pool and then resume the live-rw device.
Here is a script you should be able to copy-and-paste into a terminal session running in a LiveCD environment to accomplish just that (thanks to Right To Your Own Devices By Kapil Hari Paranjape).
Paste and execute all these lines at once:
bash -e <<- 'END'
shopt -s lastpipe
dmsetup table live-rw | readarray -d ' ' -t table
table[1]=$(blockdev --getsz "$(udevadm info -rq name "/sys/dev/block/${table[3]}")")
dmsetup suspend live-rw
echo "${table[*]}" | dmsetup load live-rw
dmsetup resume live-rw
END
Before dmsetup table fix:
# dmsetup table
live-base: 0 15876096 linear 7:1 0
live-overlay-pool: 0 67108864 thin-pool 7:3 7:4 1024 1024 0
live-rw: 0 15876096 thin 253:0 0 7:1
After dmsetup table fix:
# dmsetup table
live-base: 0 15876096 linear 7:1 0
live-overlay-pool: 0 67108864 thin-pool 7:3 7:4 1024 1024 0
live-rw: 0 67108864 thin 253:0 0 7:1
And there is still one last thing to do – resize the filesystem to use full size of the (now larger) underlying device.
[root@localhost-live ~]# lsblk /dev/mapper/live-rw
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
live-rw 253:1 0 32G 0 dm /
[root@localhost-live ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/live-rw 7.4G 5.8G 1.6G 79% /
[root@localhost-live ~]# resize2fs /dev/mapper/live-rw
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/live-rw is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 4
The filesystem on /dev/mapper/live-rw is now 8388608 (4k) blocks long.
[root@localhost-live ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/live-rw 32G 5.8G 26G 19% /
Whew
, so many bugs. ![]()