[Voyage-linux] Loading entire root filesystem into ram

Rasjid Wilcox (spam-protected)
Wed Mar 29 08:43:53 HKT 2006


For any anyone interested, I have found a way to load a running
instance of voyage linux into ram, all while connected over ssh.  It
means that you can reflash or even repartition the CF card remotely.

The instructions are written for a WRAP box, but could be varied for
something else.  When I get time I'll put this up on the wiki.

Cheers,

Rasjid.

-----------------------------------------------

Moving the root filesystem to a ram tmpfs via ssh.

0) Log in via ssh
NOTE: if testing this 'at home', make sure you ARE NOT logged in as a
user via the serial port, although you can be viewing the serial port
output if you wish.

1) apt-get install lsof (remountrw first)

2) if required, tidy up voyage - clear apt-get cache etc.

3) stop all unnecessary services

cd /etc/init.d/
./pptpd stop
./cron stop
./inetd stop
./dnsmasq stop

4) mkdir /oldroot & mkdir /newroot

remountrw
mkdir /oldroot
mkdir /newroot
remountro

5) create the tmpfs filesystem

mount -t tmpfs -o size=xxM tmpfs /newroot
where xxM is a bit over half of the current size of /

6) copy over existing root filesystem and perform pivot
cp -ax / /newroot

cd /newroot
pivot_root . oldroot
exec chroot . sh

7) remount virtual filesystems on new root system

mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devpts devpts /dev/pts

8) copy over /rw

mount /rw
cp -ax /oldroot/rw/* /rw

9) stop and start all processes on the new root filesystem

## Simple and quick but more risky
## edit /etc/inittab - comment out ~~:S:wait:/sbin/sulogin
## # telinit 1; sleep 20; telinit 2
## reconnect via ssh - but if something has gone wrong,
## and you can't log in, a reset of the box will be required

# Longer method - always remaining connected via ssh
/etc/init.d/ssh restart

Log in again (2nd instance) via ssh
Log out of original ssh instance

killall getty
killall syslogd
/etc/init.d/syslogd start
killall klogd
/etc/init.d/klogd start
/etc/init.d/watchdog restart
killall dhclient  # if getting IP via dhcp

# end long method

telinit u

# check for anything still on oldroot
lsof -n | grep oldroot

stop any processed with files open on oldroot

10) unmount all old filesystems

cd /oldroot
umount proc
umount sys
umount dev/pts
umount dev/shm
umount grub
umount rw
cd /
umount /oldroot

11) Done! You can now do anything you want on the CF card, including
repartition etc.
WARNING: If you are in the middle of reflashing the card and the power
fails, the
box may only be recoverable with physical access.




More information about the Voyage-linux mailing list