Eee Tips: Reduce disk writes by utilizing tmpfs

I've got an ASUS Eee PC 901/Linux with the solid state drive (SSD). I've been having issues with the /tmp dir and /var/log dir utilizing too much of my 4GB drive. So to fix this I came across this eeeuser.com thread which talks about moving those directories to RAM. The process is pretty straight forward and will increase the life of your SSD. Find out what I did below.

Overview
This will move /tmp, /var/tmp, and /var/logs to RAM using tmpfs which means everything will be deleted on a reboot. That is fine since both /tmp and /var/tmp are deleted on reboot anyway. For the logs, however, we can create a couple scripts to backup only the logs from the last session as it's not really necessary to keep tons of logs on a netbook. In case you're wondering, I'm running Ubuntu Eee on my Eee PC.

Edit /etc/fstab
As a quick warning, MAKE BACKUPS!! This file is crucial to the inner workings of Ubuntu. Once you've got a backup all you need to do is add a few lines to move the directories to tmpfs.

tmp     /tmp            tmpfs   noexec,nosuid,rw,size=8192k   0     0
vartmp  /var/tmp        tmpfs   noexec,nosuid,rw,size=1024k   0     0
varlog  /var/log        tmpfs   noexec,nosuid,rw,size=8192k   0     0

If you're wondering why I gave /tmp 8MB in memory it is because Flash videos need a good amount of space and will hang if you only give it 1MB. So if you don't plan on streaming anything through Flash you can lower size=8192k to 1024k.

Create a couple scripts for our log problem
So in order to only keep logs from the last session we'll make a simple script and have it launch on shutdown but before that create the directory /var/log_bkup.

sudo mkdir /var/log_bkup

That's where the tar archive of the logs will be stored. Here's the script to remove the old and bring in the new:

file: /etc/init.d/logbkup.sh

#!/bin/sh
if [ -f /var/log_bkup/log_bkup.tar.gz ]; then
        /bin/rm /var/log_bkup/log_bkup.tar.gz
fi

echo "Backing up logs to tar archive..."
/bin/tar czf /var/log_bkup/log_bkup.tar.gz /var/log

This next script will create a skeleton in /var/log so all the directories already exist to avoid any problems.

file: /etc/init.d/mklogdir.sh

echo "Creating directories in /var/log"
/bin/mkdir /var/log/apparmor
/bin/mkdir /var/log/apt
/bin/mkdir /var/log/cups
/bin/mkdir /var/log/dist-upgrade
/bin/mkdir /var/log/fsck
/bin/mkdir /var/log/gdm
/bin/mkdir /var/log/news
/bin/mkdir /var/log/samba
/bin/mkdir /var/log/unattended-upgrades
/bin/mkdir /var/log/installer

Make sure the scripts are executable

sudo chmod +x /etc/init.d/mklogdir.sh 
sudo chmod +x /etc/init.d/logbkup.sh 

Link them to various rc directories so they run at the proper times (startup/shutdown)

sudo ln /etc/init.d/mklogdir.sh /etc/rc2.d/505mklogdir.sh
sudo ln /etc/init.d/logbkup.sh /etc/rc0.d/515logbkup.sh
sudo ln /etc/init.d/logbkup.sh /etc/rc6.d/515logbkup.sh

Finish up
Pretty much done at this point. Just want to remove everything in /tmp and /var/tmp to avoid any issues when remounting on next boot with everything running in tmpfs.

sudo rm -rf /tmp/* /var/tmp/*

Go ahead and reboot. You should now be running a system with a lot less disk writes. All your log writes will now only be written once per session instead of little writes here and there every time something happens.

Tags: