Проверьте реальный размер флэш-накопителя USB

28

Недавно я много читал о поддельных картах MicroSD и флэш-накопителях USB, которые утверждают, что имеют много места (даже если вы спрашиваете компьютер), но физически предлагают намного меньше. Я недавно купил USB-накопитель SanDisk (заявлено 128 ГБ) и хочу проверить его размер. Это не куплено через ebay или что-то, но я действительно хочу проверить реальный размер прежде, чем использовать это продуктивно.

Я мог бы просто скопировать материал на него, скопировать обратно и посмотреть, все ли в порядке. Я мог бы также автоматизировать это с помощью хэшей и прочего. Но я надеялся, что есть более точное решение. Я читал, что для Windows H2testw делает свое дело. Есть ли простой способ проверить это на Ubuntu / Linux? Может быть, специализированный, хорошо работающий инструмент?

Обновление: просто чтобы прояснить, идея состоит в том, чтобы проверить, что размер, который система Linux сообщает контроллеру, является правильным ( поэтому никакие данные не будут потеряны ). Я не хочу видеть, получу ли я 128 ГБ вместо 127,3 ГБ. Я хочу проверить, будут ли все записанные мной данные снова доступны для чтения. К сожалению, я могу найти только немного информации об этом на английских технических сайтах. Хотя есть хорошие немецкие источники. Я на самом деле ищу такое приложение, но для Ubuntu / Linux: https://www.raymond.cc/blog/test-and-detect-fake-or-counterfeit-usb-flash-drives-bought-from -ebay-с-H2testw /

Update2: я попытался собрать некоторые источники на английском языке. Я не прочитал все их подробно, из-за нехватки времени.

Обновление 3: объяснения

Из-за странных критиков ниже, некоторые объяснения.

В чем проблема и почему один дд не решает ее?

Это реакция на

«Четко определите, какую проблему вы пытаетесь решить, и каково определение« фальшивого драйва »».

Кажется, что некоторые люди не понимают проблему. Поэтому я попытаюсь объяснить это как можно более кратко, хотя я думаю, что это во многом зависит от моего вопроса.

Емкость USB-устройств, которые предоставляет вам ваша операционная система или инструменты Unix, может быть неправильной. Это фатально, так как ваша ОС регулирует объем данных, которые вы можете отправить. Если вы отправите больше данных, чем сможете, вы потеряете данные. Это проблема. Итак, почему это может произойти?

Вам не нужно хорошо знать USB-протокол, чтобы понять проблему. Последовательные интерфейсы имеют общее свойство: клиентскому устройству (USB-накопителю) необходимо сообщать свою собственную емкость через этот последовательный интерфейс. Это означает, что клиентскому устройству нужен собственный контроллер с некоторыми знаниями о назначении устройств и, в данном случае, его емкости. Он также решает, что сделано, когда получает команду на сохранение чего-либо. Если контроллер запрограммирован таким образом, он может просто игнорировать команду или что-то перезаписать данными.

Что это значит? Что бы ни говорили ваши инструменты Unix о емкости диска: это то, о чем инструменты спрашивали у диска, и больше ничего. Вот для чего был изобретен h2testw: он проверяет реальный размер с помощью метода, описанного ниже, и сравнивает его с тем, что говорит накопитель. Если это не то же самое, у вас может быть потеря данных, потому что все ваши общие операции по хранению данных зависят от информации вашей операционной системы, которая просто запрашивает контроллер. Почему просто спросить? Тестирование требует времени и перезаписывает все данные на диске. Поэтому естественно, что операционная система должна полагаться на эту информацию.

Чтобы проверить реальную емкость, такую ​​как h2testw, вы действительно можете использовать ddдля записи данных на диск, чтения его еще раз и проверки того , что вы написали то же самое. Совершенно законно. Характер аппаратного обеспечения и привода делают его более сложным. Рассмотрим кеши для записи, например. Вы должны убедиться, что вы не читаете из кэша. Это только один пример того, почему это не так просто, как кажется. Также подумайте, что просто запись нулей означает низкую энтропию информации, которую можно восстановить при чтении. Это просто не так просто в деталях. Вы все еще можете сделать это вручную, конечно.

