User:Quozl/fs-update-skip-unused-blocks: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
By skipping unused blocks during fs-update, the installation time is decreased. |
|||
== New Builds == |
|||
Things to do: |
|||
*testing, using [http://dev.laptop.org/~quozl/tinycore/mc.zd mc.zd] a [[Tiny Core Linux]] build, 14Mb download, 64Mb install, takes about five seconds for fs-update, |
|||
*olpc-os-builder, merge zhashfs changes that skip patterned blocks, see [http://lists.laptop.org/pipermail/devel/2011-April/031852.html patch], but fix the strcat mistake, |
|||
*olpc-os-builder, merge sd card image scripts that create patterned blocks, see [http://lists.laptop.org/pipermail/devel/2011-April/031853.html patch], |
|||
*openfirmware, gain agreement on meaning of zblocks: #eblocks parameter, and then correct regression in q3a64 regarding use of the parameter, see [http://lists.laptop.org/pipermail/devel/2011-April/031851.html patch], release q3a65, |
|||
== Existing Builds == |
|||
How to remove the unused blocks from a .zd file. |
How to remove the unused blocks from a .zd file. |
||
Line 5: | Line 17: | ||
Works on Q3A62. Generates a minor warning on Q3A63 and Q3A64, but there is no missing data. Q3A65 may have the fix. |
Works on Q3A62. Generates a minor warning on Q3A63 and Q3A64, but there is no missing data. Q3A65 may have the fix. |
||
== Pristine Install == |
=== Pristine Install === |
||
Select the .zd file you wish to process. In this example, I use os860.zd. |
Select the .zd file you wish to process. In this example, I use os860.zd. |
||
Line 13: | Line 25: | ||
fs-update u:\os860.zd |
fs-update u:\os860.zd |
||
== Imaging == |
=== Imaging === |
||
Boot Tiny Core Linux from USB on the laptop, using a USB drive with at least 4GB free space. |
Boot Tiny Core Linux from USB on the laptop, using a USB drive with at least 4GB free space. |
||
Line 25: | Line 37: | ||
(the block count is the decimal conversion of the hexadecimal 7331 found in the first line of the os860.zd file). |
(the block count is the decimal conversion of the hexadecimal 7331 found in the first line of the os860.zd file). |
||
== Pattern Fill Unused Blocks == |
=== Pattern Fill Unused Blocks === |
||
On a high-speed system, mount the USB drive. |
On a high-speed system, mount the USB drive. |
||
Line 61: | Line 73: | ||
(requires fill-free-blocks.c, see http://dev.laptop.org/~quozl/fs-update-skip-unused-blocks). |
(requires fill-free-blocks.c, see http://dev.laptop.org/~quozl/fs-update-skip-unused-blocks). |
||
== Generate .zd File == |
=== Generate .zd File === |
||
Regenerate the .zd file, skipping all blocks with the pattern: |
Regenerate the .zd file, skipping all blocks with the pattern: |
Revision as of 06:02, 21 April 2011
By skipping unused blocks during fs-update, the installation time is decreased.
New Builds
Things to do:
- testing, using mc.zd a Tiny Core Linux build, 14Mb download, 64Mb install, takes about five seconds for fs-update,
- olpc-os-builder, merge zhashfs changes that skip patterned blocks, see patch, but fix the strcat mistake,
- olpc-os-builder, merge sd card image scripts that create patterned blocks, see patch,
- openfirmware, gain agreement on meaning of zblocks: #eblocks parameter, and then correct regression in q3a64 regarding use of the parameter, see patch, release q3a65,
Existing Builds
How to remove the unused blocks from a .zd file.
This procedure takes a .zd file such as os860 from 10.1.3, and creates a new .zd file that has the unused blocks removed, which results in decreased installation time. In my tests, installation time reduces from 14 minutes to 7 minutes on a 4GB microSD.
Works on Q3A62. Generates a minor warning on Q3A63 and Q3A64, but there is no missing data. Q3A65 may have the fix.
Pristine Install
Select the .zd file you wish to process. In this example, I use os860.zd.
Use fs-update to install the file on a laptop, but do not boot from it:
fs-update u:\os860.zd
Imaging
Boot Tiny Core Linux from USB on the laptop, using a USB drive with at least 4GB free space.
Copy the microSD card to the USB drive as an image:
mount /dev/sda1 /mnt dd if=/dev/mmcblk0 of=/mnt/fs.img bs=131072 count=29489 umount /mnt
(the block count is the decimal conversion of the hexadecimal 7331 found in the first line of the os860.zd file).
Pattern Fill Unused Blocks
On a high-speed system, mount the USB drive.
Create a pseudo-random pattern fill, which is the same size as the filesystem block size:
img=fs.img dd if=/dev/urandom of=$img.fill bs=4096 count=1 2>/dev/null
Obtain the partition offsets in bytes:
parted $img "unit B print"
In my test, the output was:
Number Start End Size Type File system Flags 1 4194304B 71303167B 67108864B primary ext2 boot 2 71303168B 3865051135B 3793747968B primary ext3
Setup loop block devices for the partitions within the image:
losetup -o 4194304 /dev/loop0 $img losetup -o 71303168B /dev/loop1 $img
Fill free blocks in the filesystems with the pseudo-random pattern:
fill-free-blocks -v /dev/loop0 $img.fill fill-free-blocks -v /dev/loop1 $img.fill
Disassociate the loop block devices:
losetup -d /dev/loop0 losetup -d /dev/loop1
(requires fill-free-blocks.c, see http://dev.laptop.org/~quozl/fs-update-skip-unused-blocks).
Generate .zd File
Regenerate the .zd file, skipping all blocks with the pattern:
zhashfs 0x20000 sha256 $img /tmp/fs.zsp /tmp/fs.zd
(requires a patched version of zhashfs, see http://dev.laptop.org/~quozl/fs-update-skip-unused-blocks).
The .zd file is almost the same size, but will install faster. The block display by OpenFirmware will skip forward over unused blocks.