如何借助新SSD扩展/共享根分区(混合挂载?)
嘿,这个需求其实挺接地气的——既想给根分区减负扩容,又不想折腾全盘迁移,还得让把Flatpak、虚拟机磁盘这类大文件移到新SSD后,系统完全没感知对吧?咱一步步来搞定,还能用上你提到的UDisks工具:
第一步:用UDisks给新SSD分区格式化
UDisks的GUI工具就是GNOME磁盘(GNOME桌面)或者KDE磁盘(KDE桌面),操作超简单:
- 打开磁盘工具,找到你的新SSD(一般是容量最大的那个未分区磁盘)
- 点击“分区”按钮,先删掉原有分区(如果有的话),然后新建一个分区:
- 文件系统选ext4(和绝大多数Linux系统的根分区文件系统一致,兼容性拉满)
- 分区类型选“主分区”,大小直接拉满整个SSD就行(不用多分,后续靠目录挂载拆分使用)
- 给分区起个好记的名字,比如“RootExpansion”,然后点“创建”
格式化完成后,点一下分区旁边的“挂载”按钮,系统会自动把它挂载到/media/你的用户名/RootExpansion这类路径,你也可以手动改到/mnt/newssd(更方便后续操作)。
第二步:核心操作——用绑定挂载(Bind Mount)实现无缝扩容
这一步是关键,能让系统以为Flatpak、VM磁盘这些目录还在根分区,但实际数据都存在新SSD上,同时你还能直接访问SSD的挂载点查看所有文件:
1. 先转移目标目录的内容
先挑你想移的大目录,比如:
- Flatpak的默认目录:
/var/lib/flatpak - KVM虚拟机磁盘:
/var/lib/libvirt/images - VirtualBox虚拟机磁盘:
~/VirtualBox VMs(用户目录下的)
以/var/lib/flatpak为例:
- 先停掉Flatpak相关服务:
sudo systemctl stop flatpak-system-helper.service - 用
rsync把原目录完整复制到新SSD(一定要用rsync,能保留权限、SELinux上下文这些关键属性):
注意路径末尾的斜杠,确保把目录里的内容移过去,而不是把整个目录作为子目录移过去。sudo rsync -aX /var/lib/flatpak/ /mnt/newssd/flatpak/ - 备份原目录(防止出问题可以恢复):
sudo mv /var/lib/flatpak /var/lib/flatpak.bak - 在原位置建一个空目录:
sudo mkdir /var/lib/flatpak
2. 配置永久挂载(修改/etc/fstab)
现在要让系统开机自动把新SSD上的flatpak目录绑定到根目录的/var/lib/flatpak:
- 打开
/etc/fstab文件(用文本编辑器,比如sudo nano /etc/fstab) - 在末尾添加一行:
/mnt/newssd/flatpak /var/lib/flatpak none bind 0 0 - 同样的方式,给虚拟机磁盘目录也加一行,比如KVM的:
/mnt/newssd/libvirt-images /var/lib/libvirt/images none bind 0 0 - 保存退出后,测试挂载是否生效:
sudo mount -a - 检查一下目录内容是否正常,比如
ls /var/lib/flatpak,如果能看到内容就没问题
3. 用户目录下的文件更简单(软链接就行)
如果是你自己用户目录下的虚拟机磁盘(比如~/VirtualBox VMs),不用改fstab,直接移到新SSD后建软链接就行:
mv ~/"VirtualBox VMs" /mnt/newssd/vms ln -s /mnt/newssd/vms ~/"VirtualBox VMs"
这样你打开用户目录里的虚拟机文件夹,实际访问的就是新SSD上的内容,完全无缝。
关于UDisks的补充说明
UDisks可以帮你完成分区、格式化、临时挂载这些操作,但永久挂载(绑定挂载)还是得靠/etc/fstab——毕竟UDisks主要是针对临时挂载可移动介质设计的,系统级的永久挂载还是fstab更可靠。不过前面的分区步骤完全可以用UDisks的图形界面完成,不用敲命令,很方便。
最后检查
重启系统后,确认Flatpak能正常安装应用、虚拟机能正常启动,然后再删掉备份的flatpak.bak目录就行:sudo rm -rf /var/lib/flatpak.bak
这样操作后,新SSD既承担了根分区的扩容任务,你也能直接通过/mnt/newssd访问所有移过去的文件,完全满足你的需求~
备注:内容来源于stack exchange,提问作者Kelvin_da_floofer

