为什么操作系统仅从特定 PC 上的 ext4 启动?

为什么操作系统仅从特定 PC 上的 ext4 启动?

我已经将 Manjaro 安装在 USB 上以便随身携带。但是,我只能在安装它的那台机器上从它启动。在其他 PC 上,BIOS 或 UEFI 无法将该驱动器识别为可启动驱动器。

该设备有一个格式化为 的/dev/sda分区。该分区中有一个目录,其中包含和其他文件。该分区具有标志。/dev/sda1ext4/boot//boot/initramfs-6.5-x86_64.imgboot


$ mount显示以下内容:

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sys on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
dev on /dev type devtmpfs (rw,nosuid,relatime,size=8158880k,nr_inodes=2039720,mode=755,inode64)
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755,inode64)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
/dev/sda1 on / type ext4 (rw,noatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=36,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14490)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,nosuid,nodev,relatime,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,size=8175772k,nr_inodes=1048576,inode64)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1635152k,nr_inodes=408788,mode=700,uid=1000,gid=1001,inode64)
portal on /run/user/1000/doc type fuse.portal (rw,nosuid,nodev,relatime,user_id=1000,group_id=1001)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1001)

$ df -Th节目

Filesystem     Type      Size  Used Avail Use% Mounted on
dev            devtmpfs  7.8G     0  7.8G   0% /dev
run            tmpfs     7.8G  1.5M  7.8G   1% /run
/dev/sda1      ext4      458G  103G  332G  24% /
tmpfs          tmpfs     7.8G     0  7.8G   0% /dev/shm
tmpfs          tmpfs     7.8G   96K  7.8G   1% /tmp
tmpfs          tmpfs     1.6G  132K  1.6G   1% /run/user/1000

# blkid(使用提升的权限)返回

/dev/sda1: UUID="419d4f22-7fd6-42ea-a273-4e54028197ce" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b1e4001d-01"

# fdisk -l /dev/sda报告

Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: SSD 870 EVO 500G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0xb1e4001d

Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1  *     2048 976773119 976771072 465.8G 83 Linux

最后,如果还有相关性的话,# gdisk -l /dev/sda

GPT fdisk (gdisk) version 1.0.9.1

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************

Disk /dev/sda: 976773168 sectors, 465.8 GiB
Model: SSD 870 EVO 500G
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): DC55B4BD-D878-4752-9414-E4CE82C33258
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2029 sectors (1014.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       976773119   465.8 GiB   8300  Linux filesystem

现在,如何让 USB 更便携?是否值得将 MBR 转换为 GPT,如上所述这里?我不想重新安装操作系统。


编辑: 由于我现在正在使用 USB 记忆棒,因此无法立即测试任何建议。我会尽力在 24 小时内尝试它们。

答案1

您的其他电脑很可能有 UEFI没有 BIOS 兼容性功能(要么是因为它开箱即用,要么是因为它不再受某些现代系统支持)。

“正常工作”的 PC 以 BIOS 模式启动 USB 记忆棒(UEFI 风格的固件称之为“传统模式”或“CSM 模式”),因为这是驱动器当前包含启动代码的唯一模式。这样做是可行的,因为 BIOS 启动从不检查任何文件系统;它直接从特定扇区加载引导加载程序。

UEFI 永远不会将该驱动器识别为本机可启动的,因为该驱动器没有任何可以替代 EFI 系统分区的兼容文件系统的分区。

对于原生 UEFI 启动,驱动器没有不一定需要进行 GPT 分区,但需要有一个 FAT32 分区,固件可以从中加载BootX64.efi文件,即引导加载程序。(有些 PC 也可以读取 NTFS 或 exFAT,但标准 UEFI 文件系统——也是唯一的保证有效文件系统 – 是 FAT32。)

/boot这与拥有一个单独的分区(当实际根文件系统对于引导加载程序来说太复杂时)的作用大致相同;事实上,它通常安装在 /boot,或者有时安装在 /efi。

因此你的步骤如下:

  1. 重新分区,使其与现有分区相邻,形成一个小的 FAT32 分区(至少是当前 /boot 文件总大小的 2 倍)。在全新安装期间,它通常位于开头,但也可以放在结尾。

    • 如果保留 MBR 分区,则 fdisk 中的分区类型应设置为EF

    • 如果您决定使用gdisk转换为 GPT 分区,则 gdisk 中的类型应该是EF00(gdisk 对实际 EFI GUID 的缩写)。

  2. 将所有文件从当前 /boot 移动到新分区,并通过 /etc/fstab 将其配置为挂载在 /boot 上。

  3. 在新分区中安装与 UEFI 兼容的引导加载程序EFI\BOOT\bootx64.efi(即从 Linux 角度而言的 /boot/EFI/boot/bootx64.efi)。

    例如,使用 GRUB,指定--target=x86_64-efi并将--removable.efi 文件放置在 UEFI 所需的位置。使用 systemd-boot,这两者都已是默认设置。

答案2

UEFI 无法从ext4文件系统启动。

你的 USB 记忆棒需要有一个EFI 系统分区使用 FAT 文件系统格式化。

成功启动的系统ext4要么基于传统 BIOS,要么启用了 CSM。

相关内容