我有一个 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
它可能并不完全混乱,因为在棍子上我们发现了这个:
▶ 其他奇怪之处:重新格式化的 USB 记忆棒似乎不可写入,但对于非 root 用户来说可以遍历。不过,以 root 身份编写是可行的。但这只是一个旁白。
▶ 获取磁盘转储okteta
显示磁盘名称字符串位于刚刚过去的 0x8000 位置,即在块 64 中(块大小为 512 字节):
这显然源于LiveCD 结构。
进一步查看,可能会在 0x9000 之后再次显示该名称,很可能是 UTF-16 格式,版本后缀被删除,可能是因为该字段具有恒定大小:
▶ 是时候戳一下看看会发生什么了。我们修改0x8000标记处的字符串:
我们还修改了 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
最后的答案似乎如下:
- 该名称来自 CD-ROM 数据的其余部分(回想起来,这是非常明显的)
- 您无法更改它,因为它根本不应该被使用,甚至不应该存在 - 毕竟,您希望将 USB 闪存驱动器用作磁盘,而不是 CD-ROM。这两个有不同的格式。一般来说,0x8000或0x9000处没有可用的字符串。
- 为何在插入棍子时使用这个名称尚不清楚。人们必须看一下 Linux 中负责识别块设备格式的任何部分的源代码。
课程:
在 USB 闪存驱动器上设置硬盘分区方案之前,请将其清零以重置它。否则,结果将是“未定义的”,并且取决于读取闪存驱动器的系统使用的启发式方法。正如所见parted
,它检测 mac 文件系统。
聚苯乙烯
如何以 128K 增量“将 USB 闪存驱动器清零”(128K 应该是 1 个或更多闪存单元的大小,因此任何闪存单元只会被写入一次):
dd if=/dev/zero of=/dev/sdXXX bs=128K
“将 USB 闪存驱动器清零”实际上充满了意想不到的复杂性。也许应该添加count=1024
以保持写入块较低: