我的朋友的 USB 闪存驱动器出现问题,我建议他进行低级格式化。然后我突然想到我什至不知道如何在 Linux 中做到这一点。那么...如何在 Linux 中低级格式化闪存呢?我的朋友尝试在 Windows 中对驱动器进行“完整格式化”,但失败了。
答案1
“低级格式化”是在软盘上完成的,您可以通过选择以不同的方式组织磁道和扇区来以不同的密度进行写入。但这对于大多数现代媒体来说毫无意义。它如何组织设备上的数据的概念是固定且不可更改的。对于闪存来说,这没有任何意义,因为闪存具有离散位,而不是磁域。更高级别的格式化是可能的,这是mkfs
在 UNIX 领域。
答案2
有决不在大多数闪存设备上进行低级格式化,因为它们具有来自 USB/ATA/SD/等的附加转换层。到MTD这掩盖了低级 MTD 设备(能如果直接进行低级格式化[你不能])。
答案3
低级格式化对于不同的人和不同的上下文来说意味着许多不同的事情。
最初的含义是磁盘格式化所需的一个步骤——磁盘驱动器需要在介质上写入标头、同步和其他模式,然后才能将数据存储到其中。通过这种方式,磁头可以检测到 A) 何时在磁道上以及 B) 其在磁道上的位置。低级格式化软盘使磁盘能够读取和写入块。早期的 MFM 和 RLL PC 硬盘可以进行低级格式化,通常使用硬盘控制器(ISA 卡)ROM 中内置的实用程序。现代 IDE 和 SATA 硬盘也经过低级格式化,但仅在工厂进行。
其他各种含义包括向所有块写入零、配置驱动器以禁用 HPA 和 DCO 等“隐藏”区域,然后将所有块清零,或者与分区比格式化更相关的其他操作。
原始闪存在工厂需要不同的初始准备步骤 - 每个闪存“擦除块”(类似于磁盘上的“块”)都需要进行测试,如果确实不好,则将其标记为坏。每个“擦除块”都有一个额外的小“OOB”块,用于保存纠错信息 - 这就是它被标记为坏的地方。您不想重复此步骤,因为写入坏块的行为可能会阻止您再次设置该特定位以将其标识为坏块。
但你处理的不是原始闪存。您正在处理 USB 闪存驱动器。所有闪存驱动器中都有一个控制器芯片,它接受来自主机的 USB 命令并代表主机与内部的原始闪存进行通信。其中一些控制器芯片可以配置为将部分闪存报告为单独的 CD-ROM 分区,或者充当两个单独的 USB 存储设备。根据控制器芯片的品牌和型号,您也许能够找到可以重置该控制器芯片的恢复或配置实用程序(可能仅限 Windows)。首先,打开闪存驱动器,寻找小型 PCB 上(可能)两个芯片中较小的一个,然后进行一些谷歌搜索。外壳外部印有的品牌和型号不太可能帮助您找到外壳内控制器的制造商。
答案4
我过去曾遇到过实现 SCSI FORMAT UNIT 命令的设备(虽然已经有一段时间了)——在 Linux 中您可以使用:
sg_format --格式/dev/sdX
将这些设备重置为出厂状态(USB 存储规范源自较旧的 SCSI 标准)。
我相信一些较新的 USB 3 设备也实现 ATA 安全命令,因此您可以使用https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase这可能会产生将闪存转换层重置为其出厂状态的效果(就像通常对 SSD 所做的那样)。