Difference between revisions of "Talk:LiveOS image"

From Sugar Labs
Jump to navigation Jump to search
(Sources, more information about merge steps. Signed.)
Line 2: Line 2:
 
I like that result better than just having to increase the overlay size without bounds.
 
I like that result better than just having to increase the overlay size without bounds.
  
Tested and working on Fedora 17, all commands as root. You will need disk space sufficient for the uncompressed size of the root filesystem, 4 GB in the case of Fedora 17 LiveCD/USB. I assume only one image and one user on the machine.
+
Tested and working on a Fedora 17 x86_64 Live image installed via livecd-iso-to-disk to a USB stick, all commands as root. You will need disk space sufficient for the uncompressed size of the root filesystem, 4 GB in the case of Fedora 17. I assume only one image and one user on the machine.
  
 
Step 1: Get access to read-write base image, note that I got loop2 and loop3 here, YMMV.  
 
Step 1: Get access to read-write base image, note that I got loop2 and loop3 here, YMMV.  

Revision as of 11:55, 19 August 2012

It turns out that it is possible to merge down the persistent overlay into the base image, if you have access to another OS installation and sufficient disk space. I like that result better than just having to increase the overlay size without bounds.

Tested and working on a Fedora 17 x86_64 Live image installed via livecd-iso-to-disk to a USB stick, all commands as root. You will need disk space sufficient for the uncompressed size of the root filesystem, 4 GB in the case of Fedora 17. I assume only one image and one user on the machine.

Step 1: Get access to read-write base image, note that I got loop2 and loop3 here, YMMV.

mkdir squashfs
mount -o loop /run/media/*/LIVE/LiveOS/squashfs.img squashfs/
cp squashfs/LiveOS/ext3fs.img .

Step 2: Set up loopback and device mapper devices for persistent overlay, base device mapper and snapshot.

losetup -f ext3fs.img 
losetup -f /run/media/*/LIVE/LiveOS/overlay-* 
echo 0 $(blockdev --getsize /dev/loop2) linear /dev/loop2 0 |dmsetup create orig
echo 0 $(blockdev --getsize /dev/mapper/orig) snapshot /dev/mapper/orig /dev/loop3 p 8 | dmsetup create top

Step 3: Stop the snapshot device and merge the snapshot with the base

dmsetup suspend top
echo 0 $(blockdev --getsize /dev/loop2) snapshot-merge /dev/loop2 /dev/loop3 p 8 | dmsetup create mergeomatic && dmsetup status mergeomatic

Step 4: Wait for merge to complete. When the status report on mergeomatic reports allocated blocks equal to the metadata blocks, the merge is finished.

dmsetup status

Step 5: Remove the merge target.

dmsetup remove mergeomatic

Step 6: Set the top device to no snapshot, and inspect the filesystem for results, if desired.

echo 0 $(blockdev --getsize /dev/loop2) linear /dev/loop2 0 | dmsetup load top
dmsetup resume top
mkdir root
mount /dev/mapper/top root
cd root
chroot .

Step 7: Clean up.

cd ..
umount root
dmsetup remove top
dmsetup remove orig
losetup -d /dev/loop2
losetup -d /dev/loop3
umount squashfs/ 

Step 8: Copy the root filesystem image back into the squashfs image, you may need -noappend

mkdir LiveOS
mv ext3fs.img LiveOS
rm /run/media/*/LIVE/LiveOS/squashfs.img
mksquashfs LiveOS /run/media/*/LIVE/LiveOS/squashfs.img -keep-as-directory

Sources:

--Andrew Gilmore