如何格式化流氓闪存驱动器? (GParted 尝试接触超出实际容量的文件系统页脚,并无限期冻结)

如何格式化流氓闪存驱动器? (GParted 尝试接触超出实际容量的文件系统页脚,并无限期冻结)

在 Limbo 型假 USB 或 SD 卡上,从驱动器上特定位置开始的所有扇区都不可用(仅零或仅一或不可读的扇区响应)。

闪存驱动器可能标称容量为 256 GB,但实际上只有 16 GB。任何超过 16GB 阈值写入的内容都会进入数字黑洞(因此地狱边缘)。当尝试访问该数据时,可能会发生以下情况之一:

  • 该设备返回空白扇区00000000 (0x00)仅字节。
  • 设备返回扇区11111111 (0xFF)仅字节。
  • 该设备向计算机发出该扇区已损坏的信号。
  • 设备无限期地冻结并且永远不会返回读取请求。
  • 设备返回随机数据(非常罕见的类型)

在我拥有的流氓闪存驱动器上,第一个就是这种情况。它返回00 00 00 00…在所有扇区内的所有 512 字节扇区中地狱边缘区域,超出了实际数据容量。

使用mkfs或者gparted在假 USB(用于测试目的)上创建文件系统确实会无限期冻结。

Windows 和 Android 均成功将 SD 卡格式化至其声称的全部容量需要不到半分钟。仅当不触及超出实际容量的任何文件系统页脚时,这才可能实现。只能通过修改标题。
GParted 和 mkfs 无限期冻结(直到从 PC 中移除驱动器)并留下用以下指示的文件系统未知输入 GParted。

如何在 GParted 中将恶意闪存驱动器格式化为声称的全部容量,同时仅写入文件系统标头?

这将使 GParted 不会触及导致无限期冻结的边缘区域(不要与恶意驱动器上列出的第四种扇区返回类型混淆。这是 GParted 的反应)。

我想要实现的目标:

  • 测试 Linux 的反应交换到一个假闪存驱动器上。 因为这对于 StackExchange 来说太微不足道了,所以我决定自己尝试一下。
  • 在Android手机上测试不同的文件系统(ext2、ext3、ext4、FAT16、FAT32、exFAT、f2fs、xfs、zfs、ntfs):我想尝试使用Android手机录制超过实际容量的视频,看看它的反应如何。

答案1

我有点怀疑这是否会起作用。但是有一种强大的方法可以满足您的要求。如果这不起作用,您就没有其他选择可以mkfs做更好的事情。

  1. 在主文件系统上创建一个与设备大小相同的(稀疏)文件。例如使用truncate --reference=/dev/sdX disk.img
  2. 对文件进行分区(我假设您想要这个 - 如果您不想要,则跳过它并使用/dev/loopN而不是/dev/loopNp1)。您可以运行fdisk disk.img, 或dd if=/dev/sdX of=disk.img conv=notrunc bs=1M count=1复制设备上的任何分区。
  3. losetup -f disk.img- 这将创建一个循环设备并打印其名称。
  4. mkfs.FOO /dev/loopNp1- 创建文件系统
  5. dd if=/dev/loopN of=/dev/sdX bs=1k count=16M conv=sparse- 将磁盘映像的前 15G (16*1024*1024*1024) 复制到设备中。您可以根据需要进行调整。 conv=sparse将跳过全为零的写入块。

相关内容