尝试使用 SD 卡双启动 Linux

尝试使用 SD 卡双启动 Linux

语境: 我正在尝试在笔记本电脑上双启动 Windows 和 Linux。我的笔记本电脑内置 SD 卡读卡器,但是没有通过 BIOS 或其他服务允许我直接启动 SD 卡的选项或方法。但是,通过一些测试,我发现虽然 Windows 11 和启动菜单无法识别 SD 卡读卡器,但 Linux 却可以识别。

我的目标: 我想使用最小存储空间,这样我就可以在内置硬盘上启动 Linux,并让 SD 卡包含其他所有内容。(软件、用户、系统文件、存储库等)

问题:

  1. 我需要在内置硬盘上创建多大的分区?(<32 GB)
  2. 我应该在内置硬盘和 SD 卡之间的什么位置设置目录?
  3. 在安装 Linux 时,我需要在 SD 卡上为其他目录设置多个分区吗?如果需要,每个目录需要多少空间?

答案1

  1. 我需要在内置硬盘上创建多大的分区?(<32 GB)

你所需要的只是能够容纳/启动/目录位于内部硬盘驱动器上的一个分区中,文件系统为 ext4。
如果您只保留一个内核版本副本,则此分区中 100MB 的空间就足以容纳内核和蛴螬

强烈建议使用此硬盘上的另一个分区进行交换,这既是为了系统性能,也是为了延长 SD 卡的使用寿命。
传统上建议交换大小为 RAM 大小的 1 到 2 倍。


  1. 我应该在内置硬盘和 SD 卡之间的什么位置设置目录?

这个问题毫无意义。你已经规定了你想要“在我的内置硬盘上启动 Linux,并让 SD 卡包含其他所有内容。(软件、用户、系统文件、存储库等)

会 ”其他一切“大概是根文件系统?


  1. 在安装 Linux 时,我需要在 SD 卡上为其他目录设置多个分区吗?如果需要,每个目录需要多少空间?

不,您不需要设置多个分区,最好保持简单。
真的没有“Linux 安装“正如你可能习惯的 Debian 类型发行版那样。
相反,你可以手动构建 SD 卡上的 rootfs,只需复制现有 Linux 系统的 rootfs,然后清理/ETC/(例如文件系统主机名) 和/家/. (不要复制挂载在/系统/var, 和/进程

非活动 rootfs 将是理想的来源(因为不会挂载任何伪文件系统);例如,如果 rootfs 是 HDD 分区,则从活CD,手动挂载该HDD分区和SD卡,然后将HDD分区的文件和目录复制到SD卡。


在启动期间,SD 卡上的 rootfs 将在内核命令行中指定,其参数如下:

root=/dev/mmcblk0p1 rootwait rootfstype=ext4 rw

假设您的 SD 卡有一个格式化为 ext4 文件系统的 MBR 分区。

请参阅内核参数文档有关这些参数的详细信息。

參閱蛴螬有关如何编辑您尝试启动的内核的内核命令行的文档。


请注意,此启动方案要求您的 Linux 内核将 MMC/SD 控制器的驱动程序构建为静态链接驱动程序,即它是内置驱动程序。
该配置对于嵌入式 Linux 很常见,但对于 x86 发行版可能不太可能。
如果 MMC/SD 控制器驱动程序是可加载模块,则启动会变得复杂(例如,使用 initramfs 使驱动程序可用,然后枢轴根到 SD 卡上的 rootfs)。


附录

我找到了一台内置 MMC/SD 卡插槽的旧笔记本电脑,以及一张旧的 Lubuntu LiveCD。安装菜单实际上提供了 SD 卡(如/dev/mmcblk0) 作为安装目标设备。
因此我继续指定 HDD (/dev/sda)作为安装的引导设备蛴螬、主分区(/dev/sda1) 格式化为 ext4 以便挂载/启动以及另一个主分区(/dev/sda2)用于交换。单个主分区(/dev/mmcblk0p1)已格式化为 ext4 以便挂载/(又名 root)。

安装创建了所有预期的目录,并将预期的文件存储在 HDD 和 SD 卡上所有预期的位置。但是从 HDD 启动停滞,可能是因为内核由于无法访问的模块而无法访问 SD 卡上的 rootfs,mmc_block.ko
最简单的(IMO)解决方案是重建一个内置有 MMC/SD 控制器驱动程序的 Linux 内核。

相关内容