Отформатируйте usb и подтвердите все нули

Я хочу отформатировать мой USB-накопитель и подтвердить, что он заполнен всеми нулями. Для форматирования это команда, которую я использую: sudo mkfs.vfat -I /dev/sdb

Как подтвердить, что устройство заполнено всеми нулями через командную строку?

1
задан 17 November 2015 в 18:00

3 ответа

Я тоже брошу свою шляпу в кольцо. Один из вариантов, который я люблю использовать, - scrub. Он находится в репозиториях, поэтому для его установки из типа терминального окна:

sudo apt-get install scrub

scrub поддерживает множество различных типов скрубберных паттернов

Available patterns are:
  nnsa          3-pass   NNSA NAP-14.1-C
  dod           3-pass   DoD 5220.22-M
  bsi           9-pass   BSI
  usarmy        3-pass   US Army AR380-19
  random        1-pass   One Random Pass
  random2       2-pass   Two Random Passes
  schneier      7-pass   Bruce Schneier Algorithm
  pfitzner7     7-pass   Roy Pfitzner 7-random-pass method
  pfitzner33   33-pass   Roy Pfitzner 33-random-pass method
  gutmann      35-pass   Gutmann
  fastold       4-pass   pre v1.7 scrub (skip random)
  old           5-pass   pre v1.7 scrub
  dirent        6-pass   dirent
  fillzero      1-pass   Quick Fill with 0x00
  fillff        1-pass   Quick Fill with 0xff
  custom        1-pass   custom="string" 16b max, use escapes \xnn, \nnn, \\

Чтобы использовать [ f7], чтобы заполнить диск всеми zeros, сначала убедитесь, что привод не установлен. Затем запустите следующую строку (-p означает шаблон для использования):

sudo scrub -p fillzero /dev/sdX

, тогда вы должны увидеть что-то вроде этого:

scrub: using Quick Fill with 0x00 patterns
scrub: please verify that device size below is correct!
scrub: scrubbing /dev/sdh 31260704768 bytes (~29GB)
scrub: 0x00    |.....                                           |

Некоторые шаблоны, используемые для очистки должен иметь пропуск verify, чтобы убедиться, что очистка прошла.

Если вы хотите, вы можете добавить hexdump (как в ответе Байтодера) или любой другой ответ до конца для проверка!

надеюсь это поможет!

11
ответ дан 23 May 2018 в 15:42

Используя cmp (спасибо муру за то, что указали глупость использования трубы):

sudo cmp /dev/zero /dev/sdX

Если вы получите такой вывод, как этот:

cmp: EOF on /dev/sdX

Привод заполнен нулем.

% dd if=/dev/zero of=foo iflag=fullblock bs=1M count=1 && sync
1+0 records in
1+0 records out
1048576 bytes (1,0 MB) copied, 0,00226603 s, 463 MB/s
% cmp /dev/zero foo
cmp: EOF on foo
5
ответ дан 23 May 2018 в 15:42

Мое предложение было бы hexdump. Он отображает содержимое любого файла или устройства в шестнадцатеричном формате в виде строк по 16 байт, но если две подпоследовательные строки равны, он их пропускает.

Ниже приведен пример вывода файла 512 МБ virtualdevice, который заполняется нулями только в текущем каталоге моего жесткого диска. Самый левый столбец - это смещение строки в шестнадцатеричной нотации, 8 следующих столбцов - это фактические данные, сгруппированные в два байта (4 шестнадцатеричных символа):

$ hexdump ./virtualdevice 
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
20000000

Производительность :

Я приложил усилия и сравнил свое решение с остальными реальным временем выполнения и временем процессора для описанного файла примера (512 МБ, содержащего только двоичные нули, расположенные на HDD).

Я измерил каждое решение командой time два раза со свежеочищенным дисковым кэшем и два раза с уже кэшированным файлом. Имена времени равны именам команды time, а дополнительная строка CPU - это просто сумма USER + SYS раз. Это может превышать время REAL, потому что я запускаю двухъядерную машину.

