我曾经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