如何把Linux系统移植到U盘或移动硬盘上,并从USB驱动器中启动并运行?下面我将教大家制作随身携带、即插即用的Linux操作系统。(把当前系统移植到移动硬盘上)
为什么需要这个功能呢?
- 安装、修复系统;电脑系统出了问题,插上就可以对损坏系统修复。这不同于简单的LiveCD,你配置好后的Linux系统极其强大。
- 工作中我们同样可以使用这个系统,回到家里插在自己电脑上继续工作;保持进度不变。
- 把U盘插到其他电脑,同样可以运行,走到哪里就可以带到哪里,相当于私人独家系统。
准备工作
硬件:
- 移动硬盘 推荐SSD
- 装有Linux的电脑一台
- 装有Linux LiveCD系统的启动盘
软件:
Linux发行版自带的工具 如 gparted grub cp
制作
Linux启动盘的制作分为以下几个步骤:分区、复制文件、安装grub并配置、测试。目的是把当前系统移植到移动硬盘上。
分区
从LiveCD启动,打开gparted分区工具,把移动硬盘的分区表改为GPT 。我使用以下分区方案:
分区 | 描述 | 文件系统 | 标志 | 大小 |
---|---|---|---|---|
sdb1 | EFI系统分区 | FAT32 | boot efi | 300M |
sdb2 | 数据分区 | NTFS | 300G | |
sdb3 | 深度系统根目录分区 | EXT4 | 40G |
sdb1是UEFI+GPT模式下的引导分区,grub引导器就要装在这里。
sdb2是放数据的,为了与Winodws兼容所以采用NTFS。
sdb3是Linux系统的全部内容,如果你想把家目录单独分出来也可以。
后面留空备用,结果如下图
复制文件
我原系统的文件储存在 /dev/nvme0n1p3 (根分区)和 /dev/nvme0n1p4 (家分区)上,把这两个分区挂载到 /mnt /mnt/home。每个人的分区情况不同,需要对应修改。挂载后,/mnt 目录包括原系统的所有内容。
挂载 /dev/sdb3 到 /media/backup,把 /mnt 内容全部复制到 /media/backup
cp -a /mnt/* /media/backup/
安装grub
GRUB 提供一个安装程序grub-install用以安装 GRUB 到磁盘,下面是grub-install的一些常用参数及选项:
--boot-directory=DIR
指定 boot 目录,用于存放 GRUB 的相关文件,包括其镜像、模块及字体等,同时 GRUB 也会从该目录读取配置文件,此参数缺省为/boot,则 GRUB 的相关文件都在/boot/grub下,配置文件路径为/boot/grub/grub.cfg。
--target=TARGET
指定要安装的 GRUB 类型(对应不同的 BIOS 启动模式),常用的可选参数有 i386-pc、x86_64-efi、i386-efi 等,对应的文件会被安装到 <boot directory>/grub/<target>/(<boot directory>为--boot-directory参数指定的 boot 目录,默认为/boot)下
--force
即使遇到报错仍然强制安装
UEFI 特有参数及选项:
--efi-directory=DIR
指定 EFI 系统分区的根目录,即 EFI 系统分区的挂载点
--removable
为移动设备安装,将 GRUB 安装到U盘时必须使用此选项
挂载 /dev/sdb1 到 /media/backup/boot/efi ,把grub安装到移动硬盘上
grub-install --target x86_64-efi --removable --boot-directory=/media/backup/boot --efi-directory=/media/backup/boot/efi
上面的 --boot-directory --efi-directory --removable 不可省略。
安装之后要修改grub配置文件,就让他自动生成好了。但要禁用os-prober功能——自动探测硬盘上的其他操作系统然后生成配置。Linux To Go 不依赖于其他操作系统,它的启动菜单里只有自己。注意,不要使用update-grub,因为它会修改UEFI启动项。
chroot /media/backup/
chmod -x /etc/grub.d/30_os-prober
grub-mkconfig -o /boot/grub/grub.cfg
修改 /media/backup/etc/fstab,把UUID换成对应的值
# /dev/nvme0n1p3 LABEL=primary
UUID=932200a3-ff33-48a4-a1c9-23da8cd5d964 / ext4 rw,relatime,data=ordered 0 1
# /dev/nvme0n1p4 LABEL=primary
UUID=d973e1bb-cd0a-40e8-91c0-c6c3f8d31355 /home ext4 rw,relatime,data=ordered 0 2
测试
安装grub后,还要手动修改 /media/backup/etc/fstab 。Linux To Go只需要自动挂载两个分区—— sdb1 ESP 和 sdb3 DEEPIN_ROOT,修改对应的UUID。
现在可以重启试试了。开机按下F12 UEFI启动菜单中有移动硬盘这个启动项,选择即可。
如果成功就OK;如果黑屏断电,查看/media/backup/boot/efi 下的文件 把BOOTX64.EFI删除,把 grubx64.efi 重命名为 BOOTX64.EFI 再重启。