У меня жесткий диск заполнен нулями.
Как проверить, что все биты на жестком диске являются нулями, используя bash?
hard-drive
bash
ubuntu-12.10
gkfvbnhjh2
источник
источник
Ответы:
od
заменит прогоны одной и той же вещи*
, так что вы можете легко использовать ее для поиска ненулевых байтов:источник
| head
к концу этого, чтобы, если окажется, что диск не обнулен, он остановится после того, как выдаст достаточно информации, чтобы показать факт, вместо того, чтобы вывести весь диск на экран.Я написал короткую C ++ программу для этого, источник доступен здесь .
Чтобы построить это:
Чтобы запустить это:
Он выведет позицию и значение любых ненулевых байтов. Вы можете перенаправить этот вывод в файл
>
, например:Возможно, вы захотите попробовать изменить
BUFFER_SIZE
для повышения эффективности. Я не уверен, какое оптимальное значение может быть. Обратите внимание, что это также влияет на частоту выполнения печати, что несколько влияет на скорость (печать выводится на консоль медленно ). Добавить,2>/dev/null
чтобы избавиться от прогресса вывода.Я знаю, что это не использует стандартный Bash, ни даже встроенные, но это не должно требовать каких-либо дополнительных привилегий. Решение @Hennes еще быстрее (я ничего не оптимизировал - это наивное решение); тем не менее, эта небольшая программа может дать вам лучшее представление о том, сколько байтов пропал ваш очиститель и в каком месте. Если вы отключите вывод прогресса, он все равно будет работать быстрее, чем большинство потребительских жестких дисков (> 150 МБ / с), так что это не большая проблема.
Более быстрая версия с менее подробным выводом доступна здесь . Тем не менее, это все еще немного медленнее, чем решение @Hennes. Этот, однако, завершит работу с первым ненулевым символом, с которым он сталкивается, поэтому он потенциально намного быстрее, если ненулевой символ находится в начале потока.
Добавление источника в пост, чтобы держать ответ лучше самодостаточным:
источник
iszero /dev/sda
вместо того, чтобы требовать, чтобы он был передан с чем-то вродеiszero < /dev/sda
?int main(int argc, char *argv[])
а затемFILE* file = fopen(argv[1], "r");
. Если все сделано правильно, это будет включать проверку, действительно ли аргумент существует, проверку на успешное открытие (выполните дополнительнуюferror
проверку послеfopen
) и т. Д., Но слишком много проблем для одноразовой программы.gcc
не обязательно доступен во всех дистрибутивах Linux без удаления дополнительных пакетов. С другой стороны, numpy также не является частью стандартных пакетов Python ...-O3
и-march=native
вы можете увидеть некоторые ускорения; это должно гарантировать, что GCC включает автоматическую векторизацию и использует лучшие из доступных для вашего текущего процессора (AVX, SSE2 / SSE3 и т. д.). Наряду с этим вы можете играть с размером буфера; Различные размеры буфера могут быть более оптимальными для векторизованных циклов (я бы играл с 1 МБ +, текущий 1 КБ).@Bob
) в чате: chat.stackexchange.com/rooms/118/root-accessРасширяя ответ Гордона, он
pv
дает представление о том, как далеко продвинулся процесс:источник
Это кажется уродливым неэффективным решением, но если вам нужно проверить только один раз:
dd if=/dev/sdX | tr --squeeze-repeats "\000" "T"
Использование dd для чтения с диска
sdX
. (замените X на диск, с которого вы хотите прочитать),затем переводите все непечатаемые нулевые байты в то, что мы можем обработать.
Затем мы либо подсчитываем байты, которые можем обработать, и проверяем, является ли это правильное число (используйте
wc -c
для этого), либо пропускаем подсчет и используем-s
или,--squeeze-repeats
чтобы сжать все множественные вхождения в один символ.Таким образом
dd if=/dev/sdX | tr --squeeze-repeats "\000" "T"
следует печатать только один T.Если вы хотите делать это регулярно, то вы хотите что-то более эффективное.
Если вы хотите сделать это только один раз, тогда этот кладж может проверить, работает ли ваш обычный стеклоочиститель и можете ли вы доверять ему.
источник
Только для проверки вы увидите все блоки, которые не соответствуют перечисленным
Или используйте badblocks, чтобы написать их, а также проверить:
Разрушающий тест по умолчанию - мое безопасное стирание выбора
Если кто-нибудь может извлечь что-либо после заполнения диска чередующимися 0 и 1, то их дополнение, затем все 1, затем все 0, с каждым проверенным проходом, сработавшим, удачи им!
Хорошая проверка перед развертыванием на новых дисках тоже
для других вариантов
Не сказать, что это быстро, но это работает ...
источник
Лучшее обоих миров. Эта команда пропустит плохие сектора:
Используйте,
kill -USR1 <pid of dd>
чтобы увидеть прогресс.источник
Некоторое время назад мне было любопытно
AIO
. Результатом стала тестовая программа, которая проверяет сектора (блоки по 512 байт)NUL
. Вы можете видеть это как вариант детектора разреженных областей файла . Я думаю, что источник говорит все это.NUL
выводится весь файл / диск выглядит так0000000000-eof
. Обратите внимание, что в программе есть хитрость, функцияfin()
не вызывается в строке 107, чтобы дать показанный вывод.AIO
не так просто, как другие способы,AIO
, возможно, это самый быстрый способ сохранить занятость чтения диска , потому чтоNUL
сравнение выполняется во время чтения следующего блока данных. (Мы могли бы выжать еще несколько миллисекунд, делая наложениеAIO
, но я действительно не думаю, что это стоит усилия.)true
если файл читабелен и все работает. Не возвращается,false
если файл не являетсяNUL
.NUL
она все еще работает, поскольку буферы памяти уже содержатNUL
. Если кто-то считает, что это нужно исправить, в строке 95memcmp(nullblock, buf+off, SECTOR)
можно прочитатьmemcmp(nullblock, buf+off, len-off<SECTOR : len-off : SECTOR)
. Но единственное отличие состоит в том, что «отчет об окончании» может быть немного случайным (не для файла, который полностьюNUL
).memcmp()
также исправляют другую проблему на платформах, которые неNUL
alloc()
редактируют память, потому что код этого не делает. Но это может быть видно только для файловchecknul
размером менее 4 МБ, но, вероятно, это просто излишество для такой маленькой задачи;)НТН
источник
Хотел опубликовать это умное решение по аналогичному, но более раннему вопросу, опубликованному пользователем, который давно не вошел в систему:
источник