检查USB拇指驱动器的实际尺寸

我最近读了很多关于虚假的USB拇指驱动器,声称有很大的空间(即使你问你的电脑),而物理上提供的方式更少。 我最近买了一个SanDisk USB驱动器(128 GB声称),并想测试它的大小。 它不是通过ebay或其他东西购买的,但我真的想在有效地使用之前测试实际尺寸。

我可以复制它上面的内容,将其复制回来,看看文件是否正常。 我也可以用Hashes和东西自动化它。 但我希望有一个更准确的解决方案。 我读到了Windows,H2testw就是这样做的。 有没有一种简单的方法可以在Ubuntu / Linux上测试它? 一个专业的,工作良好的工具可能?

更新:为了清楚起见,我们的想法是validation控制器告诉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与- h2testw /

Update2:我试图用英语汇集一些来源。 由于缺少时间,我没有详细阅读所有这些内容。

  • https://www.ebay.com/gds/All-About-Fake-Flash-Drives-2013-/10000000177553258/g.html
  • https://en.wikipedia.org/wiki/USB_flash_drive#Counterfeit_products
  • https://www.heise.de/newsticker/meldung/Verdaechtige-USB-Sticks-mit-2-Terabyte-bei-Amazon-Faelschungen-entlarven-Datenverluste-vermeiden-3915202.html
  • http://www.pcgameshardware.de/USB-Stick-Hardware-255579/News/falsche-Speicherkapazitaet-bei-Amazon-1245682/

Update3:解释

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

问题是什么,为什么单凭dd无法解决?

这是对此的反应

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

似乎有些人不理解这个问题。 所以我试着尽可能详细地解释它,尽管我认为这对我的问题很重要。

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

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

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

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

但是,为什么,当你可以自动化东西? 为什么要上class? 我在下面的答案中提出的f3实现了许多贡献者的大量想法(考虑到它扩展了h2testw),并且它还实现了几种具有不同权衡的方法。 开发人员想出了他们手边的不同假驱动器(又名假冒驱动器)的技巧。 所以,虽然我理解理论和问题(似乎因为问题在德国科技媒体中得到了很好的解释,但在英语媒体中没有得到解释),我并不假装理解所有内容,这就是为什么我在上面提到它。 这只是我理解的理论,而且我更像是一个软件人。 但作为一名信息学专业的学生,​​我完全理解这个问题。

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

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

仅从桁架供应商处购买是否有帮助?

tl;博士:没有。

“当谈到购买商品时,就像它涉及到任何forms的安全性一样,考虑寻找一个值得信赖的卖家并仅从他们那里购买驱动器。”

安全(和安全)不是信任! 这是关于validation和validation! 对不起,但这在很多方面都是错的。

假设您通过值得信赖的卖家购买。 几个问题:

  1. 供应商是否测试硬件以确保没有数据丢失? 当他购买假驱动器并销售它们时会重新认识到吗? 不必要。

  2. 他有可能购买他不知道的假货吗? 总之,看看最近的ryzen假货: https ://www.pcgamer.com/beware-of-fake-ryzen-processors-selling-on-amazon/,https://www.heise.de/newsticker/meldung/ DIREKT -冯-亚马逊Faelschungen -冯- AMD的-Ryzen-Prozessoren-IM-阿姆洛夫-3772757.html

  3. 如果我在驱动器中放松了演示文稿并搞砸了演示文稿,那么我信赖的供应商会及时回过头来救我吗? 它可能会取代驱动器,因为最后一次旅行的DeLorean在1885年被摧毁。

其他的东西

对于OP喜欢的问题,这个问题看起来更像是“促销”,而OP似乎对实际测试驱动器的兴趣要小得多。“

这是荒唐的。 我正在寻找一个类似于h2testw的工具,它也运行在linux上。 是的,这就是我喜欢的,有用的答案,很抱歉。 我不知道讲英语的报刊并不知道这些问题,并且很幸运能够在以后找到类似的东西。 这不是促销,但实际上你似乎可以使用一个。

我发现只有一个替代品,但我认为这比MS Windows的原始h2testw工具更好。 幸运的是,即使从命令行也很容易使用它。 但是有GUI可用。 关于工具网站上的假驱动器的实现和问题,还有很多信息。