Но почему, когда вы можете автоматизировать вещи? Зачем работать? f3, как предложено в моем ответе ниже, реализует тонны мыслей многих участников (считают, что это своего рода расширенный h2testw), а также реализует несколько методов с различными компромиссами. Разработчик выяснил хитрости различных фальшивых дисков (подделок), которые они имели под рукой . Поэтому, хотя я понимаю теорию и проблему (по-видимому, поскольку проблемы хорошо объясняются в немецких технических СМИ, но не в англоязычных СМИ), я не претендую на то, что понимаю все, поэтому я упомянул об этом выше. Это просто теория, которую я понимаю, и я скорее программист. Но как студент, изучающий информатику, я понимаю это достаточно хорошо, чтобы увидеть проблему.

«Попытайтесь понять основные утилиты Unix»

На самом деле я уже ответил на этот вопрос, но чтобы прояснить: инструменты Unix просто используют USB-протокол (конечно, только для USB-устройств) для сбора информации. Нет смысла делать больше, чем это.

Помогает ли покупать только у поставщиков трестов?

tl; dr: это не так.

«Когда речь заходит о покупке товаров, как и о любой форме безопасности, подумайте о том, чтобы найти надежного продавца и покупать диски только у них».

Безопасность (и безопасность) не о доверии! Речь идет о проверке и валидации! Извините, но это так неправильно во многих отношениях.

Предположим, вы покупаете через доверенного продавца. Несколько вопросов:

  1. Проверил ли поставщик оборудование, чтобы убедиться в отсутствии потери данных? Узнает ли он, когда он покупает поддельные диски и продает их? Не обязательно.

  2. Возможно ли, что он покупает вещи, которые он не знает, подделка? В общем, посмотрите на недавние подделки рызенов: https://www.pcgamer.com/beware-of-fake-ryzen-processors-selling-on-amazon/ , https://www.heise.de/newsticker/meldung/ Директ-фон-Амазонка-Faelschungen-фон-AMDs-Ryzen-Prozessoren-им-Umlauf-3772757.html

  3. Если я потеряю свою презентацию в дисководе и испорчу презентацию, вернется ли мой проверенный поставщик вовремя и спасет меня? Это, вероятно, заменит двигатель, так как последний путешествующий во времени DeLorean был разрушен в 1885 году.

Другие вещи

«Этот вопрос действительно больше похож на« промо »в том, что нравится OP, и кажется, что OP гораздо меньше заинтересован в реальном тестировании накопителей».

Это смешно. Я искал специально подобный инструмент для h2testw, который также работает на Linux. И да, это то, что я "хотел бы", полезный ответ, извините. Я понятия не имел, что англоязычная пресса не слишком осведомлена о таких проблемах, и мне посчастливилось найти что-то подобное позже. Это не промо, но на самом деле вы можете использовать его.

verpfeilt
источник
2
Там нет особого смысла тестировать его, пойти на то, что компьютер говорит, что доступен, или df --block-size=M. Ограничение в 4 ГБ предполагает, что это просто ограничение размера файла FAT32, а не емкость диска. Вы никогда не получите полную заявленную мощность, это просто среднее значение для классификации.
Sir_Scofferoff
6
То, что компьютер говорит, доступно, это то, что он получает от контроллера USB-накопителя. Поддельные диски врут. Если он имеет емкость 4 ГБ, но утверждает, что имеет 512 ГБ, остальное, что я пишу, будет выброшено, или старое пространство будет перезаписано, в зависимости от контроллера. Так что, действительно, есть смысл проверить это.
verpfeilt
это интересно. мне никогда даже не приходила в голову мысль о подделке размера SSD, но мне нравится идея о том, как они записывают данные и читают их побайтно, чтобы проверить согласованность. Я вижу, как это может быть проблемой, и такой инструмент может быть полезным.
1
FakeFlashCheck также имеет быстрое сканирование. Есть ли для этого ОСАЛТ?
neverMind9
PS: я уже нашел f3probe. Смотрите мой комментарий ниже.
neverMind9

Ответы:

34

F3 - Борьба с мошенничеством

Я нашел только одну альтернативу, но я думаю, что это даже лучше, чем оригинальный h2testwинструмент для MS Windows. К счастью, его действительно легко использовать даже из командной строки. Тем не менее, есть доступные графические интерфейсы. Также на веб-сайте инструментов много информации о реализации и проблемах с поддельными дисками.

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метод:

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

f3writeзапросит требуемый размер устройства и заполнит его сгенерированными файлами размером 1 ГБ каждый. f3readпрочитает все эти файлы и увидит, что они завершены и не сломаны. В качестве примера команды, которые я использовал для проверки моего жесткого диска ~ 128 ГБ:

$ 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

