检查USB拇指驱动器的实际大小

ver*_*ilt 47 hardware usb-drive sd-card hardware-test micro-sd

我最近阅读了很多关于假冒 MicroSD 卡和 USB 拇指驱动器的文章,它们声称拥有大量空间(即使您询问您的计算机),而实际提供的空间却少得多。我最近买了一个 SanDisk USB 驱动器(声称 128 GB)并想测试它的大小。它不是通过 ebay 或其他方式购买的,但我真的很想在有效使用它之前测试实际尺寸。

我可以在上面复制东西,再复制回来,看看文件是否正常。我也可以用哈希和其他东西自动化它。但我希望有一个更准确的解决方案。我在 Windows 上读到过,H2testw 可以解决问题。有没有一种简单的方法可以在 Ubuntu/Linux 上进行测试?也许是一种专门的、运行良好的工具?

更新:明确地说,这个想法是验证控制器告诉 linux 系统的大小是否正确(因此不会丢失任何数据)。我不是想看看我是否得到 128 GB 而不是 127.3 GB。我想测试我写的所有数据是否都可以再次读取。不幸的是,我只能在英文技术网站上找到一些关于此的信息。不过,有很好的德国资源。我实际上正在寻找这样的应用程序,但对于 Ubuntu/Linux:https : //www.raymond.cc/blog/test-and-detect-fake-or-counterfeit-usb-flash-drives-bought-from -ebay-with-h2testw/

更新 2:我试图用英语收集一些资源。由于时间关系,我没有详细阅读所有这些内容。

更新 3:说明

由于下面奇怪的批评,一些解释。

问题是什么,为什么单独 dd 不能解决它?

这是对

“清楚地弄清楚你要解决的问题是什么,以及“假驱动”的定义是什么。”

似乎有些人不明白这个问题。所以我尽量详细地解释它,尽管我认为这对我的问题有很大的影响。

您的操作系统或 unix 工具为您提供的 USB 设备容量可能是错误的。这是致命的,因为您的操作系统规定了您可以发送的数据量。发送的数据超出其实际容纳量,您将丢失数据。这是个问题。那么,为什么会发生这种情况呢?

您无需非常了解 USB 协议即可理解问题。串行接口具有共同属性,即客户端设备(USB 驱动器)需要通过此串行接口告知其自身的容量。这意味着客户端设备需要它自己的控制器,并了解有关设备用途的一些知识,在这种情况下,它是容量。当它接收到存储某些东西的命令时,它还决定做什么。如果控制器以这种方式编程,它可以忽略命令或用数据覆盖某些内容。

这是什么意思?无论您的 unix 工具告诉您有关驱动器容量的信息:这就是工具要求驱动器的内容,仅此而已。这就是 h2testw 的发明目的:它使用稍后解释的方法测试实际大小,并将其与驱动器所说的进行比较。如果这不一样,您可能会丢失数据,因为您存储数据的所有常见操作都依赖于您的操作系统的信息,这只是询问控制器。为什么只问?测试需要时间并覆盖驱动器上的所有数据。因此,操作系统需要依赖这些信息是很自然的。

像h2testw这样查看真实容量,确实可以用dd写驱动器的数据,再读一遍,看看是不是和你写的一样。完全合法。硬件和驱动器的性质使它变得更加复杂。例如,考虑写缓存。您需要确保不从缓存中读取。这只是为什么它不像看起来那么容易的一个例子。还认为只写零意味着信息的低熵,可以在阅读时重建。只是细节上没那么容易。当然,您仍然可以手动完成。

但为什么,什么时候可以自动化呢?为什么要上班?f3 正如我在下面的回答中所提出的,实现了许多贡献者的大量想法(认为它是一种扩展的 h2testw),并且它还实现了几种具有不同权衡的方法。开发人员想出了他们手头上不同的假驱动器(又名假冒驱动器)的技巧。所以,虽然我理解理论和问题(似乎是因为这些问题在德国科技媒体中得到了很好的解释,但在英语媒体中却没有),但我并没有假装了解一切,这就是我在上面提到的原因。这只是我理解的理论,我更像是一个软件人。但作为一名信息学学生,我对它的理解足以看到问题。

“尝试了解基本的 Unix 实用程序”

实际上我已经回答了这个问题,但要明确说明:Unix 工具仅使用 USB 协议(当然仅适用于 USB 设备)来收集信息。做更多的事情是没有意义的。

仅从信托供应商处购买是否有帮助?

tl;博士:没有。

“在购买商品时,就像涉及任何形式的安全一样,请考虑寻找值得信赖的卖家并只从他们那里购买驱动器。”

安全(和安全)与信任无关!这是关于验证和确认!对不起,但这在很多方面都是错误的。

假设您通过受信任的卖家购买。几个问题:

  1. 供应商是否测试了硬件以确保没有数据丢失?当他购买假驱动器并出售时,是否重新识别?不必要。

  2. 有没有可能他买了他不知道是假的东西?总的来说,看看最近的ryzen假货:https ://www.pcgamer.com/beware-of-fake-ryzen-processors- sell-on-amazon /https ://www.heise.de/newsticker/meldung/ Direkt-von-Amazon-Faelschungen-von-AMDs-Ryzen-Prozessoren-im-Umlauf-3772757.html

  3. 如果我在驱动器中丢失了我的演示文稿并搞砸了演示文稿,我信任的供应商会及时返回并拯救我吗?它可能会取代驱动器,因为上一次穿越时空的 DeLorean 于 1885 年被摧毁。

其他的东西

“这个问题似乎更像是 OP 喜欢什么的“促销”,而且似乎 OP 对实际测试驱动器不太感兴趣。”

