Ubuntu 系统盘空间告急?手把手教你将新硬盘无缝迁移至 /home 目录 1. 问题诊断为什么你的Ubuntu系统盘总是不够用每次打开终端看到那个刺眼的红色警告磁盘空间不足是不是血压瞬间飙升作为一个常年和Ubuntu打交道的开发者我太懂这种痛苦了。上周我的Jetson Xavier开发板又双叒叕报空间不足——16GB的系统盘装完CUDA和几个深度学习框架后连pip install都报错。这种时候加块新硬盘就像给快爆炸的仓库开了个分仓。典型症状你肯定遇到过这些场景运行apt upgrade时提示no space left on device编译项目时突然中断报错显示/tmp空间不足用户目录下的.conda文件夹不知不觉吃掉10GBdocker镜像像黑洞一样吞噬存储空间用df -h命令查看时会发现/home目录的使用率已经飙到95%以上而新加的1TB SSD却显示为未挂载。这就是典型的Linux分区规划不合理——把/home和根目录放在同一个小容量系统盘上。2. 硬件准备选对硬盘才能事半功倍去年我给团队配开发机时做过测试同样配置下NVMe SSD的模型训练数据加载速度比机械硬盘快3倍。所以如果你是做AI开发强烈建议选择NVMe协议的固态硬盘。这是我的选购清单硬盘类型适用场景性价比之选NVMe SSD深度学习数据集三星980 ProSATA SSD普通开发环境致钛TiPlus5000机械硬盘冷数据备份西数蓝盘重要提醒买回新硬盘别急着拆封先用lsblk命令确认系统是否识别到新设备。有次我折腾半天才发现是SATA线没插牢。如果看不到新硬盘比如/dev/nvme0n1先检查BIOS里是否开启对应接口比如NVMe支持物理连接是否牢固笔记本可能需要拆后盖使用dmesg | grep -i error查看内核错误日志3. 分区格式化避开我踩过的那些坑第一次给硬盘分区时我手滑选了扩展分区导致后续无法格式化不得不重头再来。这里把正确姿势分享给你# 进入分区工具记得替换你的设备名 sudo fdisk /dev/nvme0n1 # 关键步骤分解 # 1. 输入n创建新分区 # 2. 选择p主分区 # 3. 分区号保持默认1 # 4. 起始扇区直接回车 # 5. 结束扇区回车表示用尽全部空间 # 6. 输入w保存退出血泪教训千万别在未卸载的分区上操作有次我误操作导致整个分区表损坏花了8小时恢复数据。安全做法是先用mount | grep nvme确认目标分区未挂载必要时用umount /dev/nvme0n1p1卸载格式化推荐用ext4文件系统它对大文件支持更好比如训练用的hdf5数据集sudo mkfs.ext4 -L new_home /dev/nvme0n1p1加上-L标签方便后续识别这个技巧在我管理20台服务器时特别管用。4. 数据迁移安全搬运/home目录的完整流程直接挂载会覆盖原有/home内容所以需要中转站策略。这是我优化后的方案# 创建临时挂载点 sudo mkdir /mnt/new_home # 挂载新分区注意文件系统类型 sudo mount -t ext4 /dev/nvme0n1p1 /mnt/new_home # 开始搬运保持权限不变 sudo rsync -avzh /home/ /mnt/new_home/相比常见的cp命令rsync的优势在于显示实时进度加-P参数更直观支持断点续传网络传输时特别有用保留所有文件属性权限、软链接等紧急预案万一操作中途断电怎么办我的应急方案是用ls -l /mnt/new_home确认已有文件追加--ignore-existing参数继续同步最后用diff -r /home /mnt/new_home校验一致性5. 挂载配置让系统每次开机自动识别最关键的/etc/fstab配置这里有三个方案可选方案A设备路径挂载简单但不推荐/dev/nvme0n1p1 /home ext4 defaults 0 2方案BUUID挂载服务器首选UUIDxxxx-xxxx-xxxx /home ext4 defaults 0 2用blkid查UUID时建议搭配grep过滤sudo blkid | grep nvme0n1p1方案C标签挂载开发机适用LABELnew_home /home ext4 defaults 0 2实测建议数据中心用UUID个人开发机用LABEL。有次机房维护后设备名混乱/dev/sda变成/dev/sdb只有UUID方案幸存。6. 收尾工作这些细节决定成败你以为挂载完就万事大吉这些隐藏坑点我帮你踩过了权限修复迁移后可能出现桌面图标消失用这条命令修复sudo chown -R $USER:$USER /home/$USERSELinux问题如果系统启用了安全模块需要重打标签sudo restorecon -Rv /home服务异常处理像Docker、MySQL这类服务可能记录了原始路径需要sudo systemctl stop docker sudo systemctl daemon-reload sudo systemctl start docker空间验证最后用df -h /home确认挂载成功输出应该显示新硬盘的容量。我习惯再加个压力测试# 创建10GB测试文件 dd if/dev/zero of/home/test.img bs1G count107. 高级技巧LVM方案与多硬盘管理当你有多个硬盘需要合并使用时LVM逻辑卷管理才是终极解决方案。去年我们AI实验室的存储方案升级就采用了这种架构# 创建物理卷 sudo pvcreate /dev/nvme0n1p1 # 创建卷组 sudo vgcreate vg_home /dev/nvme0n1p1 # 创建逻辑卷 sudo lvcreate -l 100%FREE -n lv_home vg_home # 格式化并挂载 sudo mkfs.ext4 /dev/vg_home/lv_homeLVM的优势在于随时扩展空间加硬盘后运行vgextend即可支持快照备份lvcreate --snapshot可跨多块硬盘vgcreate vg_home /dev/sd[abc]1有次数据集暴涨到3TB我们就是通过LVM动态扩展避免了再次迁移。具体操作记录在我的技术博客里需要的话可以私信我发你链接。