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
重启进入单用户模式,安全移动内容,然后删除,然后重新命名回来