这是荒唐的。我正在专门寻找一个与 h2testw 类似的工具,它也可以在 linux 上运行。是的,这就是我“喜欢”的,有用的答案,很抱歉。我不知道说英语的媒体没有意识到这些问题,很幸运后来找到了类似的东西。这不是促销,但实际上您似乎可以使用它。

ver*_*ilt 56

f3 - 打击 Flash 欺诈

我只找到了一种替代方法,但我认为这甚至比h2testwMS Windows的原始工具更好。幸运的是,它真的很容易使用,甚至可以从命令行使用。不过,有可用的 GUI。工具网站上还有很多关于实施和假驱动问题的信息。

f3 提供两种方法:

  • f3probe 方法:更快
  • h2testw 方法:较慢。还要测试 R/W 性能。应该比较靠谱。

f3probe 方法(推荐)

f3probe是一种测试驱动器的方法,虽然不准确但速度更快,因为它不会在整个驱动器上写入。您可以在工具网站上阅读更多相关信息。如果您想 100% 确定,最好使用 h2testw 方法。正如开发人员在网站上描述的那样:

f3probe 是识别假驱动器及其真实大小的最快方法。

和:

最后,由于 f3probe 是免费软件,一旦 f3probe 得到实战证明,f3probe 就可以嵌入到智能手机、相机、MP3 播放器和其他设备中,一劳永逸地阻止假闪光灯的扩散。

网站上还有一个用法示例:

警告:这会破坏磁盘上以前存储的所有数据!

$ sudo f3probe --destructive --time-ops /dev/sdb
[sudo] password for michel: 
F3 probe 6.0
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

WARNING: Probing may **demolish data,** so it is more suitable for flash drives out of the box, without files being stored yet. The process normally takes from a few seconds to 15 minutes, but
         it can take longer. Please be patient. 

Bad news: The device `/dev/sdb' is a counterfeit of type limbo

You can "fix" this device using the following command:
f3fix --last-sec=16477878 /dev/sdb

Device geometry:
             *Usable* size: 7.86 GB (16477879 blocks)
            Announced size: 15.33 GB (32155648 blocks)
                    Module: 16.00 GB (2^34 Bytes)
    Approximate cache size: 0.00 Byte (0 blocks), need-reset=yes
       Physical block size: 512.00 Byte (2^9 Bytes)

Probe time: 1'13"
 Operation: total time / count = avg time
      Read: 472.1ms / 4198 = 112us
     Write: 55.48s / 2158 = 25.7ms
     Reset: 17.88s / 14 = 1.27s
Run Code Online (Sandbox Code Playgroud)

请注意,它还返回一个命令,使您能够使用具有实际大小的驱动器,使用f3fix.

f3fix 工具

f3fix 创建一个适合假驱动器实际大小的分区。使用f3probe的输出来确定 i3fix 的参数

sudo f3fix --last-sec=16477878 /dev/sdb
Run Code Online (Sandbox Code Playgroud)

h2testw 方法/使用 f3read/f3write 测试性能

F3 是一组处理假闪存驱动器的工具。其中两个一起实现了h2testw-Method:

f3write [--start-at=NUM] [--end-at=NUM] <PATH>
f3read  [--start-at=NUM] [--end-at=NUM] <PATH>
Run Code Online (Sandbox Code Playgroud)

f3write将询问设备声明的大小并用生成的文件填充它,每个文件的大小为 1gb。f3read将读取所有这些文件并查看它们是否完整且未损坏。例如,我用来测试我的 ~128gb 拇指驱动器的命令:

$ f3write /media/username/1EB8021AB801F0D7/
Free space: 117.94 GB
Creating file 1.h2w ... OK!                           
...
Creating file 118.h2w ... OK!                         
Free space: 0.00 Byte
Average writing speed: 11.67 MB/s
Run Code Online (Sandbox Code Playgroud)

现在测试文件是否正确存储:

$ f3read /media/username/1EB8021AB801F0D7/
                  SECTORS      ok/corrupted/changed/overwritten
Validating file 1.h2w ... 2097152/        0/      0/      0
...
Validating file 118.h2w ... 1979488/        0/      0/      0

  Data OK: 117.94 GB (247346272 sectors)
Data LOST: 0.00 Byte (0 sectors)
           Corrupted: 0.00 Byte (0 sectors)
    Slightly changed: 0.00 Byte (0 sectors)
         Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 32.38 MB/s
Run Code Online (Sandbox Code Playgroud)

使用这种方法测试这种大小的驱动器大约需要三个小时,有时会导致我的计算机上的磁盘负载过重,但我认为这是最准确的。

在 Ubuntu 中安装

在终端:

sudo apt install f3
Run Code Online (Sandbox Code Playgroud)

这将为您带来:f3brew, f3fix, f3probe, f3read,f3write及其手册页。

这些工具是f3软件包的一部分,至少在 Ubuntu 15.10 上可用。根据该网站,还有一些可用的工具。要让他们看看网站。
该软件包带有简短但有用的联机帮助页,尽管我认为他们错过了网站上有关 f3read/write 和 f3probe 差异的一些信息,例如,这就是为什么这个答案会更长一些。

  • “[f3probe] 不再是实验性的,只能在 Linux 上使用。” https://github.com/AltraMayor/f3/issues/78#issuecomment-378599141 (4认同)
  • 感谢您介绍这个很棒的工具。只是想补充一点,使用 `apt-get` 安装将安装 `f3read` 和 `fwrite` **only** 因为 `f3probe` 和 `f3fix` 被认为是实验性的。如果要使用它们,您必须在安装它们的依赖项“sudo apt-get install libudev1 libudev-dev libparted0-dev”后使用“make Experimental”从源代码构建它们。见 https://github.com/AltraMayor/f3#the-extra-applications-for-linux (3认同)