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


28

我最近阅读了很多有关假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 /

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

Update3:说明

由于下面的怪异评论家,一些解释。

这是什么问题,为什么仅dd不能解决问题?

这是对

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

似乎有些人不了解问题。因此,尽管我认为这对我的问题很重要,但我尝试尽我所能详细解释。

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

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

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

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

但是为什么,什么时候可以自动化呢?为什么要工作?如下面我的答案所建议,f3实现了许多贡献者的大量想法(考虑到它是对h2testw的扩展),并且还实现了几种取舍不同的方法。开发人员想出了手头上不同的假驱动器(也称为假驱动器)的技巧。因此,尽管我理解了理论和问题(似乎是因为问题在德国技术媒体中得到了很好的解释,而在英语媒体中却未得到很好的解释),但我并没有假装理解所有内容,这就是我在上面提到它的原因。这只是我了解的理论,我更像是一个软件专家。但是作为一名信息学的学生,我对它的理解已经足够了解问题。

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

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

仅从信托供应商那里购买有帮助吗?

tl; dr:没有。

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

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

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

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

  2. 他是否有可能购买他不知道是假货的东西?完全,看看最近ryzen假货:https://www.pcgamer.com/beware-of-fake-ryzen-processors-selling-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上运行。是的,这就是我想要的,有用的答案,很抱歉。我不知道英语出版社还不了解这些问题,因此很幸运以后能找到类似的东西。这不是促销活动,但实际上您可以使用其中一个。


2
测试它没有多大意义,只需按照计算机上的可用信息进行,或者df --block-size=M。4GB的限制将表明这只是FAT32文件大小的限制,而不是驱动器的容量。您将永远无法获得所陈述的全部容量,这只是对它进行分类的平均值。
Sir_Scofferoff '16

6
计算机说的就是USB驱动器控制器告诉他的内容。假驱动器在说谎。如果它有4GB的容量,但声称有512GB,则我写的其余部分将被丢弃,或者旧的空间将被覆盖,具体取决于控制器。因此,确实有一点要进行测试。
verpfeilt '16

这是有趣的。我从未想到过仿造SSD的大小,但是我喜欢这样的想法,即他们如何写入数据并逐字节读取数据以检查一致性。我可以看到这可能是一个问题,这样的工具可能会很有用。

1
FakeFlashCheck也具有快速扫描功能。是否有任何OSALT?
neverMind9 '18

PS:我已经找到了f3probe。请参阅下面我的评论。
neverMind9 '18

Answers:


33

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

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

f3fix工具

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

sudo f3fix --last-sec=16477878 /dev/sdb

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

F3是处理伪造闪存驱动器的工具的集合。其中两个一起实现h2testw-Method:

f3write [--start-at=NUM] [--end-at=NUM] <PATH>
f3read  [--start-at=NUM] [--end-at=NUM] <PATH>

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

使用这种方法对这种大小的驱动器进行的测试耗时约三个小时,有时会给计算机带来沉重的磁盘负载,但这对我来说是最准确的。

在Ubuntu中安装

在终端上:

sudo apt install f3

这将给您带来:f3brewf3fixf3probef3readf3write与它们的手册页。

该工具是该f3软件包的一部分,至少在Ubuntu 15.10上可用。根据该网站,还有更多可用的工具。为了让他们看看这个网站。
该软件包附带了简短但有用的手册,尽管我认为他们错过了网站上有关f3read / write和f3probe区别的信息,这就是为什么答案更长的原因。


2
感谢您介绍这个出色的工具。只是想在安装使用添加apt-get将安装f3readfwrite f3probef3fix被认为是实验性的。如果要使用它们,则必须make experimental在安装它们的依赖项后从源使用构建它们sudo apt-get install libudev1 libudev-dev libparted0-dev。参见github.com/AltraMayor/f3#the-extra-applications-for-linux
Ahmed Essam

“ [f3probe]不再处于试验阶段,仅在Linux上可用。” github.com/AltraMayor/f3/issues/78#issuecomment-378599141
verpfeilt

4

为此,我编写了一个简单的工具,称为CapacityTester(屏幕截图),它具有GUI和CLI。

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

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

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

反馈表示赞赏。


