Freeing up space on hda1

From NAS-Central Buffalo - The Linkstation Wiki
Revision as of 15:07, 24 August 2006 by Torfason (Talk | contribs) (/var)

Jump to: navigation, search

If you are running out of hard drive space on hda1 (the location of the OS, and the default location of installed programs), you can free up space by moving some of the files to hda3 (the large partition containing the network shares). You can then create symbolic links in the original locations, and should in that way be able to access your files as if nothing happened (for the most part).

You could well run into problems if you do this. There are known issues related to ho busybox uses symbolic links, and other issues might arise. Some issues are reported below, but others may not. Proceed at your own risk.

Note that /dev/hda3 is mounted on either /mnt or /mnt/hda, depending on the type of LinkStation you have (the instructions below refer to the former. If /mnt/hda exists on your LinkStation, you will need to modify the commands accordingly.


Moving the /home directory should be save, but it will not save you much space unless you are going to store a lot of data in the home directory of users. This can be done as follows:

cp -Rdp /home /mnt
rm -R   /home
ln -s /mnt/home /home


Moving the /usr/local directory should also be safe, both on OpenLink and FreeLink. This directory contains additionally installed software, and moving it should not disrupt any mission critical applications. This can be done as follows:

mkdir   /mnt/usr
cp -Rdp /usr/local /mnt/usr
rm -R   /usr/local
ln -s /mnt/usr/local /usr/local


If you need more space than would be freed up by moving /usr/local, you can move the entire /usr directory instead. One reason could be that Debian(FreeLink) wants to install a lot of stuff in /usr/bin, rather than in /usr/local/bin. If you are not using busybox (FreeLink typically does not), then there should be no problems. If you are using busybox but still want to move /usr, you must fix the busybox symlinks (see below).

Do not follow the instructions for moving /usr if you have already moved /usr/local.
(for reasons that should be obvious to you if you're even reading this).

You can move the /usr with the following commands:

cp -Rdp /usr /mnt
rm -R   /usr
ln -s /mnt/usr /usr


Moving /var with openlink is strongly recommended against, as OpenLink runs it as a ramdisk, so it will be lost and recreated on each reboot. As far as is known, FreeLink does not use this ramdisk, but moving var could also be dangerous since if something goes wrong your LS may very well fail to boot as it cannot access /var for creating the pidfiles. Since /var typically does not use much disk space - why risk it?

But it's your LinkStation, so if you really want to, here's how:

cp -Rdp /var /mnt
rm -R   /var
ln -s /mnt/var /var

Fixing the busybox symlinks

This script makes the needed changes to all the busybox symlink, changing them from ../../bin/busybox links to /bin/busybox. Run it with the AWK program.

#!/bin/awk -f

FS=" "
while ("ls -al /usr/bin | grep ../../bin/busybox" | getline)
system("rm /usr/bin/"$9)
system("ln -s /bin/busybox /usr/bin/"$9)
while ("ls -al /usr/sbin | grep ../../bin/busybox" | getline)
system("rm /usr/sbin/"$9)
system("ln -s /bin/busybox /usr/sbin/"$9)

Alternative method

The following has also been suggested as a fix to the symlink problem. It is a bit more work than the above method, but might be able to resolve non-busybox-related symlink problems as well.

If you follow the FAQ to move /usr to say, /mnt/hda/moved_folder/usr and symbolic-link it back, some relative links won't work. For example, /usr/bin/wget has the symbolic link ../../bin/busybox, and that would get resolved to /mnt/hda/moved_folder/bin/busybox, which does not exist. Therefore, you can link all unmoved directory under root back to this /mnt/hda/moved_folder:

ln -s /bin /mnt/hda/moved_folder
ln -s /dev /mnt/hda/moved_folder
ln -s /etc /mnt/hda/moved_folder
ln -s /lib /mnt/hda/moved_folder
ln -s /lost+found /mnt/hda/moved_folder
ln -s /mnt /mnt/hda/moved_folder
ln -s /proc /mnt/hda/moved_folder
ln -s /root /mnt/hda/moved_folder
ln -s /sbin /mnt/hda/moved_folder
ln -s /sys /mnt/hda/moved_folder
ln -s /tmp /mnt/hda/moved_folder
ln -s /www /mnt/hda/moved_folder