Будет ли dd if = / dev / zero of = / dev / sda уничтожить существующую таблицу разделов?

13

Будет ли # dd if=/dev/zero of=/dev/sdaуничтожить существующую таблицу разделов?

Или наоборот?

# fdisk /dev/sda g (для ГПТ)

стереть нули, написанные /dev/zero?

tilikoom
источник
6
Это не /dev/zeroуничтожение чего-то, а ddстирание путем копирования. Факты, что байты оказываются нулевыми и что нулевые байты происходят из /dev/zeroкакого-либо другого источника нулей, являются второстепенными деталями.
Хрилис - на забастовку -
2
Если вы просто хотите стереть таблицу разделов, wipefs может быть более надежным.
труба

Ответы:

23

Будет ли dd if=/dev/zero of=/dev/sdaуничтожить существующую таблицу разделов?

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

Нечто подобное dd bs=512 count=50 if=/dev/zero of=/dev/sdaбыло бы достаточно, чтобы перезаписать первые 50 секторов, включая таблицу разделов MBR и основной GPT. Хотя, по крайней мере, согласно Википедии, GPT имеет вторичную копию таблицы разделов в конце диска, поэтому перезаписи только части в головке диска может быть недостаточно.

(Вы не должны использовать dd, хотя. head -c10000 /dev/zero > /dev/sdaИли cat /bin/ls > /dev/sdaбудет иметь тот же эффект.)

делает fdisk /dev/sda g(для GPT) уничтожить нули , написанные / Dev / нуль?

Также да (при условии сохранения изменений).

(Тем не менее, формулировка в заголовке просто сбивает с толку, /dev/zeroсама по себе ничего не делает больше, чем обычное хранилище.)

ilkkachu
источник
Примечание: если выходные данные /bin/lsдостаточно короткие, то операция записи может перезаписать только несколько байтов MBR, и наиболее важная часть (начальный и конечный секторы разделов) может остаться нетронутой. Хотя переустановка MBR (чаще всего grub --install /dev/sda) по-прежнему необходима для повторной загрузки системы.
Петер - Восстановить Монику
8
@peterh Обратите внимание, что они перенаправляют реальный lsдвоичный файл, а не результат его запуска. Кажется, что наименьший возможный двоичный файл ELF «Hello World» составляет 98 байт (так меньше, чем MBR), но я думаю, что можно с уверенностью предположить, что любой двоичный файл с реальными функциями должен быть больше MBR (общеизвестно, что реализация FreeBSD lsимеет 32784 длина байта, даже достаточно большая, чтобы перезаписать начальную часть GPT). ;)
n.st
Ах да, вы могли бы использовать вывод lsтоже. Список /usr/bin, вероятно, будет достаточно длинным. Я собирался использовать только echoв качестве примера, но IIRC вам нужно почти 500 байтов, чтобы перезаписать таблицу разделов MBR, поэтому набирать ее немного утомительно. (каким бы ни было точное число)
ilkkachu
1
Вы, вероятно, должны использовать bs и считать с dd для этого, иначе это будет продолжаться в течение некоторого времени, вам нужно только обнулить сектор. 512 байт для устаревших дисков. (см. @ n.st ниже). На самом деле таблица разделов находится в конце этого раздела и достаточно мала, чтобы вы могли сделать копию и обнулить ее с помощью шестнадцатеричного редактора, прежде чем копировать обратно, чтобы сохранить загрузочный контент. Для этого также есть инструменты, для инициализации диска NAS это обычно.
Маккензм
1
Просто хочу добавить, что в случае дисков GPT вы ДОЛЖНЫ также стереть конец диска. Совместимая реализация GPT проверит вторичную таблицу в конце диска и перепишет также первую часть (игнорируя все, что у вас там уже есть). См .: news.ycombinator.com/item?id=18541493
wbkang
10

Таблица разделов хранится в начале 1 (логического 2 ) дискового устройства.

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

И наоборот, если вы используете fdisk (или любой другой инструмент разделения) для создания новой таблицы разделов, инструмент перезапишет первые несколько байтов диска для сохранения этой новой таблицы.

На диске есть только одно начало, поэтому все, что вы делаете последним, будет «прилипать» к нему.

Однако обратите внимание, что некоторые форматы таблиц разделов (например, GPT) сохраняют резервные копии в разных местах (например, в конце диска для GPT), из которых можно восстановить некоторую информацию о разделах.

1: например, в первых 512 байтах для MBR или в первом и последнем 17408 байтах для GPT
2: диск может внутренне переназначить логические блоки на разные части физической среды, но это отображение невидимо (и не важно для) операционная система.

n.st
источник
1
Почти правильно - таблица разделов (старая, типа MBR) находится в байтах 1BE - 1FD MBR. Первые несколько байтов содержат IBL (начальный загрузчик).
RudiC
@RudiC Хорошо, я изложил это более точно сейчас.
n.st