F3 – “打击诈骗诈骗”或“打假冒闪光”

资料来源: http : //oss.digirati.com.br/f3/
QT GUI: https : //github.com/zwpwjwtz/f3-qt
OSX GUI: https : //github.com/insidegui/F3X

h2testw方法

F3是一系列处理虚假闪存驱动器的工具。 其中两个一起实现了h2testw

 f3write [--start-at=NUM] [--end-at=NUM]  f3read [--start-at=NUM] [--end-at=NUM]  

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 

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

 ~> 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 

使用这种方法对这种尺寸的驱动器进行测试大约花了三个小时,有时会在我的计算机上造成很大的磁盘负载,但据说对我来说最准确。

f3probe方法

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

f3probe是识别假驱动器及其实际尺寸的最快方法。

最后,由于f3probe是免费软件,并且f3probe经过实战certificate,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 

请注意,它还会返回一个命令,使您可以使用f3fix来使用具有实际大小的驱动器。

f3fix工具

f3fix使用户能够使用伪驱动器的实际容量而不会丢失数据。

在Ubuntu中安装

所描述的工具是f3包的一部分,至少在Ubuntu 15.10上可用。 根据该网站,还有一些可用的工具。 让他们看一下网站。 要安装软件包,只需输入终端:

 sudo apt-get install f3 

该软件包附带简短但有用的联机帮助页,但我认为他们错过了网站上有关f3read / write和f3probe之间差异的一些信息,这就是为什么这个答案会更长一些。

我已经编写了一个简单的工具,它叫做CapacityTester(截图) ,它有一个GUI和一个CLI。

Debian 7有一个预编译的二进制文件可供下载 ,它很可能在现代Ubuntu系统上开箱即用。

我把它写成供个人使用,因为我找不到用于此目的的图形工具。 您只需要先安装空的USB闪存驱动器,选择它并开始测试。 这是一个非常愚蠢的工具,因为它只是用文件填充驱动器,然后validation驱动器上的数据是否正确。 它将在第一个错误(写入或读取/validation)上中止测试。 它将报告无法成功写入或validation的块的偏移量,但这是一个逻辑偏移量,因此该信息可能无用,因为它取决于文件位于驱动器上的文件系统。 但是,当驱动器已经填满数据并且可以读取和validation所有内容时,应该可以安全地假设驱动器的报告容量是正确的。 作为旁注,测试文件会自动删除(如果驱动器坏了,这可能不起作用)。

同样,它非常简单,因为它只适用于现有文件系统之上的文件。 所以有一些KB(+ 1M缓冲区)无法测试。 它非常慢,因为它真的填满了整个文件系统。 F3肯定更复杂,也更快,但它没有GUI。 CapacityTester存在的唯一原因是因为它具有GUI,以便不熟悉命令行或只是喜欢GUI的用户可以使用它。

反馈表示赞赏。

解决OP的行为和“虚假驱动器”

我正在编辑答案以正确处理几点,因为OP非常激烈(在我看来,反对大多数评论和答案,除了他们自己,我觉得可疑)。 特别是,有很多人声称存在“虚假驱动器”,但是对于地球上究竟意味着什么并没有明确的定义。 OP说:

我可以复制它上面的内容,将其复制回来,看看文件是否正常。 我也可以用Hashes和东西自动化它。 但我希望有一个更准确的解决方案。

OP自己承认他们“可以只复制东西”,并validation数据的完整性,但非常反对所有其他评论和答案提出任何其他的东西,OP只是继续推动F3作为“真正的交易”。 问题本身起初是关于驱动器的大小,但是无论出于什么原因,OP都会发现哈希“看看文件是否正常”,好像有神秘的驱动器要求一个尺寸并让你写出那个尺寸,但是那么数据就是腐败的。 因此,我发现它非常可疑,并会认为OP推广F3作为垃圾邮件问答。

当一个驱动器实际上是假的驱动器

在这个问题中,OP的明确定义是

“..驱动器声称有很大的空间(通常携带太远,如128 GB),而物理上只提供0.5到4 GB。”

换句话说,根据OP, 控制器声称 X数据量,但USB只能包含比所声称的少80-90%的东西。

