Mounting Filesystem over existing directory

Michael Conrad mconrad at intellitree.com
Fri Jun 1 20:56:12 UTC 2012


On 6/1/2012 2:42 AM, Laurent Bercot wrote:
>> Out of curiosity, Is is possible to free up the resources used by
>> initramfs. I would be very interested in knowing how this can be done.
Initramfs is really just a tmpfs which the kernel copies files into at 
boot-time.  You free it by removing all files from it, and unmounting it 
(after switch_root, because you can't unmount "/").

My initramfs was only 5MB (busybox, rsync, dropbear-sshd, some symlinks 
and a script) so I didn't care.  I want busybox loaded into ram for the 
entire life of the system, so I could just "rm" the others to reclaim a 
tiny bit of ram and that's pretty much optimal for me.

>> In my case, i am developing a system for an embedded system with NAND
>> storage. Due to NAND corruption issues that mostly arise right now is
>> when system is powered off while NAND writes are being performed (i.e.
>> when files are being flushed out to the filesystem). This corruption
>> makes the system un-bootable. Due to this issue i want to make the
>> NAND filesystem readonly. Only at the time of system updates the
>> filesystem will be remounted in rw mode. This still leaves room for
>> the corruption to occur during system updates.
>   There's only one way to guarantee bootability even with updates:
> have *two* read-only partitions for the rootfs. Boot on one; when you
> download an update, write the binary file to the other one. Reboot. If
> it boots, use the new partition as your new rootfs; if not, fall back
> on the old one (it still works) and report a failure.
>> Right now i am thinking of having a initramfs filesystem with a
>> recovery system that starts a device recovery process if the system
>> partition cannot be mounted. So the intention is:
>   You can do that, but that means your device will be non-functional
> (i.e. stuck in recovery mode) at the first failing update. (And trust
> me, failing updates WILL happen.) Your users will complain, and
> rightfully so.
>   Better have two rootfs partitions so you can always guarantee that
> one of them boots into a functional system.

Interesting.  But where do you have the logic for choosing a boot 
device?  What if your new partition is fine, but core services fail to 
load?  How do you recognize that you need to start over with a different 
root partition?

My case is also an embedded system.  I just wanted reliability, system 
updates from USB drive, and the ability to power-off the system without 
notice (thus mounting read-only).  My init script mounts all the USB 
devices looking for a system update (squashfs file), and if it finds one 
it mounts the main partition read/write and uses rsync to copy the image 
to the local drive, then unmounts everything.  Then, it mounts the main 
partition read-only, creates the union, and execs 'init'.  In practice, 
it runs very fast, especially if no USB devices are present.

If anything goes wrong with the new version, I just pop in a USB drive 
with the old version.  The initramfs is simple enough that it never 
needs changed.

-Mike


More information about the busybox mailing list