如开发者网站上所述,有一个QT GUI和一个用于OSX的GUI(我没有尝试过)。我认为它是基于QT4的。为什么不也将F3用作后端?使用花在F3上的知识,它不会使您的工具更复杂,也可能使其功能/效率更高。
verpfeilt '16

-6

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

我正在编辑答案以正确解决一些问题,因为OP一直非常热情(而且我认为,除了他们自己的观点和反对意见之外,我反对大多数评论和回答,我认为这很可疑)。特别是,有很多人声称存在“假驱动器”,但是对于到底意味着什么并没有明确的定义。OP指出:

我可以在上面复制内容,再复制回来,看看文件是否还可以。我还可以使用哈希和其他东西实现自动化。但我希望有一个更准确的解决方案。

OP自己承认,他们“可以只是复制东西”,并验证数据的完整性,但是非常反对所有提出其他建议的评论和回答,OP一直将F3推为“真正的交易”。这个问题本身首先是关于驱动器的大小的,但是随后,无论出于何种原因,OP都会散列以“查看文件是否正常”,就好像有些神秘的驱动器声称拥有一个大小并允许您写入该大小,但是则数据已损坏。因此,我发现它非常可疑,因此将OP推广F3作为垃圾邮件问答。

当驱动器实际上是假驱动器时

在问题中,OP的明显定义是

“ ..驱动器声称具有很大的空间(通常携带得太远,例如128 GB),而实际上仅提供0.5到4 GB。”

换句话说,根据OP,控制器要求 X的数据量,但USB只能包含少80-90%的数据。

用户sudodus评论中建议(强调):“我发现几个USB笔式驱动器的尺寸略小于标称尺寸。我称它们为尺寸偏小。我认为这些假驱动器的尺寸“明显偏小”(通常为标称尺寸的一半)。或更少))。这个定义很棒,但是如果我们考虑,假驱动器的定义为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                        

请注意bs=11个字节的for块大小。该dd命令通常会报告写入的数量。

$ 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字节。

  • 找出低于驱动器要求的15%公差(115247656),或者使用支持浮点计算的实用程序,例如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。如果驱动器可以容纳这么多,则它是“真实的”。您也可以现在选择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实用程序
  • 在购买商品时,就像涉及任何形式的安全性一样,请考虑寻找可信赖的卖家并仅从他们那里购买驱动器。

1
谢谢,但是我不确定dd是否可以检测实际大小,因为控制器会伪造它具有足够的空间。我认为您必须写入一个文件(或更多文件),并检查是否可以完全恢复。猜猜为什么有专用的测试工具是有原因的,不幸的是,只有Windows。猜猜我将不得不使用VM。好吧,前段时间在德国的新闻中这相当大。(有关该主题的德国资源:heise.de/ct/ausgabe/…
verpfeilt

1
@verpfeilt好吧,我不会说德语,因此该文章必须由某人进行摘要或翻译。控制器将如何伪造它具有相同的空间量?dd报告已写入/提供给设备的数据量,但我看不到如何伪造。
Sergiy Kolodyazhnyy

2
好了,您可以编写所有内容,但这并不表示USB客户端会存储它。如果我理解正确,那么问题就直接出在USB体系结构上。您不能只在其中添加一些闪存,但是它需要一种能够满足协议要求的芯片。像存根(en.wikipedia.org/wiki/Method_stub)一样,这使您可以构建只写内存(尽管驱动器具有少量内存来存储小文件)。这就是为什么存在像h2testw这样的工具的原因。这是英文的内容:myce.com/news/…–
verpfeilt

1
@SergiyKolodyazhnyy,我发现几个USB笔式驱动器略小于标称尺寸。我称它们过小。我认为伪造的驱动器“尺寸过小”(通常是标称尺寸的一半或更小)。我猜写一些东西到驱动器,dd然后再检查md5sum应该检查多少可以写和正确读取。(我认为@verpfeilt答案中的特殊工具看上去更吸引人,但我尚未对其进行测试。我有许多USB笔式驱动器和存储卡,我还没有买过假的。)
sudodus

1
@SergiyKolodyazhnyy,我同意您的更新定义,“假冒存储设备是声称具有声称的大小但低于15%的容差(容差为声称的大小±15%)的设备”。-感谢您的回答的更新:-)
sudodus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.