将 iso 刻录到 usb 时,dd 如何知道正确的磁盘标签?

将 iso 刻录到 usb 时,dd 如何知道正确的磁盘标签?

我曾经dd将 Arch Linux 映像刻录到 USB 棒上,但现在我需要在同一 USB 棒上存储其他文件。之后 USB 棒是只读的,dd所以我决定手动格式化它。该棒被识别为可启动,但 Arch 无法加载系统,因为它正在寻找标有“ARCH_201912”的磁盘。据我所知,我可以使用-n带有mkfs.fat如下命令的标志:

mkfs.fat -F 32 -n "$label" "$partition"

我只是不想手动输入它,因为它每个月都会变化(我正在编写 bash 函数)。并以dd某种方式知道标签应该是什么,并正确地将其设置为 usb 设备。我认为有一个文件存储了这个值,所以我发出了:

$ grep --directories=recurse ARCH_201912 .

./arch/boot/syslinux/archiso_pxe.cfg:APPEND archisobasedir=arch archisolabel=ARCH_201912 archiso_nbd_srv=${pxeserver}
./arch/boot/syslinux/archiso_sys.cfg:APPEND archisobasedir=arch archisolabel=ARCH_201912
Binary file ./EFI/archiso/efiboot.img matches
./loader/entries/archiso-x86_64.conf:options archisobasedir=arch archisolabel=ARCH_201912

有没有办法在不解析文件的情况下获取此标签(因为这似乎archisolabel是 arch linux 特有的)?我希望此方法适用于 linux 和 windows。不过我不确定 windows 10 是否需要正确的标签设置。

答案1

并且 dd 以某种方式知道标签应该是什么并正确地将其设置为 usb 设备

标签实际上并没有以任何特殊方式设置在设备上。它只是文件系统元数据的一部分(元数据本身作为常规数据存储),并会与所有其他文件系统结构一起被盲目复制。

dd 将驱动器标记为只读,

不是。如果发生这种情况,要么是文件系统级别的问题(可能映像仅包含不支持写入的文件系统,例如 ISO9660 在设计上是只读的),要么是驱动器的物理使用寿命已到(廉价的 USB 记忆棒经常如此)。

因此,是否由 .iso 文件的维护者使其可添加(例如设置分区或标签)?

是的。“纯” .iso 文件仅包含 CD 使用的 ISO9660 文件系统 - 维护人员需要使用工具将其转换为包含 BIOS MBR 引导加载程序和 FAT32 或类似文件系统的混合映像。

(或者维护者当然可以跳过 .iso 部分并直接从头开始构建常规的“dd-able”磁盘映像。)

我认为 EFI 可能存在一种指定磁盘标签的标准。

磁盘没有标签。分区可以有标签,也可以文件系统。USB 驱动器的唯一特点是它们通常只有一个分区(和一个文件系统),因此它的标签通常被视为磁盘的标签。

这两种标签都作为常规数据存储在磁盘本身上。(分区标签确实存储在 UEFI GPT 分区表中,但您通常看不到它们。)

文件系统标签(您通常看到的类型)存储在文件系统元数据中,例如在 Ext4 标头或 FAT32 主文件表中。

然而,标签是不是存储为实际文件 - 在 FAT32 中,它是一种特殊的 MFT 记录类型;在其他文件系统中,它是一个专用的文件系统头字段。

有没有办法不解析文件就获取这个标签(因为 archisolabel 似乎是 arch linux 特有的)?

在 Linux 上你需要使用,它有一个相应的CLI工具blkid。该库可以从几十种文件系统类型中提取基本信息(文件系统标签,UUID)。

但是,blkid 需要 root 权限才能读取物理设备,因此您需要使用 从 udev 获取缓存数据lsblk,而不是blkid图像文件。

lsblk -n -o LABEL /dev/sda2

相关内容