参考这个,在livecd模式操作。
https://bbs.deepin.org.cn/zh/post/237402?id=237402&limit=20&offset=3&postId=1643555
一般来说,分区的压缩,最好是在分区的后面腾出空间来操作,毕竟,大部分文件系统的空间分配策略都是优先使用分区前面的空间。楼主这个操作就正好违背了这个原则,几乎每一步空间的腾出,都是在有数据的空间上进行,第一步就是在data分区前面腾出20G空间,第二步则是在Rootb前面给Roota腾出10G的空间。无论是data和Rootb都是有数据的空间。实际上这种操作非常危险,因为你腾出20G空间,原则上就在往后挪动20G(甚至更多,取决于无损分区软件的操作策略)的数据,很难保证不出错。
那么,换一个思路呢?linux本来就不强调分区这个概念,而zfs甚至完全取消了分区这个概念(用虚拟的分区和数据集来代替)。同样的,Roota分区空间不够了,那么直接将占用空间大的目录的数据迁移到一个新分区,然后将新分区以挂载点的方式挂载到原来的目录不就完了。这样只需要建立新分区,将原来目录的数据复制到新分区,然后再编辑fstab,将新分区挂载到原目录。整个操作都是非常稳健的操作,基本上不用担心数据损失。
比如以deepin v23为例,我用sudo qdirstat统计一下Roota分区谁占用了最多的空间,/usr最大,但它比较关键,我们不用动它,然后我发现/.osrepo-cache是第二占用空间大的,既然是Cache,肯定也不是关键目录,那么我们就移动它。操作步骤大概如下:
1、用livecd启动。
2、用gparted将_dde_data分区缩小,从分区后面腾出20G空间,然后建立一个新分区,假设叫Roota-add1。甚至不需要分区,可以将/.osrepo-cache目录直接迁移到data分区,这样更简单。
3、挂载Roota-add1分区到临时挂载点,假设:/mnt/tmp,将/.osrepo-cache目录复制到/mnt/tmp/.osrepo-cache。然后先不要删除原来的/.osrepo-cache目录,可以先改个名叫:/.osrepo-cache.bak
4、编辑/etc/fstab,将新的.osrepo-cache目录挂载到/.osrepo-cache。
5、重启系统进行测试,如果一切正常,则删除/.osrepo-cache.bak。
6、大功告成!当然,安全起见,在进行任何数据操作之前,备份数据是一个良好的习惯。
deepin2.0系统能否将某一个磁盘容量在不重装系统的情况下,将磁盘容量多的减少,磁盘容量少的增加?