网上可以找到这样一个解决方案。

如:/usr目录
cp -r -p /usr /mnt/tmp  这一步把系统的usr目录复制到新的分区时应该使用:

cp -r -p /usr /*  /mnt/tmp  命令。

 

http://pkuwwt.yo2.cn/articles/linux%E4%B8%8B%E6%A0%B9%E7%9B%AE%E5%BD%95%E7%A9%BA%E9%97%B4%E4%B8%8D%E5%A4%9F%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html

 

装linux的时候,喜欢在/挂一个硬盘分区,在/home挂一个分区,这样的后果是/home没装满,根目录已经没有空间了。根据经验,/usr目录中往往是用户安装的软件,/var中往往与服务器有关,这两个目录往往占用了大部分的空间。

要解决这个问题,方案有三:格盘重装,根目录挂载的硬盘分区扩大,在某些目录上挂载其它的硬盘分区。第一种方案是最无奈的办法,第二种风险太大,搞不好会丢数据,第三种具有一定的可行性。经过测试,我发现linux文件结构有这样一个特性:子目录如果没有另外挂载硬盘分区,那这个目录中的内容会写在上层目录挂载的硬盘上,如果子目录另外挂载了硬盘分区,那这个目录中的内容会写在挂载的那个硬盘上,如果父目录挂载的硬盘上已经有A目录,而后A目录又挂载了另外一个硬盘分区,那么父目录挂载的硬盘上的A目录会被隐藏起来。这样这三种方案就有了可行性。

以/usr目录为例,做法为:将待挂载的硬盘挂载到任意一个目录tmp上,将/usr内容拷贝到tmp目录中,然后,在/usr/fstab中添加语句让系统在启动时将这个硬盘分区挂载到/usr目录上。经过使用,如果无异常,说明扩容成功。而/目录挂载的硬盘上仍然保存有一份/usr数据。如果出现异常,将/etc/fstab中修改的部分注释掉就可以恢复到从前了。当成功以后,还需要将原来的数据删掉,也就是先恢复,删掉原来数据之后再重新修改。让/etc/fstab起作用需要重启电脑。

下面是具体的作法(引自http://blog.csdn.net/gtuu0123/archive/2009/06/13/4266426.aspx)

 
以下操作以root身份运行
1.增加一个新分区(从原有硬盘分,或增加一个新硬盘并进行分区fdisk)
格式化成ext3(mkfs.ext3 /dev/sdb1,假设为/dev/sdb1)
2.将新的分区挂载到一个临时目录,如:/mnt/tmp
mount /dev/sdb1 /mnt/tmp
3.du -sh /
查看一个根目录中每个目录的大小,并选择一个大小合适的目录
如:/usr目录
cp -r -p /usr /mnt/tmp
4.修改/etc/fstab
/dev/sdb1               /usr       ext3         defaults           1 2
5.重启,如果系统运行正常,将/etc/fstab中新加的一行注释掉,则再重启后/usr又变回原来的位置,将其删除rm -rf /usr/* ;如果不正常,查找原因
6.修改/etc/fstab,将注释去掉,重启即可
 
需要注意的有两点:
1. 复制的时候一定要加上-p选项,表示保持属性不变,Xorg等用户界面程序都在/usr目录中,如果权限不对是登陆不了用户界面的。

2. 仍然有可能登陆不了图形界面,原因在于挂载新分区后的/usr目录的权限发生了变化。正常情况下应该是drwxr-xr-x,但是挂载后可能会变成drw------。对于这种情况,可以在图形界面登陆不进去的时候,按ctrl+alt+F2进入文本模式,登陆,然后更改/usr的属性chmod +r+x /usr。其实,你这时可以发现,挂载已经成功,唯一的问题出在目录的属性上。