1.概要
制作一个Ubuntu Live USB,当前是一个arm+Ubuntu,我想将当前的系统克隆到u盘中,然后用u盘启动系统。
这里假设使用 extlinux(常见于ARM设备)
2.内容
以下是制作Ubuntu Live USB并克隆当前ARM系统到U盘的步骤:
步骤1:准备工作
- 备份数据:确保U盘数据已备份,操作将完全擦除U盘。
- 确认设备路径:
- 插入U盘,运行
lsblk
查看设备名(如/dev/sda
)。 - 确认当前系统所在磁盘(如
/dev/mmcblk0
,常见于树莓派等ARM设备)。
- 插入U盘,运行
步骤2:克隆系统到U盘(使用dd命令)
# 卸载U盘分区(如果有自动挂载)
sudo umount /dev/sdX* # 替换sdX为U盘设备名(如sda)
# 执行克隆(谨慎操作!确保if和of正确)
sudo dd if=/dev/sdY of=/dev/sdX bs=4M status=progress oflag=sync
# 示例:将/dev/mmcblk0克隆到/dev/sda
# sudo dd if=/dev/mmcblk0 of=/dev/sda bs=4M status=progress oflag=sync
- 警告:
if
(输入文件)是原系统磁盘,of
(输出文件)是U盘。误操作会导致数据丢失!
步骤3:调整U盘引导配置(关键!)
ARM设备依赖特定引导配置,需确保U盘引导正确:
-
挂载U盘分区:
sudo mkdir /mnt/usb sudo mount /dev/sdX1 /mnt/usb # 假设U盘第一个分区为FAT32引导分区
-
修改引导文件:
- 编辑
/mnt/usb/extlinux/extlinux.conf
(或类似路径):sudo nano /mnt/usb/extlinux/extlinux.conf
- 将
root=
参数指向U盘的根分区(如/dev/sda2
):DEFAULT linux LABEL linux KERNEL /vmlinuz APPEND root=/dev/sda2 rootwait rw
- 注意:若使用UUID,需更新为U盘根分区的UUID:
sudo blkid /dev/sda2 # 查找UUID
- 编辑
-
同步配置并卸载:
sudo umount /mnt/usb
步骤4:调整系统文件(可选)
- 修改
/etc/fstab
:- 挂载U盘根分区:
sudo mount /dev/sdX2 /mnt/usb
- 编辑
/mnt/usb/etc/fstab
,将原磁盘的UUID替换为U盘的UUID:sudo blkid /dev/sdX2 # 获取U盘根分区UUID sudo nano /mnt/usb/etc/fstab
- 挂载U盘根分区:
- 同步并卸载:
sudo umount /mnt/usb
步骤5:设置设备从U盘启动
- 进入U-Boot/BIOS:
- 重启设备,进入启动菜单(通常按
Esc
、F12
或设备特定键)。 - 选择U盘作为启动设备。
- 重启设备,进入启动菜单(通常按
- 测试启动:
- 如果失败,可能需要重新检查引导配置或尝试其他工具(如Clonezilla)。
替代方案:使用Clonezilla(更安全)
- 下载ARM版Clonezilla镜像(需确认支持ARM)。
- 制作Clonezilla启动U盘。
- 通过Clonezilla克隆磁盘,自动处理引导配置。
注意事项
- ARM兼容性:部分U盘可能因固件问题无法启动,建议测试多个U盘。
- 内核兼容性:确保U盘中的内核支持目标设备硬件。
- 持久化存储:如需保存更改,需在克隆后配置持久化分区。
完成上述步骤后,U盘应能启动与原系统一致的ARM Ubuntu环境。
2.关联链接
4.关联知识
1.能看到当前运行系统的引导配置吗
是的,您可以查看当前运行系统的引导配置。具体方法取决于系统使用的引导加载程序(如 extlinux、GRUB 或 U-Boot)。以下是常见场景的查看方法:
情况1:使用 extlinux(常见于ARM设备)
- 查看配置文件:
cat /boot/extlinux/extlinux.conf
- 关键参数:
root=
(指定根文件系统设备,如/dev/mmcblk0p2
)。 - 示例输出:
DEFAULT linux LABEL linux KERNEL /vmlinuz APPEND root=/dev/mmcblk0p2 rootwait rw
- 关键参数:
- 验证当前根分区:
mount | grep " / "
- 输出示例:
/dev/mmcblk0p2 on / type ext4 (rw,relatime)
- 确认
root=
参数与当前根分区一致。
- 输出示例:
情况2:使用 GRUB(常见于x86/x64设备)
- 查看主配置文件:
cat /boot/grub/grub.cfg
- 注意:直接编辑此文件不推荐,修改应通过
/etc/default/grub
和update-grub
命令。
- 注意:直接编辑此文件不推荐,修改应通过
- 查看当前启动项:
cat /boot/grub/grubenv | grep "saved_entry"
- 或在启动时按
Esc
/Shift
进入GRUB菜单选择界面。
- 或在启动时按
情况3:使用 U-Boot(嵌入式设备)
- 查看环境变量:
printenv | grep -E "bootcmd|bootargs"
- 关键参数:
bootargs
(包含内核启动参数,如root=
)。 - 示例输出:
bootargs=root=/dev/mmcblk0p2 rootwait rw
- 关键参数:
如何确认当前系统的引导配置?
- 直接查看配置文件:
- 根据上述方法定位到配置文件(如
extlinux.conf
或grub.cfg
)。 - 检查
root=
参数是否指向当前根分区(通过mount | grep " / "
确认)。
- 根据上述方法定位到配置文件(如
- 验证启动日志:
- 重启设备,在启动过程中观察内核日志:
dmesg | grep -i "command line"
- 输出会显示实际使用的内核参数(包括
root=
)。
- 重启设备,在启动过程中观察内核日志:
示例:完整检查流程
-
查看当前根分区:
$ mount | grep " / " /dev/mmcblk0p2 on / type ext4 (rw,relatime)
-
查看引导配置:
$ cat /boot/extlinux/extlinux.conf DEFAULT linux LABEL linux KERNEL /vmlinuz APPEND root=/dev/mmcblk0p2 rootwait rw
-
验证一致性:
- 确认
root=
参数(/dev/mmcblk0p2
)与当前根分区一致。
- 确认
注意事项
- 只读模式:如果系统以只读模式挂载根分区(常见于救援模式),需先重新挂载为读写:
Live USB环境:如果通过Live USB访问原系统,需先挂载原系统的根分区:sudo mount -o remount,rw /
sudo mount /dev/sdX2 /mnt # 替换sdX为原设备 sudo chroot /mnt # 进入原系统环境
通过以上步骤,您可以准确查看并验证当前系统的引导配置。如果发现配置错误(如 root=
指向错误设备),需及时修复以避免启动失败。