把 U 盘里的 Linux 系统迁移到 eMMC,本质上是做一次 block 级或文件级系统迁移。根据你是否想保持分区结构、bootloader 等,有三种常见方法。下面按 可靠性和工程实践给你排序。
方法一:rsync 文件级迁移(最推荐)
这是 Linux 服务器迁移系统最常见的方法。优点:
- 不复制 U 盘的坏分区结构
- 可以自由调整 eMMC 分区
- 风险较低
1 创建 eMMC 分区
先确认设备:
lsblk
假设:
U盘 /dev/sda
eMMC /dev/mmcblk0
创建分区:
fdisk /dev/mmcblk0
例如:
/dev/mmcblk0p1 EFI /boot
/dev/mmcblk0p2 rootfs
格式化:
mkfs.vfat /dev/mmcblk0p1
mkfs.ext4 /dev/mmcblk0p2
2 挂载新系统
mount /dev/mmcblk0p2 /mnt
mkdir /mnt/boot
mount /dev/mmcblk0p1 /mnt/boot
3 用 rsync 复制系统
rsync -aAXHv \
/ \
/mnt \
--exclude=/dev \
--exclude=/proc \
--exclude=/sys \
--exclude=/tmp \
--exclude=/run \
--exclude=/mnt \
--exclude=/media \
--exclude=/lost+found
关键参数:
-a 保留权限
-A ACL
-X xattr
-H hardlink
这样复制后 权限、软链接、设备文件都能保持。
4 修复 fstab
进入新系统:
blkid
把 /mnt/etc/fstab 改成 eMMC 的 UUID。
5 安装 bootloader
如果是 x86
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
grub-install /dev/mmcblk0
update-grub
方法二:dd 整盘克隆(最简单但风险大)
如果你想 完全复制 U 盘系统:
dd if=/dev/sda of=/dev/mmcblk0 bs=4M status=progress
sync
优点:
- 最简单
- 完全镜像
缺点:
- eMMC 必须 >= U盘大小
- 复制所有垃圾分区
- UUID 会重复
之后可能需要:
resize2fs
扩展 rootfs。
方法三:clonezilla(工程化方案)
如果你做嵌入式开发或批量部署:
推荐用:
Clonezilla
优点:
- 自动复制
- 自动修复 bootloader
- 支持不同大小盘
嵌入式设备特别注意(很多人踩坑)
很多 ARM / SBC / 开发板:
bootloader 在 特殊区域:
例如:
mmcblk0boot0
mmcblk0boot1
或者:
eMMC offset 8KB
这时你需要额外复制:
dd if=u-boot.bin of=/dev/mmcblk0 seek=8
否则 系统复制成功但无法启动。
一步到位的推荐流程(嵌入式开发最常见)
1 插U盘启动
2 分区 eMMC
3 rsync 系统
4 修改 fstab
5 安装 bootloader
6 reboot
一个非常实用的检查清单
迁移完成前检查:
/mnt/etc/fstab
/mnt/boot
/mnt/boot/efi
bootloader 是否写入
确认:
lsblk
blkid
如果你愿意,我可以再给你一份 嵌入式开发常用的“系统迁移脚本”(50行自动迁移),基本一条命令就能把 U盘系统转到 eMMC。 很多 ARM 开发板厂商其实就是这么干的。
comment 评论区
star_outline 咱快来抢个沙发吧!