适用场景
- 联想个人云X1,原系统装在板载MMC存储(约15G),空间不足
- 已加装M.2大容量硬盘,通过DD克隆或镜像还原将系统复制到M.2盘
- 克隆后从M.2启动卡在
grub>提示符,无法进入系统
问题根源
- UUID冲突:克隆后M.2盘的系统分区UUID与MMC完全一样,导致GRUB和fstab指向混乱
- GRUB引导未正确写入:即使修复了UUID,引导程序仍指向旧盘或不完整
准备工作
- 确保能从板载MMC正常启动进入飞牛系统
- 通过SSH登录,所有操作在root权限下进行
- M.2硬盘在系统中识别为
/dev/sda(请根据实际情况调整)
完整操作步骤
第一步:给M.2系统分区换新UUID
克隆后两个盘的UUID相同是问题根源,必须先让它们不一样。
先卸载M.2分区(确保未挂载):
sudo umount /mnt 2>/dev/null
修复文件系统并生成随机新UUID:
sudo fsck -f -y /dev/sda2
sudo tune2fs -U random /dev/sda2
注意:飞牛OS没有 e2fsck命令,用 fsck替代。如果提示 tune2fs需确认,等5秒自动继续或手动输入 y。
第二步:更新M.2盘内的GRUB配置和fstab
挂载M.2系统分区:
sudo mount /dev/sda2 /mnt
获取新UUID并替换旧配置(飞牛OS没有 blkid命令,用 lsblk替代):
NEW_UUID=$(lsblk -no UUID /dev/sda2) && OLD_UUID=$(sudo grep -oP 'root=UUID=\K[a-f0-9-]+' /mnt/boot/grub/grub.cfg | head -1) && sudo sed -i "s/$OLD_UUID/$NEW_UUID/g" /mnt/boot/grub/grub.cfg && sudo sed -i "s/$OLD_UUID/$NEW_UUID/g" /mnt/etc/fstab && echo "旧UUID: $OLD_UUID -> 新UUID: $NEW_UUID 替换完成"
注意:如果分区已挂载提示 already mounted,去掉 mount命令直接执行后面的替换即可。如果遇到权限报错(Permission denied),给 grep和 sed前面加上 sudo。
第三步:通过chroot在M.2系统内重装GRUB
只改配置不够,必须在M.2系统环境里完整安装引导程序。
挂载系统运行时目录并切入chroot:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
验证已进入M.2系统环境:
df -h /
显示 /dev/sda2且容量为大盘即确认成功。
重装GRUB(联想X1使用传统BIOS引导):
grub-install --target=i386-pc /dev/sda
update-grub
关键点:必须加 --target=i386-pc参数,否则GRUB可能误判平台报错:modinfo.sh doesn't exist. Please specify --target。
退出chroot并卸载:
exit
sudo umount /mnt/dev /mnt/proc /mnt/sys /mnt
第四步:扩容分区使用全部空间
重启并选择从M.2硬盘启动(开机按 F11):
sudo reboot
确认已从M.2启动:
df -h /
应显示 /dev/sda2。
扩展分区到硬盘全部空间:
sudo parted /dev/sda resizepart 2 100%
交互提示:
Fix/Ignore? → 输入 fix
Partition number? → 输入 2
Yes/No? → 输入 yes
End? [15.6GB]? → 输入 100%
- 最后提示
update /etc/fstab可忽略,之前已修复
扩展文件系统:
sudo resize2fs /dev/sda2
验证最终容量:
df -h /
常见踩坑汇总
| 问题 |
原因 |
解决 |
克隆后卡在 grub> |
UUID冲突 |
用 tune2fs -U random换新UUID |
blkid: command not found |
飞牛OS精简掉了 |
用 lsblk -no UUID替代 |
e2fsck: command not found |
同上 |
用 fsck -f -y替代 |
Permission denied修改文件 |
权限不足 |
grep/sed前加 sudo |
modinfo.sh doesn't exist |
GRUB平台猜错 |
加 --target=i386-pc |
| 进系统后df显示还是15G |
从MMC启动了 |
重启按F11选M.2盘 |
后续:插回数据盘
原有数据盘完全不受影响,插回后数据、分区均保持原样。建议进系统后执行一次 sudo update-grub刷新启动菜单。
教程整理自联想个人云X1实测过程,供有相同需求的朋友参考。如有疑问欢迎讨论。