Difference between revisions of "Freeing up space on hda1"

From NAS-Central Buffalo - The Linkstation Wiki
Jump to: navigation, search
m (another possibility)
m (FreeLink)
 
(12 intermediate revisions by 2 users not shown)
Line 11: Line 11:
 
If you are running out of hard drive space on '''<tt>hda1</tt>''' (the location of the OS, and the default location of installed programs), you can free up space by moving some of the files to '''<tt>hda3</tt>''' (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 with '''[[OpenLink]]'''. There are known issues related to how '''[[w:BusyBox|BusyBox]]''' uses symbolic links, and other issues might arise. Some issues are reported below. ''Proceed at your own risk.''
 
If you are running out of hard drive space on '''<tt>hda1</tt>''' (the location of the OS, and the default location of installed programs), you can free up space by moving some of the files to '''<tt>hda3</tt>''' (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 with '''[[OpenLink]]'''. There are known issues related to how '''[[w:BusyBox|BusyBox]]''' uses symbolic links, and other issues might arise. Some issues are reported below. ''Proceed at your own risk.''
  
Note that <tt>/dev/hda3</tt> is mounted on either <tt>/mnt</tt> or <tt>/mnt/hda</tt>, depending on the type of LinkStation you have (the instructions below refer to the former. If <tt>/mnt/hda</tt> exists on your LinkStation, you will need to modify the commands accordingly.
 
 
==OpenLink==
 
==OpenLink==
 
=== /home ===
 
=== /home ===
 
Moving the <tt>/home</tt> directory should be safe, 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:
 
Moving the <tt>/home</tt> directory should be safe, 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
+
DIR="$(mount | grep hda3 | awk '{print $3}')"
 +
  cp -Rdp /home ${DIR}
 
  rm -R  /home
 
  rm -R  /home
  ln -s /mnt/home /home
+
  ln -s ${DIR}/home /home
  
 
=== /usr/local ===
 
=== /usr/local ===
 
Moving the <tt>/usr/local</tt> directory should also be safe. This directory contains additionally installed software, and moving it should not disrupt any mission critical applications. This can be done as follows:
 
Moving the <tt>/usr/local</tt> directory should also be safe. 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
+
DIR="$(mount | grep hda3 | awk '{print $3}')"
  cp -Rdp /usr/local /mnt/usr
+
  mkdir  ${DIR}/usr
 +
  cp -Rdp /usr/local ${DIR}/usr
 
  rm -R  /usr/local
 
  rm -R  /usr/local
  ln -s /mnt/usr/local /usr/local
+
  ln -s ${DIR}/usr/local /usr/local
  
 
=== /usr - Fixing the busybox symlinks ===
 
=== /usr - Fixing the busybox symlinks ===
Line 53: Line 54:
 
If you follow the FAQ to move /usr to say, <tt>/mnt/hda/moved_folder/usr</tt> and symbolic-link it back, some relative links won't work.  For example, <tt>/usr/bin/wget</tt> has the symbolic link <tt>../../bin/busybox</tt>, and that would get resolved to <tt>/mnt/hda/moved_folder/bin/busybox</tt>, which does not exist.  Therefore, you can link all unmoved directory under root back to this <tt>/mnt/hda/moved_folder</tt>:
 
If you follow the FAQ to move /usr to say, <tt>/mnt/hda/moved_folder/usr</tt> and symbolic-link it back, some relative links won't work.  For example, <tt>/usr/bin/wget</tt> has the symbolic link <tt>../../bin/busybox</tt>, and that would get resolved to <tt>/mnt/hda/moved_folder/bin/busybox</tt>, which does not exist.  Therefore, you can link all unmoved directory under root back to this <tt>/mnt/hda/moved_folder</tt>:
  
 +
DIR="$(mount | grep hda3 | awk '{print $3}')"
 
  ln -s /bin /mnt/hda/moved_folder
 
  ln -s /bin /mnt/hda/moved_folder
  ln -s /dev /mnt/hda/moved_folder
+
  ln -s /mnt/hda/moved_folder
 
  ln -s /etc /mnt/hda/moved_folder
 
  ln -s /etc /mnt/hda/moved_folder
 
  ln -s /lib /mnt/hda/moved_folder
 
  ln -s /lib /mnt/hda/moved_folder
Line 69: Line 71:
 
=== /home ===
 
=== /home ===
 
Moving the <tt>/home</tt> directory should be safe, 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:
 
Moving the <tt>/home</tt> directory should be safe, 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
+
DIR="$(mount | grep hda3 | awk '{print $3}')"
 +
  cp -Rdp /home ${DIR}
 
  rm -R  /home
 
  rm -R  /home
  ln -s /mnt/home /home
+
  ln -s ${DIR}/home /home
 
+
  
 
=== /usr ===
 
=== /usr ===
Line 78: Line 80:
  
 
You can move the <tt>/usr</tt> with the following commands:
 
You can move the <tt>/usr</tt> with the following commands:
  cp -Rdp /usr /mnt
+
DIR="$(mount | grep hda3 | awk '{print $3}')"
 +
  cp -Rdp /usr ${DIR}
 
  rm -R  /usr
 
  rm -R  /usr
  ln -s /mnt/usr /usr
+
  ln -s ${DIR}/usr /usr
  
 
=== /var ===
 
=== /var ===
Line 88: Line 91:
  
 
If you choose to do so, these are the commands needed to move <tt>/var</tt>:
 
If you choose to do so, these are the commands needed to move <tt>/var</tt>:
  cp -Rdp /var /mnt
+
DIR="$(mount | grep hda3 | awk '{print $3}')"
 +
  cp -Rdp /var ${DIR}
 
  rm -R  /var
 
  rm -R  /var
  ln -s /mnt/var /var
+
  ln -s ${DIR}/var /var
  
 
You could also choose to move only <tt>/var/lib</tt> and <tt>/var/cache</tt>. You would of course need to modify the commands accordingly.
 
You could also choose to move only <tt>/var/lib</tt> and <tt>/var/cache</tt>. You would of course need to modify the commands accordingly.
Line 97: Line 101:
 
=== another possibility ===
 
=== another possibility ===
  
Bind-mount /usr and /home to /dev/hda3! (done with freelink, there might be problems with openlink, compare to the above)
+
Bind-mount ''/usr'' and ''/home'' to ''/dev/hda3''! (done with freelink, there might be problems with openlink, compare to the above)
# Create appropriate directories on the hda3 (eg ''/mnt/hda/home'' and ''/mnt/hda/usr'')
+
# Create appropriate directories on the ''hda3'' (eg ''/mnt/hda/home'' and ''/mnt/hda/usr'')
 
# Copy your files from the old location to the new ones. Be sure to preserve permissions. I did this with ''tar (c|x)pf.''
 
# Copy your files from the old location to the new ones. Be sure to preserve permissions. I did this with ''tar (c|x)pf.''
 
# bind-mount the new directories in your ''/etc/fstab'':
 
# bind-mount the new directories in your ''/etc/fstab'':
Line 116: Line 120:
 
   cd ~/some/where/usr
 
   cd ~/some/where/usr
 
   rm -r *
 
   rm -r *
for home vice versa, be sure to have still an empty folder ''home'' and ''usr'' on ''/dev/hda1''!
+
for ''home'' vice versa, be sure to have still an empty folder ''home'' and ''usr'' on ''/dev/hda1''!

Latest revision as of 13:25, 31 October 2006

Default partition sizes
hda1-394MB
hda2-271MB
hda3-remaining

Contents


Background

Note
Bar.png
there's also the alternative to increase hda1's size. You'll likely have to delete hda2&hda3 though,

and it's something you'll usually do before reflashing. Upgrade (or replace) the existing LinkStation hard drive


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 with OpenLink. There are known issues related to how BusyBox uses symbolic links, and other issues might arise. Some issues are reported below. Proceed at your own risk.

OpenLink

/home

Moving the /home directory should be safe, 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:

DIR="$(mount | grep hda3 | awk '{print $3}')"
cp -Rdp /home ${DIR}
rm -R   /home
ln -s ${DIR}/home /home

/usr/local

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

DIR="$(mount | grep hda3 | awk '{print $3}')"
mkdir   ${DIR}/usr
cp -Rdp /usr/local ${DIR}/usr
rm -R   /usr/local
ln -s ${DIR}/usr/local /usr/local

/usr - Fixing the busybox symlinks

Nuvola apps important.png 
WARNING!

Although it is not reccomended to do so for OpenLink, instead of moving /usr/local you can move the entire /usr directory as you would for FreeLink. But then you must fix the busybox symlinks. You should not need to do this if you follow the instructions above and only move:
/home and /usr/local


First method

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

BEGIN {
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:

DIR="$(mount | grep hda3 | awk '{print $3}')"
ln -s /bin /mnt/hda/moved_folder
ln -s /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

FreeLink

/home

Moving the /home directory should be safe, 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:

DIR="$(mount | grep hda3 | awk '{print $3}')"
cp -Rdp /home ${DIR}
rm -R   /home
ln -s ${DIR}/home /home

/usr

If you need more space than would be freed up by moving /usr/local, you can move the entire /usr directory instead. Since Debian(FreeLink) installs into /usr/bin and does not typically use busybox there should be no problems. If you are using busybox(OpenLink) but still want to move /usr, you must fix the busybox symlinks.

You can move the /usr with the following commands:

DIR="$(mount | grep hda3 | awk '{print $3}')"
cp -Rdp /usr ${DIR}
rm -R   /usr
ln -s ${DIR}/usr /usr

/var

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.

However, Debian does use quite a lot of space on /var, notably in /var/lib and /var/cache. Therefore, if you are running FreeLink and are installing a lot of additional software, you may need to move /var as well. This has been confirmed to work well for several FreeLink users.

If you choose to do so, these are the commands needed to move /var:

DIR="$(mount | grep hda3 | awk '{print $3}')"
cp -Rdp /var ${DIR}
rm -R   /var
ln -s ${DIR}/var /var

You could also choose to move only /var/lib and /var/cache. You would of course need to modify the commands accordingly.


another possibility

Bind-mount /usr and /home to /dev/hda3! (done with freelink, there might be problems with openlink, compare to the above)

  1. Create appropriate directories on the hda3 (eg /mnt/hda/home and /mnt/hda/usr)
  2. Copy your files from the old location to the new ones. Be sure to preserve permissions. I did this with tar (c|x)pf.
  3. bind-mount the new directories in your /etc/fstab:
 # /etc/fstab: static file system information.
 #
 # <file system> <mount point>   <type>  <options>               <dump>  <pass>
 /dev/hda1       /               ext3    defaults,noatime,errors=remount-ro      0 0
 proc            /proc           proc    defaults                        0 0
 /dev/hda2       swap            swap    defaults                        0 0
 /dev/hda3       /mnt/hda        ext3    defaults,noatime                0 0
 /mnt/hda/home   /home           none    bind
 /mnt/hda/usr    /usr            none    bind


if that worked as whished you should somehow delete the original files on (dev/hda1)/usr and (/dev/hda1)/home to free space on that small partition:

  mount -t ext3 /dev/hda1 ~/some/where
  cd ~/some/where/usr
  rm -r *

for home vice versa, be sure to have still an empty folder home and usr on /dev/hda1!