Для большинства людей интересными цифрами являются REAL (время от начала до конца, как если бы измерено с помощью секундомера .

Сводка:

Наилучшая производительность имеет [[dd]]

d8] Резюме: оптимизированная вторая версия (grep -zq . DEVICE), которая использует невероятно малое время обработки процессора. Доля 2-го уровня cmp /dev/zero DEVICE (оптимизированное решение kos) и мое собственное решение hexdump DEVICE. Между ними почти нет разницы. Для передачи данных с dd на cmp ([unftimized solution] dd if=/dev/zero | cmp - DEVICE - kos не очень эффективно, трубопровод, кажется, потребляет много времени обработки. Использование dd и grep показывает наихудшую производительность тестируемых команд.

kos

Хотя наиболее важной частью таких операций является время доступа ввода-вывода, существуют значительные различия в скорости обработки и эффективности тестируемых

Если вы очень нетерпеливы, используйте вторую версию ответа муру (grep -zq . DEVICE)! Но вы также можете использовать либо вторую версию kos 'ответ (cmp /dev/zero DEVICE) или мой собственный (hexdump device), так как они имеют почти хорошую производительность. Однако мой подход имеет то преимущество, что вы сразу видите содержимое файла и можете приблизиться к тому, сколько байтов отличается от нуля и где они находятся. Если у вас много переменных данных, выход будет большим, и он, вероятно, будет замедляться.

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

. Еще раз обратите внимание, что тест был выполнен в файле на моем диске, а не в фактическое устройство. Также файл содержит только нули.

muru

hexdump ./virtualdevice (мое собственное решение):
        |    Uncached:      |    Cached:
 Time:  |  Run 1:   Run 2:  |  Run 1:   Run 2:
--------+-------------------+------------------
   REAL |  7.689s   8.668s  |  1.868s   1.930s
   USER |  1.816s   1.720s  |  1.572s   1.696s
    SYS |  0.408s   0.504s  |  0.276s   0.220s
    CPU |  2.224s   2.224s  |  1.848s   1.916s
dd if=./virtualdevice | grep -zq . && echo non zero (неоптимизированное решение муру):
        |    Uncached:      |    Cached:
 Time:  |  Run 1:   Run 2:  |  Run 1:   Run 2:
--------+-------------------+------------------
   REAL |  9.434s  11.004s  |  8.802s   9.266s
   USER |  2.264s   2.364s  |  2.480s   2.528s
    SYS | 12.876s  12.972s  | 12.676s  13.300s
    CPU | 15.140s  15.336s  | 15.156s  15.828s
grep -zq . ./virtualdevice && echo non zero (оптимизированное решение муру):
        |    Uncached:      |    Cached:
 Time:  |  Run 1:   Run 2:  |  Run 1:   Run 2:
--------+-------------------+------------------
   REAL |  8.763s   6.485s  |  0.770s   0.833s
   USER |  0.644s   0.612s  |  0.528s   0.544s
    SYS |  0.440s   0.476s  |  0.236s   0.264s
    CPU |  1.084s   1.088s  |  0.764s   0.808s
dd if=/dev/zero | cmp - ./virtualdevice (решение kos не оптимизировано):
        |    Uncached:      |    Cached:
 Time:  |  Run 1:   Run 2:  |  Run 1:   Run 2:
--------+-------------------+------------------
   REAL |  7.678s   6.539s  |  3.151s   3.147s
   USER |  2.348s   2.228s  |  2.164s   2.324s
    SYS |  3.672s   3.852s  |  3.792s   3.516s
    CPU |  6.020s   6.080s  |  5.956s   5.840s
cmp /dev/zero ./virtualdevice (оптимизировано решение kos):
        |    Uncached:      |    Cached:
 Time:  |  Run 1:   Run 2:  |  Run 1:   Run 2:
--------+-------------------+------------------
   REAL |  6.340s   9.183s  |  1.660s   1.660s
   USER |  1.356s   1.384s  |  1.216s   1.288s
    SYS |  0.640s   0.596s  |  0.428s   0.360s
    CPU |  1.996s   1.980s  |  1.644s   1.648s

Используемые команды: [ ! d43]

Для всех четырех тестов я дважды выполнил следующую процедуру, чтобы уменьшить неточности, заменив <COMMAND> на точную команду из заголовка каждой таблицы.

hexdump ./virtualdevice (мой собственное решение):
        |    Uncached:      |    Cached:
 Time:  |  Run 1:   Run 2:  |  Run 1:   Run 2:
--------+-------------------+------------------
   REAL |  7.689s   8.668s  |  1.868s   1.930s
   USER |  1.816s   1.720s  |  1.572s   1.696s
    SYS |  0.408s   0.504s  |  0.276s   0.220s
    CPU |  2.224s   2.224s  |  1.848s   1.916s

hexdump ./virtualdevice (мое собственное решение):

time <COMMAND>
dd if=./virtualdevice | grep -zq . && echo non zero (неоптимизированное решение муру):
        |    Uncached:      |    Cached:
 Time:  |  Run 1:   Run 2:  |  Run 1:   Run 2:
--------+-------------------+------------------
   REAL |  9.434s  11.004s  |  8.802s   9.266s
   USER |  2.264s   2.364s  |  2.480s   2.528s
    SYS | 12.876s  12.972s  | 12.676s  13.300s
    CPU | 15.140s  15.336s  | 15.156s  15.828s
[ ! d47]
5
ответ дан 23 May 2018 в 15:42
  • 1
    Вы заинтересованы здесь. :) – Terrance 17 November 2015 в 19:18
  • 2
    [F1] vs без dd, вероятно, должно быть сделано и для grep. Кроме того, отправляйте код, который вы использовали для проверки этого. – muru 17 November 2015 в 20:26
  • 3
    Я отменяю новый тест! Мой тест показывает разные вещи! chat.stackexchange.com/transcript/message/25479599#25479599 . Я опубликую несколько графиков! – kos 17 November 2015 в 21:21
  • 4
    @kos Тестируйте, публикуйте и редактируйте все, что хотите, мои пальцы начинают болеть от ввода! ;-) – Byte Commander 17 November 2015 в 21:24

Другие вопросы по тегам:

Похожие вопросы: