Welcome to SparkyLinux forums
Zapraszamy również na polsko-języczne Forum https://forum.linuxiarze.pl

Linux - Load your root partition to RAM and boot it

Started by way12go, November 29, 2014, 01:46:36 PM

Previous topic - Next topic

way12go

http://reboot.pro/topic/14547-linux-load-your-root-partition-to-ram-and-boot-it/

This tutorial will guide you through the steps to modify your initramfs to load all files from / to a tmpfs. This will only work with Debian 5 or newer and Ubuntu 9 ? or any unix thats supports booting from a initramfs. Since this is a virtual filesystem in RAM, not a virtual harddisk, this has many advantages.

What you need:
* lots of RAM
* Debian based distribution or any that supports booting from initramfs
* mkinitramfs or a tool to build a new initramfs
* some linux knowledge
* no need to create an image
* no need for Grub4Dos
* no need for a "special driver"

Step 1:
Choose a distribution thats supports booting from initramfs. (like ubuntu)

Step 2:
Install to harddisk. Make sure you split it into multiple partitions (/, /boot, /home, swap, ...).

Step 3:
Boot your new system, install updates, drivers if neccessary (this will improve performance), strip it down to the minimum. Every file will be loaded to RAM ! A fresh install uses about 2 GB auf harddisk-space.

Step 4:
modify /etc/fstab :
* make a backup

cp /etc/fstab /etc/fstab.bak

find the line specifing the root partition and change it in:

none / tmpfs defaults 0 0

* save

Step 5:
edit the local script in your initramfs:

cd /usr/share/initramfs-tools/scripts/

* make a backup of /usr/share/initramfs-tools/scripts/local

cp local local.bak

* modify local, find this line:

# FIXME This has no error checking

# Mount root

mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}


* change it to:

# FIXME This has no error checking

# Mount root

#mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}

mkdir /ramboottmp

mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /ramboottmp

mount -t tmpfs -o size=100% none ${rootmnt}

cd ${rootmnt}

cp -rfa /ramboottmp/* ${rootmnt}

umount /ramboottmp


* save
* execute, or rebuild initramfs

mkinitramfs -o /boot/initrd.img-ramboot

* replace modified local with original file

cp -f local.bak local

Step 6:
* modify this file (needs a better solution)

/boot/grub/grub.cfg

* copy the first boot entry and replace the /initrd line with this:

/initrd /initrd.img-ramdisk

* label the new entrie as RAMBOOT
This will boot our generated initramfs instead the original one.
Step 7:
* reboot
* choose standart boot (no ramdisk)
* choose RAMBOOT and all your files on the root partition will be loaded to a tmpfs

Results:
Test setup:
*Kernel : Linux 2.6.38-8-generic (i686)
*Compiled : #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011
*Distribution : Ubuntu 11.04
*no graphics driver
*Desktop HP 8100E
*Core i7 860
*4GB Memory 2 Modules (DDR3)
*WDVeliciraptor 10k rpm 160GB

*the initrd is a ramfs:
** Ramfs will grow dynamically,
it will grow until theres no more free RAM, it may crash your system
** tmpfs will not grow dynamically,
it will grow until it reaches the maximum size you specified or theres no more free space in RAM or on your swap device. If both are full you will receive the error: "No space left on device".

* I don't use the rootfs to keep things simple
changes in /scripts/local are simple, you can still use any kind of disk-encryption, softraid, ...

Success gives birth to success? Failure gives birth to failure? - Sagar Gorijala.

way12go

Success gives birth to success? Failure gives birth to failure? - Sagar Gorijala.

View the most recent posts on the forum