Буде dd, якщо = / dev / zero of = / dev / sda видалить попередню таблицю розділів?


13

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

Або це навпаки, тобто

# fdisk /dev/sda g (для GPT)

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


6
Це щось не /dev/zeroвитирає, а ddвитирає, копіюючи його. Факти, що байти дорівнюють нулю і що нульові байти походять /dev/zeroзамість якогось іншого джерела нулів, є другорядними деталями.
chrylis -на страйк-

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 / zero?

Також так (за умови збереження змін).

(Однак, фразування в заголовку просто заплутане, /dev/zeroсаме по собі нічого не робить більше, ніж будь-яке звичайне зберігання.)


Побічна примітка: якщо висновок значення /bin/lsдостатньо короткий, операція запису може замінити лише кілька деяких байтів MBR, і найважливіша частина (початок і кінець секторів розділів) може залишатися недоторканою. Хоча для перевстановлення MBR (найчастіше, grub --install /dev/sda) все ще потрібно зробити систему завантажуваною знову.
петерх

8
@peterh Зауважте, що вони переспрямовують фактичний lsбінарний, а не вихідний з його запуску. Здається, що найменший бінарний пристрій ELF "Hello World" становить 98 байт (тобто менше, ніж MBR), але я вважаю, що можна припустити, що будь-який бінарний файл з фактичними функціями повинен бути більшим, ніж MBR (сумнозвісна невелика реалізація FreeBSD ls- 32784 байти довгі, навіть досить великі, щоб перезаписати частину GPT для запуску диска). ;)
п.

О так, ви можете також використовувати вихід ls. Перелік /usr/bin, ймовірно, буде досить довгим. Я збирався використовувати лише echoяк приклад, але IIRC вам потрібно майже 500 байтів, щоб перезаписати таблицю розділів MBR, тому вводити трохи втомлено. (якою б точна була цифра)
ilkkachu

1
Напевно, ви повинні використовувати bs і рахувати з dd для цього, інакше це буде тривати деякий час, вам потрібно лише нуль сектора. 512 байт для застарілих дисків. (див. @ n.st нижче) Насправді таблиця розділів знаходиться в кінці цього і достатньо мала для того, щоб зробити копію та нуль за допомогою шестигранного редактора перед копіюванням назад, щоб зберегти вміст завантаження. Для цього також є інструменти, для цього зазвичай прийнято ініціалізувати диски NAS.
mckenzm

1
Просто хотів додати, що у випадку накопичувачів GPT, Ви ОБОВ'ЯЗКОВО витираєте кінець диска. Сумісна реалізація GPT перевірить вторинну таблицю в кінці диска і також перепише першу частину (ігноруючи все, що у вас вже є). Дивіться: news.ycombinator.com/item?id=18541493
wbkang

10

Таблиця розділів зберігається біля початку 1 дискового пристрою (логічного 2 ).

Перезапис цієї області з чим-небудь (нулями від /dev/zeroбудь-яких інших даних) замінить таблицю розділів на хитрість, тому вже не буде очевидно, з чого починаються розділи на пристрої.
Ще можна сканувати весь диск і спробувати визначити "магічні байти", які позначають початок файлових систем.

І навпаки, якщо ви використовуєте fdisk(або будь-який інший інструмент розділення) для створення нової таблиці розділів, інструмент замінить перші кілька байтів диска для зберігання цієї нової таблиці.

На диску є лише один початок, тому все, що ви зробите останнім, там "приклеїться".

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

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


1
Майже правильно - таблиця розділів (стара, форма MBR) знаходиться в байтах 1BE - 1FD MBR. Перші кілька байтів містять IBL (початковий завантажувач).
RudiC

@RudiC Добрий момент, я це вже зараз сказала точніше.
пр.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.