Linux上把大文件夹移动到其他存储设备上来释放空间
问题背景
一个常见的问题是发现某个文件夹比如/var, /opt 过大,使得所在系统磁盘(比如一块儿容量很稀缺的高速SSD)的空间非常紧张,这时我们想把大文件夹移动到其他存储设备上来释放空间。
约定
不妨假设根系统/挂载在磁盘分区sda4,要移动的大目录LargeDir是根文件系统下的一个子目录,目标存储设备为sdb。
思路11
一个体面的思路是在sdb上创建一个分区,假设为sdb1,创建LargeDir的同级根目录LargeDir2,把sdb1挂载到LargeDir2,把LargeDir的内容复制到LargeDir2
mkdir LargeDir2
mount /dev/sdb1 LargeDir2
rsync -a LargeDir/ LargeDir2
在文件系统表单/etc/fstab里添加对应项,比如
/dev/sdb1 LargeDir ext4 defaults 2 2
重启后生效,但是这个思路是后一个文件系统隐藏了前一个文件系统的子目录,如何删除原文件系统的子目录内容呢?
由于Linux允许同一文件系统有多个挂载点,所以只需要把sda4再次挂载到一个新的目录,然后就可以找到原LargeDir,然后删除。
思路22
重启进入单用户模式,安全移动内容,然后删除,然后重新命名回来