Быстрый способ рандомизировать HD?

Быстрый способ рандомизировать HD?

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

Однако, когда я пытался использовать dd if=/dev/urandom of=/dev/sdaв прошлом, ETA выглядело как в порядке дней. Я видел что-то об использовании badblocksвместо urandom, но это, похоже, не очень помогло. Я просто хотел бы узнать, есть ли какие-либо способы, которые могли бы помочь мне ускорить это, например, варианты ddили что-то еще, что я мог упустить, или скорость является просто ограничением HD.

решение1

dd if=/dev/urandom of=/dev/sda, илипросто cat /dev/urandom >/dev/sda, не самый быстрый способ заполнить диск случайными данными. Linux — /dev/urandomне самый быстрый криптографический ГСЧ.Есть ли альтернатива /dev/urandom?есть некоторые предложения. В частности, OpenSSL содержит более быстрый криптографический PRNG:

openssl rand $(</proc/partitions awk '$4=="sda" {print $3*1024}') >/dev/sda

Обратите внимание, что в конечном итоге улучшение или его отсутствие зависит от того, какая часть является узким местом: процессор или диск.

Хорошей новостью является то, что заполнение диска случайными данными в основном бесполезно. Во-первых, чтобы развеять распространенный миф,затирание нулями так же эффективно на современном оборудовании. С технологией жестких дисков 1980-х годов перезапись жесткого диска нулями оставляла небольшой остаточный заряд, который можно было восстановить с помощью довольно дорогого оборудования; требовалось несколько проходов перезаписи случайными данными («очистка Гутмана»). Сегодня даже один проход перезаписи нулями оставляет данные, которые невозможно реально восстановить даже в лабораторных условиях.

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

решение2

Вы можете заставить OpenSSL шифровать данные /dev/zeroс помощью случайного пароля, что позволит очень быстро получить приличные псевдослучайные данные (если ваш процессор поддерживает ускорение).

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | dd of=/dev/sda

Вы можете передать это, pvчтобы получить прогресс/ETA. Команды, которые я запускаю прямо сейчас (в оболочке root), следующие:

DISK="sda"
DISKSIZE=$(</proc/partitions awk '$4=="'"$DISK"'" {print sprintf("%.0f",$3*1024)}')
apt-get install pv
openssl enc -aes-256-ctr -nosalt \
  -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" \
  < /dev/zero |
  pv --progress --eta --rate --bytes --size "$DISKSIZE" |
  dd of=/dev/"$DISK" bs=2M

Эту идею я позаимствовал уэтот ответ, после того как у меня возникла та же проблема, что и уиррациональный Джон, ВОЗпрокомментировална ответ Жиля выше. Это увеличило скорость стирания моего нового массива RAID с 11 МБ/с до примерно 300 МБ/с, сократив то, что должно было занять неделю, до 10 часов.

Я добавлю, что вы должны иметь возможность использовать вместо более сложного оператора выше, но есть ошибка, которая позволит создать только 16 МБ вывода. (Эта ошибка была зарегистрирована в январе 2016 г.)openssl rand #of_bytesopenssl enc ...ssl

И, согласно ответу наэтот вопроси продолжая предполагать, что узким местом является ЦП, можно еще больше увеличить скорость, запустив несколько параллельных opensslпроцессов на отдельных ядрах, объединив их с помощью FIFO.

решение3

OpenSSL, похоже, не сработал у меня. Я получил "неизвестные параметры" и другие проблемы с предоставленными решениями. Поэтому я в конечном итоге выбрал программу fio.

fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0

Что, похоже, занимает 3 часа, чтобы обработать 19 ТБ на 24 жестких дисках. То есть примерно 1800 МБ/с

smp-016:~ # fdisk -l /dev/md0
Disk /dev/md0: 18890.1 GB, 18890060464128 bytes

smp-016:~ # fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0
fill: (g=0): rw=write, bs=512M-512M/512M-512M/512M-512M, ioengine=libaio, iodepth=4
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [W(1)] [2.7% done] [0KB/1536MB/0KB /s] [0/3/0 iops] [eta 03h:01m:11s]

Надеюсь, это действительно случайные данные. На странице руководства написано fio "По умолчанию: заполнить буферы случайными данными".http://linux.die.net/man/1/fio

Я не делаю этого в целях безопасности/шифрования, просто пытаюсь убедиться, что мои последующие тесты чтения представляют собой реальные данные, а не просто нули. Эту же команду fio можно использовать для предварительной подготовки SSD/NVMe. Так как простое использование /dev/zero может привести к тому, что сжатие на уровне диска «обманет» объем фактически записанной информации. Хотя я бы добавил -loops=2к нему флаг, если это новый SSD для бенчмаркинга.

Если вы хотите, чтобы все было безопасно, вы можете использовать эту -randrepeat=bool опцию, так как она переключает «Задавать генератор случайных чисел предсказуемым образом, чтобы результаты были повторяемыми при разных запусках. По умолчанию: true.», но я все еще не уверен, насколько это будет безопасно.

Кроме того, некоторые жесткие диски корпоративного класса оснащены функцией SED (самошифрующиеся диски) и позволяют вам использовать ключ шифрования для мгновенного и безопасного стирания всех записанных данных.

Наконец, в прошлом я использовал DBAN (он же Darik's Boot and Nuke), который имеет возможность загрузки с CD и USB и «является проектом с открытым исходным кодом, размещенным на SourceForge. Программа предназначена для безопасного стирания жесткого диска до тех пор, пока данные на нем не будут окончательно удалены и не смогут быть восстановлены».

решение4

Завершая ответ Марко, вам нужен более быстрый генератор случайных чисел.

Вы используете простую программу, которая выводит случайные числа из хорошей библиотеки, например, boost::randomи используете ее в dd.

Если вы выберете усиление, вы можете использоватьэтотнапример, изменение experimentфункции в соответствии с вашими потребностями.

Связанный контент