用户sudodus在评论中提出 (重点补充):“我发现有几个USB pendrives略小于标称尺寸。我称它们尺寸不足 。我认为假驱动器‘实际尺寸过小’ (通常是标称尺寸的一半)或更少 )“。 这个定义很棒,但是如果我们这样做,伪驱动器定义为50%。 声称64 GB但只能容纳32 GB的驱动器,技术上将其一半的价值丢失给所有者,而所有者只能将其预期的一半放在驱动器上。

我提出了一个更简单的定义:假冒存储设备是声称具有Claimed Size但低于15%容差(并且容差为Claimed Size ± 15 % )的设备。

± 15 %非常合理。 还要考虑用户通常在Unix,IEEE和IEC组织之间混淆使用二进制前缀而不是10前缀的数据存储大小。 在yotta前缀级别,差异达到20%,但USB驱动器还没有,所以对于未来20年,15%是合理的。 (参见askubuntu问题“’MiB’中的’i’的含义”和二进制前缀 )

测试驱动器

实际上,除了Ubuntu和大多数符合POSIX标准的Unix系统之外,用户不需要任何特殊工具。 让我们再次强调和重新定义这个定义:

如果我们无法将数据量写入驱动器并且我们写入的内容在15%容差范围内,那么驱动器就可以了

他用dd简单的方法是用零覆盖设备(当然记得在你这样做之前保存你的文件)。

 sudo dd if=/dev/zero of=/dev/sdb1 iflag=nocache oflag=direct bs=1 

注意块大小为1字节时bs=1dd命令通常会报告写入的内容。

 $ dd if=/dev/zero of=/dev/null bs=1 count=1024 1024+0 records in 1024+0 records out 1024 bytes (1.0 kB, 1.0 KiB) copied, 0.00261981 s, 391 kB/s 

我们要求它写1024字节,写入1024字节。

遵循定义的更精确的步骤列表将是:

  • 弄清楚驱动器声称了多少数据(假设您怀疑df “错误”)。 在这个例子中,假设/dev/sdb1是我的USB驱动器的设备文件:

     $ df -P /dev/sdb1 | awk 'NR==2{print $2}' 115247656 

    请注意, -P标志用于POSIX可移植性,这意味着数据的块大小将为1024字节,这意味着该驱动器上有115247656 * 1024字节。

  • 找出低于驱动器声称(115247656)的15%容差,或许使用支持浮点计算的实用程序,如awk

      $ awk 'BEGIN{printf "%d\n",115247656*(1-0.15)}' 97960507 
  • 在与上一步中的驱动器相同大小的硬盘驱动器上创建随机数据,以用作基准: dd if=/dev/urandom of=./mytestfile.random bs=1024 count=97960507

  • 现在写入数据dd if=./mytestfile.random of=/dev/sda1 。 如果驱动器可以容纳这么多,它就是“真实的”。 您也可以使用./mytestfile.random md5sumsha1sum ,并./mytestfile.random/dev/sda1进行比较。 更好的改进是将mytestfile.random写入文件的挂载点,从而将文件系统保留在驱动器上并且不改变驱动器的分区,换句话说

     dd if=./mytestfile.random of=/mountpoint/for/usb/drive/testfile.random 
  • 为了完整性,您可以进行任何散列检查,例如md5sumsha1sumsha256sum或其他。 例如

     md5sum ./mytestfile.random /mountpoint/for/usb/drive/testfile.random 

    这里的关键点是,如果写入数据量在容差范围内并在写入之前和之后产生正确的校验和 – 驱动器可能正常。

如果有人愿意,所有这些都可以放在一个很好的脚本中以方便使用。

结论

这个问题似乎更像是OP喜欢的“促销”,而且似乎OP对实际测试驱动器的兴趣要小得多。 此外,问题本身比“驱动”问题更人性化。 在评论中,OP自己表示他们并不真正了解USB行为,但他们强烈指责“控制器”。 我将以3分的方式提出这个问题:

  • 清楚地弄清楚你要解决的问题是什么,以及“假驱动器”的定义是什么。
  • 尝试了解基本的Unix实用程序
  • 在购买商品时,就像它涉及任何forms的安全性一样,考虑寻找一个值得信赖的卖家并仅从他们那里购买驱动器。