Jump to content

Talk:LiveOS image: Difference between revisions

From Sugar Labs
Merge in that persistent overlay, don't expand it! Version 0.1, having formatting issues
 
m Fixed formatting
Line 5: Line 5:


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.  
<nowiki>mkdir squashfs
<nowiki>mkdir squashfs
mount -o loop /run/media/*/LIVE/LiveOS/squashfs.img squashfs/
mount -o loop /run/media/*/LIVE/LiveOS/squashfs.img squashfs/
cp squashfs/LiveOS/ext3fs.img .</nowiki>
cp squashfs/LiveOS/ext3fs.img .</nowiki>


Step 2: Set up loopback and device mapper devices for persistent overlay, base device mapper and snapshot.
Step 2: Set up loopback and device mapper devices for persistent overlay, base device mapper and snapshot.
<nowiki>losetup -f ext3fs.img  
<nowiki>losetup -f ext3fs.img  
losetup -f /run/media/*/LIVE/LiveOS/overlay-*  
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/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</nowiki>
echo 0 $(blockdev --getsize /dev/mapper/orig) snapshot /dev/mapper/orig /dev/loop3 p 8 | dmsetup create top</nowiki>


Step 3: Stop the snapshot device and merge the snapshot with the base
Step 3: Stop the snapshot device and merge the snapshot with the base
<nowiki>dmsetup suspend top
<nowiki>dmsetup suspend top
echo 0 $(blockdev --getsize /dev/loop2) snapshot-merge /dev/loop2 /dev/loop3 p 8 | dmsetup create mergeomatic && dmsetup status mergeomatic
echo 0 $(blockdev --getsize /dev/loop2) snapshot-merge /dev/loop2 /dev/loop3 p 8 | dmsetup create mergeomatic && dmsetup status mergeomatic
dmsetup status
dmsetup status
dmsetup remove mergeomatic</nowiki>
dmsetup remove mergeomatic</nowiki>


Step 4: Set the top device to no snapshot, and inspect the filesystem for results, if desired.
Step 4: Set the top device to no snapshot, and inspect the filesystem for results, if desired.
<nowiki>echo 0 $(blockdev --getsize /dev/loop2) linear /dev/loop2 0 | dmsetup load top
<nowiki>echo 0 $(blockdev --getsize /dev/loop2) linear /dev/loop2 0 | dmsetup load top
dmsetup resume top
dmsetup resume top
mkdir root
mkdir root
mount /dev/mapper/top root
mount /dev/mapper/top root
cd root
cd root
chroot .</nowiki>
chroot .</nowiki>


Step 5: Clean up.
Step 5: Clean up.
<nowiki>cd ..
<nowiki>cd ..
umount root
umount root
dmsetup remove top
dmsetup remove top
dmsetup remove orig
dmsetup remove orig
losetup -d /dev/loop2
losetup -d /dev/loop2
losetup -d /dev/loop3
losetup -d /dev/loop3
umount squashfs/</nowiki>  
umount squashfs/</nowiki>  


Step 6: Copy the root filesystem image back into the squashfs image, you may need -noappend  
Step 6: Copy the root filesystem image back into the squashfs image, you may need -noappend  
<nowiki>mksquashfs ext3fs.img /run/media/*/LIVE/LiveOS/squashfs.img</nowiki>
<nowiki>mksquashfs ext3fs.img /run/media/*/LIVE/LiveOS/squashfs.img</nowiki>

Revision as of 19:31, 16 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 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.

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
 dmsetup status
 dmsetup remove mergeomatic

Step 4: 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 5: Clean up.

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

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

mksquashfs ext3fs.img /run/media/*/LIVE/LiveOS/squashfs.img