在“安装前尝试”模式下使用 17.04
Windows 的“普通”USB(如使用 MBR 分区表格式化的)在启动器中会显示一个 USB 记忆棒图标,并可从文件侧边栏弹出。
但是,使用 GPT 分区表格式化同一设备会显示“磁盘”图标,就像内部磁盘一样,并且无法从文件中弹出。它甚至从未出现在侧栏中,您也无法从“其他地方”弹出它。会弹出一个错误模式对话框,显示“无法卸载卷”“操作不允许”。
但sudo umount
工作正常。
我猜测 Ubuntu 将它视为内部磁盘驱动器。
在这两种情况下,驱动器即使通过 udisks2 中的条目安装/etc/fstab
,并且除了设备名称外,条目也是相同的
那么为什么要这样处理 GPT 格式的记忆棒呢?我希望它能像 MBR 格式的记忆棒一样显示在文件侧边栏中。
格式化通过
parted -s --align optimal /dev/sdc \
mktable gpt \
mkpart primary fat32 0% 100% \
mkfs.vfat -F32 /dev/sdc1
# mount and copy files to disk here
parted -s /dev/sdc set 1 boot on
目标是能够安装磁盘,包括由 Rufus 制作的 GPT 和 MBR 可启动磁盘(在 Windows 中)。引发该问题的 GPT 应该是 Rufus 方法的克隆,只是在 Linux 中制作的。
[添加]
看着真正的 Rufus USB,我看到了一个与其他任何一款都不同的图标。这次它的图标是一个盒子(而不是一根棍子),上面印着一个 USB 树形符号。它确实显示在侧栏中。它是可弹出的。
查看 Rufus 的 GPT 分区,两个显着的区别似乎是“Microsoft Basic Data”的名称和分区上的 msftdata 标志。所以这就是我接下来将尝试查找的地方
答案1
一些背景信息可能会有所帮助。在 GPT 磁盘上,基于 libparted 的工具(包括 GParted 和parted
)中的“标志”是两种东西的混合:GPT 属性,可以同时将任意数量的属性应用于任何分区;以及 GPT 类型代码(内部为 16 字节 GUID 值),每个分区只有一个。这可能会造成很多混乱,因为一个分区可以有多个标志,但有时应用一个标志会自动删除另一个标志,因为这两个标志实际上是类型代码。此外,libparted 不会明确显示某些类型代码;这些代码只是被视为文件系统类型的隐式代码。(例如,Linux 文件系统类型代码就是如此。)此外,用于识别 EFI 系统分区 (ESP) 的类型代码具有二在 libparted 的最新版本中,与其关联的标志为:boot
和esp
。它以前只是boot
,但在 MBR 磁盘上具有完全不同的含义。(我怀疑其意图是弃用boot
GPT 磁盘上的标志,以最大限度地减少长期在这一点上的混淆,但我对此并不确定。)
因此,一些您所看到的内容与类型代码有关。其中三个似乎与您的问题相关:
- Linux 文件系统-- 此类型代码 (0FC63DAF-8483-4772-8E79-3D69D8477DE4) 标识 Linux 文件系统 (ext2/3/4fs、Btrfs 等)。它在 libparted 中没有明确标记,但其
gdisk
类型代码为 8300。 - 微软基本数据-- 此类型代码 (EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) 标识 FAT、exFAT 或 NTFS 数据分区,包括 Windows 启动分区。过去,Linux “搭载”此类型代码,这造成了问题。它在 libparted 中由“msftdata”标志标识,或由
gdisk
类型代码 0700 标识。 - EFI 系统分区 (ESP)-- 此类型代码 (C12A7328-F81F-11D2-BA4B-00A0C93EC93B) 标识基于 EFI 的计算机用于启动的分区。它应该包含 FAT32 文件系统。如上所述,它在 libparted 中由“boot”和(在较新版本中)“esp”标志标识,在 中
gdisk
由 EF00 类型代码标识。
请注意,如果您确实需要知道分区的类型代码是什么,那么基于 libparted 的工具就很糟糕,因为只报告了少量的类型代码。如果您想知道类型代码,请使用gdisk
。即使它的摘要显示也有点有限;如果它无法识别 GUID 类型代码,它会将其显示为 FFFF。您可以使用i
主菜单上的选项找到完整的 GUID 值,该选项显示完整的分区信息。(gdisk
为简单起见,在其用户界面中使用简写 2 字节类型代码而不是完整的 16 字节 GUID。大多数gdisk
类型代码对应于它们的 MBR 等效代码,但乘以 0x100。例如,在 MBR 上,Linux 文件系统分区为 0x83,因此为 8300。gdisk
)
我刚刚做了一些实验,对我来说,Unity Files 程序处理 Linux 文件系统和 Microsoft Basic Data 分区的方式相同 —— 至少就我测试的情况而言。在这两种情况下,插入磁盘都会使其出现在菜单中、自动安装并可弹出。但是,ESP 不会出现在文件菜单中,也不会自动安装。这至少在某种程度上是合理的,因为某些环境可能会在硬盘和可移动媒体上创建空的(且基本上毫无意义的)ESP。(例如,每当您创建 GPT 时,OS X 的磁盘实用程序都会创建一个 ESP。)
请注意,大多数 EFI 将从任何 FAT 分区启动,即使它未标记为 ESP。不过,这并不是保证的行为;可以想象,有些 ESP 对此更加挑剔。事实上,我很确定旧的 Gigabyte Hybrid EFI 就是如此,它在很多方面都很糟糕。(我早就摆脱了我拥有的这个固件的一个示例,所以我无法仔细检查这个细节。)
像 Rufus 这样的工具,旨在创建可启动磁盘,可以通过创建 ESP 来实现这一点 - 但我还没有检查过 Rufus 实际上做了什么,所以我不知道 Rufus 是否会这样做,或者它是否会根据程序的设置做不同的事情。
维基百科上有关 GPT 的文章可以对此进行扩展。涉及 GUID 的部分位于
答案2
尝试将分区设置为可启动时出现此问题。
在 GPT 分区上,该标志与标志boot
同义esp
标志esp
与标志是互斥的msftdata
。
这个msftdata
标志使得驱动器显示在files
窗口侧栏中并且可以弹出
因此,您无法在 GPT 磁盘分区上设置启动并将其放在侧栏中。
但事实证明,你似乎不需要esp
在 UEFI 机器上进行启动设置。所以不要设置启动。