格式化为“Linux Live CD”的U盘重新分区后保留CD-ROM名称

格式化为“Linux Live CD”的U盘重新分区后保留CD-ROM名称

我有一个 USB 闪存驱动器,以前用作 Linux Fedora 的安装介质。

该棒上仍然有“Fedora Live USB”安装文件。当我将它插入我的旧笔记本电脑时,它在 KDE dolphin 中显示为名为“Fedora-Live-KDE-x86_64-22-3”的磁盘。很公平。

因此,我使用 销毁其上的所有分区fdisk,创建新分区,在所述分区上设置 ext4 文件系统。

我插入闪存驱动器。我在 KDE dolphin 中显示为“Fedora-Live-KDE-x86_64-22-3”。

不死族闪驾时间!

这个名字从何而来?感觉它不是来自 USB 闪存驱动器,但下面的事实 (3) 表明它确实来自 USB 闪存驱动器。

该名称从何而来以及如何更改它?

以下是对该名称来源的一些研究,结论是它显然来自磁盘上留下的 ISO-9660 数据。但 Linux 的这种行为是正常的吗?

e2label /dev/sdd1什么也不显示:文件系统没有标签

blkid /dev/sdd1演出

/dev/sdd1: UUID="10aab422-4212-45c8-9f99-35e5eb719154" TYPE="ext4" PARTUUID="5c4a815c-01"

▶ 在另一台计算机上使用闪存驱动器也会导致显示名称“Fedora-Live-KDE-x86_64-22-3”。

▶ 可以通过查看以下文件系统来转储“标签”(无论是什么)/dev

ls -l /dev/disk/by-label/

这显示了符号链接

Fedora-Live-KDE-x86_64-22-3 -> ../../sdb

请注意,符号链接指向设备,而不是分区。所以这不是文件系统标签,而是类似“磁盘标签”的东西。

▶ 原来的“文件系统标签”为e2label空,我们设置一下,然后看看是怎么回事:

# e2label /dev/sdb1 "Scooby Doo"
# ls -l /dev/disk/by-label/
lrwxrwxrwx. 1 root root  9 Feb  4 23:43 Fedora-Live-KDE-x86_64-22-3 -> ../../sdb
lrwxrwxrwx. 1 root root 10 Feb  4 23:43 Scooby\x20Doo -> ../../sdb1

现在磁盘和文件系统/分区都有一个标签。然而,在删除/重新插入之后,dolphin(或者更确切地说,Linux)现在确定文件系统的“Scooby Doo”名称。那么为何不!然后我们可以使用...再次擦除标签,e2label /dev/sdb1 ""然后名称又回来了,但只是部分:“Fedora-Live-KDE-”(为什么部分?因为它是从 0x9000 开始读取的,而完整标签位于 0x8000,请参阅以下)

▶ 也尝试看看有什么parted作用。它看起来非常困惑:它认为带有 512 字节块的 8GiB 棒实际上是带有 2048 字节块的 32GiB 棒,并检测到 Apple 分区,而fdisk对找到 8GiB Linux 分区绝对满意。好奇者和好奇者。

(parted) print
Warning: The driver descriptor says the physical block size is 2048
bytes, but Linux says it is 512 bytes.
Ignore/Cancel? i
Model: Generic USB Flash Disk (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 2048B/512B
Partition Table: mac
Disk Flags:

Number  Start   End     Size    File system  Name   Flags
 1      2048B   10.2kB  8192B                Apple
 2      88.1kB  5278kB  5190kB               EFI
 3      5319kB  26.1MB  20.8MB               EFI

它可能并不完全混乱,因为在棍子上我们发现了这个:

看起来像 Mac 的东西

▶ 其他奇怪之处:重新格式化的 USB 记忆棒似乎不可写入,但对于非 root 用户来说可以遍历。不过,以 root 身份编写是可行的。但这只是一个旁白。

▶ 获取磁盘转储okteta显示磁盘名称字符串位于刚刚过去的 0x8000 位置,即在块 64 中(块大小为 512 字节):

okteta 转储大约 0x8000

这显然源于LiveCD 结构。

进一步查看,可能会在 0x9000 之后再次显示该名称,很可能是 UTF-16 格式,版本后缀被删除,可能是因为该字段具有恒定大小:

okteta 转储大约 0x9000

▶ 是时候戳一下看看会发生什么了。我们修改0x8000标记处的字符串:

修改 0x8000 左右的字符串

我们还修改了 0x9000 标记处的字符串:

修改 0x9000 附近的字符串

然后将块写回棒(因为我们一直在修改使用使用获得的文件dd),同步,同步和弹出。

然后重新插入棍子。在这种情况下,Linux 将字符串固定在 0x9000 处。

[root@elf ~]# ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx. 1 root root 10 Feb  9 22:09 DellUtility -> ../../sda1
lrwxrwxrwx. 1 root root 10 Feb  9 23:20 MOTHRA-Dead-KDE- -> ../../sdb1
lrwxrwxrwx. 1 root root 10 Feb  9 22:09 OS -> ../../sda2
lrwxrwxrwx. 1 root root 10 Feb  9 22:09 RECOVERY -> ../../sda4

海豚显示的内容/dev/disk/by-label

字符串已被修改

所以,我们知道字符串从哪里来。能够更改它似乎没有什么用处,因为它来自 CD-ROM 结构,而我们已将标准分区方案放在 USB 磁盘上。为什么Linux要混搭这两种结构呢?

答案1

这是卷标。我认为这是mkfs.vfat 中-L的标志,等等。mkfs.ext4-n

您可以通过使用 向其传递新标签来更改它e2label,或者使用 将其完全终止dd

答案2

最后的答案似乎如下:

  1. 该名称来自 CD-ROM 数据的其余部分(回想起来,这是非常明显的)
  2. 您无法更改它,因为它根本不应该被使用,甚至不应该存在 - 毕竟,您希望将 USB 闪存驱动器用作磁盘,而不是 CD-ROM。这两个有不同的格式。一般来说,0x8000或0x9000处没有可用的字符串。
  3. 为何在插入棍子时使用这个名称尚不清楚。人们必须看一下 Linux 中负责识别块设备格式的任何部分的源代码。

课程:

在 USB 闪存驱动器上设置硬盘分区方案之前,请将其清零以重置它。否则,结果将是“未定义的”,并且取决于读取闪存驱动器的系统使用的启发式方法。正如所见parted,它检测 mac 文件系统。

聚苯乙烯

如何以 128K 增量“将 USB 闪存驱动器清零”(128K 应该是 1 个或更多闪存单元的大小,因此任何闪存单元只会被写入一次):

dd if=/dev/zero of=/dev/sdXXX bs=128K 

“将 USB 闪存驱动器清零”实际上充满了意想不到的复杂性。也许应该添加count=1024以保持写入块较低:

相关内容