Это принесет вам: f3brew, f3fix, f3probe, f3read, f3writeс их человеком страниц.

Эти инструменты являются частью f3пакета, который по крайней мере доступен в Ubuntu 15.10. Согласно веб-сайту, есть еще несколько инструментов, которые доступны. Чтобы получить их посмотрите на сайт.
Пакет поставляется с короткими, но полезными справочными страницами, хотя я думаю, что они упускают некоторую информацию с веб-сайта о разнице, например, f3read / write и f3probe, поэтому этот ответ стал немного длиннее.

verpfeilt
источник
2
Спасибо за представление этого замечательного инструмента. Сразу хочу добавить, что установка с использованием apt-getбудет установлена f3readи fwrite только как f3probeи f3fixсчитается экспериментальной. Если вы хотите использовать их, вам нужно будет собрать их из исходного кода make experimentalпосле установки их зависимостей sudo apt-get install libudev1 libudev-dev libparted0-dev. См. Github.com/AltraMayor/f3#the-extra-applications-for-linux
Ахмед Эссам
1
«[f3probe] больше не экспериментален, а доступен только в Linux». github.com/AltraMayor/f3/issues/78#issuecomment-378599141
verpfeilt
4

Я написал простой инструмент для этого, он называется CapacityTester (скриншот) и имеет графический интерфейс и CLI.

Для загрузки доступен предварительно скомпилированный двоичный файл для Debian 7 , который, скорее всего, будет работать из коробки в современной системе Ubuntu.

Я написал это для личного пользования, потому что не смог найти графический инструмент для этой цели. Вам просто нужно сначала смонтировать пустой USB-накопитель, выбрать его и начать тестирование. Это очень тупой инструмент, потому что все, что он делает, - это заполняет диск файлами, а затем проверяет правильность данных на диске. Это прервет тест на первую ошибку (запись или чтение / проверка). Он сообщит о смещении фрагмента, который не может быть успешно записан или проверен, но это логическое смещение, поэтому эта информация может оказаться бесполезной, поскольку она зависит от файловой системы, в которой находятся файлы на диске. Однако когда накопитель заполнен данными и все можно прочитать и проверить, можно с уверенностью предположить, что заявленная емкость накопителя правильная. Как примечание стороны,

Опять же, это очень просто, так как работает только с файлами поверх существующей файловой системы. Таким образом, есть некоторые KB (+ 1M буфер), которые не могут быть протестированы. И это очень медленно, потому что он действительно заполняет всю файловую систему. F3, конечно, намного сложнее и быстрее, но не имеет графического интерфейса. Единственная причина, по которой существует CapacityTester, состоит в том, что он имеет графический интерфейс пользователя, поэтому его могут использовать пользователи, не знакомые с командной строкой или просто предпочитающие графический интерфейс.

Обратная связь приветствуется.

c0xc
источник
Как указано на сайте разработчиков, есть графический интерфейс QT и графический интерфейс для OSX (я их не пробовал). Я думаю, что он основан на QT4, хотя. Почему бы не использовать F3 в качестве бэкэнда тоже? Это не сделает ваш инструмент более сложным и, вероятно, сделает его более функциональным / эффективным, используя знания, которые были потрачены на F3.
verpfeilt
-6

Обращаясь к поведению ОП и «фальшивому драйву»

Я редактирую ответ, чтобы должным образом учесть несколько моментов, поскольку ОП был очень яростным (и, на мой взгляд, против большинства комментариев и ответов, кроме их собственных, что я нахожу подозрительным). В частности, многие утверждают, что существует «фальшивый драйв», но нет четкого определения того, что на земле это означает. ОП заявил:

Я мог бы просто скопировать материал на него, скопировать обратно и посмотреть, все ли в порядке. Я мог бы также автоматизировать это с помощью хэшей и прочего. Но я надеялся, что есть более точное решение.

Сами OP признали, что они «могут просто копировать материал» и проверять целостность данных, но были очень против всех других комментариев и ответов, которые предлагают что-то еще, а OP продолжал выдвигать F3 как «реальную сделку». Сам вопрос вначале касался размера диска, но затем OP по какой-либо причине упомянул хэши, чтобы «посмотреть, в порядке ли файлы», как будто существуют загадочные диски, которые имеют один размер и позволяют записать этот размер, но тогда данные повреждены. Поэтому я нахожу это очень подозрительным и считаю, что OP, продвигающий F3, является спам-вопросом и ответом.

Когда диск на самом деле поддельный диск

В этом вопросе очевидное определение ОП

«… приводы, которые утверждают, что имеют много места (часто слишком далеко, например, 128 ГБ), но физически предлагают всего 0,5–4 ГБ».

Другими словами, согласно OP, контроллер запрашивает X данных, но USB может содержать только примерно 80-90% меньше, чем заявлено.

Пользователь sudodus предложил в комментариях (выделение добавлено): «Я обнаружил, что несколько USB-накопителей немного меньше номинального размера. Я называю их недопустимыми . Я думаю, что поддельные накопители « существенно меньше » (обычно половина номинального размера). или меньше ) Это определение прекрасно, однако, если мы примем это, поддельный диск определен на 50%. Диск, который требует 64 ГБ, но может вместить только 32 ГБ, технически теряет половину своей стоимости для владельца, и владелец может только положить половину того, что он намеревался на диск.

Я предлагаю более простое определение: фальшивое запоминающее устройство - это то, которое, как утверждается, имеет, Claimed Sizeно не превышает 15% (и допуск равен Claimed Size ± 15 %).

Это ± 15 %очень разумно. Также учтите, что пользователи обычно путаются между организациями Unix, IEEE и IEC, использующими двоичный префикс вместо мощности 10 префиксов для размера хранилища данных. Разница составляет 20% на уровне префиксов yotta, однако USB-накопителей пока нет, поэтому в течение следующих 20 лет разумно будет использовать 15%. (См. Вопрос Askubuntu «Значение« i »в« MiB » и двоичный префикс )

Тестирование диска

По сути, пользователю не нужны никакие специальные инструменты, кроме того, что уже поставляется с Ubuntu и большинством POSIX-совместимых систем Unix. Давайте подчеркнем и перефразируем определение снова:

Если мы не можем записать объем данных на диск и то, что мы записываем, находится в пределах 15% допуска, то диск в порядке

Простой способ сделать это - ddпросто перезаписать устройство нулями (и, конечно, не забудьте сохранить ваши файлы, прежде чем сделать это).

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

Обратите внимание на bs=1размер блока 1 байт. Команда 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. Если накопитель может выдержать так много, он «настоящий». Вы также можете взять md5sumили sha1sumиз ./mytestfile.randomи сравнить с /dev/sda1сейчас. Еще лучше было бы записать mytestfile.randomточку монтирования файла, таким образом, сохраняя файловую систему на диске и не изменяя разбиение диска, другими словами

    dd if=./mytestfile.random of=/mountpoint/for/usb/drive/testfile.random
    
  • Для целостности то, что вы можете просто сделать любую проверку hashsum, такие как md5sum, sha1sum, sha256sumили другие. Например

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

    Ключевым моментом здесь является то, что, если количество записанных данных находится в пределах допуска и выдает правильную контрольную сумму до и после записи - диск, вероятно, в порядке.

Все это может быть помещено в хороший сценарий для удобства, если вы того пожелаете.

Вывод

Этот вопрос действительно больше напоминает «промо» в том, что нравится OP, и кажется, что OP гораздо меньше заинтересован в собственном тестировании дисков. Кроме того, проблема сама по себе более человечная, чем проблема «драйва». В комментариях OP сами заявили, что они на самом деле не понимают поведение USB, но неистово обвиняют «контроллер». Я оставлю этот вопрос с 3 баллами:

  • Четко определите, какую проблему вы пытаетесь решить, и каково определение «фальшивого драйва».
  • Попытайтесь понять основные утилиты Unix
  • Когда речь заходит о покупке товаров, как и о любой форме безопасности, подумайте о том, чтобы найти надежного продавца и покупать диски только у них.
Сергей Колодяжный
источник
1
Спасибо, но я не уверен, что dd определит реальный размер, потому что контроллер подделает, что на нем столько же места. Я думаю, что вы должны написать в файл (или несколько файлов) и проверить, можете ли вы вернуть его полностью. Думаю, есть причина, по которой существуют специальные инструменты для тестирования, к сожалению, это только окна. Думаю, мне придется использовать виртуальную машину. Ну, это было довольно много в новостях в Германии некоторое время назад. (Немецкий источник по теме: heise.de/ct/ausgabe/… )
verpfeilt
1
@verpfeilt Ну, я не говорю по-немецки, поэтому статья должна быть обобщена или переведена кем-то. Как бы контроллер подделал, что у него столько же места? ddсообщает о количестве данных, которые оно записало / передало устройству, я не понимаю, как это можно подделать.
Сергей Колодяжный
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