Що робить `dd, якщо = / dev / zero of = / dev / sda`


19

Відредаговано: не запускайте це для перевірки, якщо ви не хочете знищити дані.

Може хтось допоможе мені зрозуміти, що я отримав?

  1. dd if=/dev/zero of=/dev/sda bs=4096 count=4096

    Питання: Чому саме 4096 для count?

  2. dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)

    З: Що саме це робить?


4
Де ви знайшли цей шкідливий код
Suici Doga

10
Це не шкідливий код.
Майкл Хемптон

12
@MichaelHampton: s / шкідливий / руйнівний / Хоча публікація руйнівного коду сама по собі не є шкідливою, розміщуючи її без чіткого попередження про те, що вона може знищити дані IS.
Ben Voigt

1
Найкраще думати про DD як про "Disk Destroyer", коли хтось із Інтернету каже вам виконати таку команду.
Боббі Сакамано

3
насправді DD означає опис даних
Suici Doga

Відповіді:


43

dd, якщо = / dev / zero of = / dev / sda bs = 4096 count = 4096 Q: чому 4096 особливо використовується для лічильника?

Це скасує перші 16 МіБ накопичувача. 16 MiB, ймовірно, більш ніж достатньо, щоб запустити будь-які структури "запуск диска", при цьому він досить малий, що це не займе багато часу.

dd, якщо = / dev / zero of = / dev / sda bs = 512 count = 4096 search = $ (expr blockdev --getsz / dev / sda - 4096)

З: Що саме це робить?

blockdev --getszотримує розмір блокового пристрою в "512 байтових секторах". Отже, ця команда виглядає так, що вона мала на меті зняти з нуля останні 2 МіБ диска.

На жаль, ця команда порушена синтаксисом. Я очікую, що команда спочатку була призначена

dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr `blockdev --getsz /dev/sda` - 4096)

і задні посилання загубилися десь по лінії, коли люди копіюють / вставляють їх між різними середовищами.

Старі таблиці розділів, метадані LVM, метадані raid тощо можуть спричинити проблеми при повторному використанні диска. Знищення розділів на початку та в кінці диска, як правило, уникне цих проблем, будучи набагато швидшим, ніж обнулення всього диска.


4
Дякую. Ця відповідь, здається, найбільше відповідає тому, що я шукав. Дві команди використовуються після delpart. Вони використовуються для протирання диска для повторного використання, як чисто.
JH

expr blockdev --getsz /dev/sda - 4096буде синтаксичною помилкою expr. Я думаю, що призначена команда була ...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)". Або ще краще:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Стефан Шазелас

1
Я здогадуюсь, що спочатку в команді були передумови, і вони їх з'їли в якийсь момент.
підключення

16

Це видалить перший 4096*4096=16MBі останній 512*4096=2MBваш жорсткий диск, які містять важливі структури, корисні для відновлення. Я припускаю, що цей код був розміщений зловмисно.

Я ніколи не стикався з ситуацією, коли явно вказував би countінше, ніж 1було корисно. Я вже стерта перший блок , якщо я хотів , щоб переконатися , що я не залишаючи ніяких слідів позаду MBR ...


8
Це не є надзвичайно шкідливим, у мене були деякі погані програми форматування, які відмовляються писати нову мітку, якщо поточна є пошкодженою, і тому довелося вручну знецінювати перші кілька таких байтів.
Шелваку

1
@shelvacu Я був би здивований, якби привід маніпулював таким чином sda. Більш імовірний sdbабо sdc. Але я можу помилятися , звичайно ...
йо »

7
Це не шкідливо. Він стирає GPT на початку диска та резервний GPT в кінці диска.
Майкл Хемптон

2
@shelvacu: Це руйнівно. Якщо деструктивні команди були розміщені без пояснення того, що це робить, це зловмисно. Якщо вони супроводжувались поясненням, чому ОП запитує про це тут?
Ben Voigt

2
То хто, в його ідеальному розумі, буде копіювати / вставляти коди, знайдені де-небудь, не знаючи його призначення? Не злісно, ​​тому що я не потрушу жодного дивного пристрою, який я можу знайти в метро.
Магно С

4

Ці команди замінять ваш пристрій sda з нулями - перший зробить перший 16 МБ (розмір блоку 4096 та кількість 4096 блоків), а другий замінить останні 2 МБ (розмір блоку 512 з 4096 блоків) нулями. (технічно це не стирається, і це стосується мого першого пункту нижче.)

(про цю частину вже згадувалося в інших відповідях, включаючи її тут для повноти)

Ще одна річ, яку варто згадати, - це те, що розмір блоку має наслідки, але вони, як правило, спостерігаються лише при операціях з великим обсягом. Найефективніший (найшвидший) спосіб виконання команди - якщо розмір блоку команди відповідає розміру доступу пристрою, інакше витрачається час.

Якщо вам цікаво, ви можете спробувати створити файл із мільйонними шматками з 1 блоком та файл із 1 мільйонними блоками та побачити різницю:

[user@host tmp]$ time dd if=/dev/zero of=/tmp/test1 bs=1 count=1000000
1000000+0 records in
1000000+0 records out
1000000 bytes (1.0 MB) copied, 2.44439 s, 409 kB/s

real    0m2.447s
user    0m0.177s
sys     0m2.269s
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test2 bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.00155357 s, 644 MB/s

real    0m0.003s
user    0m0.001s
sys     0m0.002s
[user@host tmp]$ ls -al test*
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test1
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test2

Як бачите, розмір блоків має величезний вплив на ефективність. Це, можливо, бічна панель до ОП, але я вважаю, що це все ще актуально.

TL; DR: Не виконуйте довільний код, який ви знайдете в мережі, або той, кому ви не довіряєте. Це зіпсує вам день.


7
+1 для Don't execute arbitrary code you find on the netлінії
Сергій Колодяжний

7
"Зауважте, що цей процес надзвичайно виснажливий та / або дорогий і вимагає надзвичайно специфічного обладнання." Припиніть розповсюджувати цю дезінформацію. Останній раз, коли це було навіть теоретично можливо, було десятиліття тому за технологією, яка вже зараз поколіннями застаріла. Ніхто ще не демонстрував подібного відновлення на сучасних накопичувачах, навіть у відповідь на публічні виклики з призовими коштами, наприклад, hostjury.com/blog/view/195/…
Andrew Medico

Я вилучив цей розділ - здогадуйтесь, пройшов час, коли я вперше почув про це. Я скажу, однак, що "теоретично" було оперативним словом, але я відступаю.
Тім С.

2

Інші пояснили, що вони роблять, тому я пропускаю це.

Сенс у ddвідокремленні bsта countаргументі полягає в тому, щоб bsконтролювати кількість написаних за один раз . Визначення дійсно великих значень для bsбуде вимагати дійсно великого буфера в програмі, і введення значень, менших за розмір блоку пристрою, буде повільним, оскільки ядро ​​повинно будувати весь блок для запису на пристрій (у таких випадках, як це може ймовірно, буфер запису до тих пір, поки не буде повного блоку, в інших випадках, можливо, доведеться прочитати те, що вже є на диску). Оскільки обидві команди використовують різні значення для bs, це приводить мене до думки, що ви могли їх знайти на двох різних сайтах. На жорстких дисках розмір блоку - 512 байт, що відповідаєbs=512останньої команди, але деякі (6-8 я думаю) років тому вони почали робити диски розміром блоку 4096 байт, роблячи bs=4096кращий вибір для сучасних дисків.


1
Солодке місце для bsнабагато вище, ніж це . Одна команда SATA може читати або записувати декілька секторів, тому ядро ​​об'єднує введення-виведення, перш ніж надсилати їх. Куди bs=64kб то bs=1024kне було, розмір кешу L3 часто становить 4-8MiB. Я часто використовую bs=128k, що становить половину розміру кешу L2 на сучасних процесорах Intel. ( ddвключає дві операції memcpy: у read(2)джерелі (навіть якщо це / dev / zero) та write(2). IIRC) sddбула можливість записувати нулі, що дозволить заощадити трохи часу процесора. Дійсно, лише якщо місце призначення є чимось крім диска).
Пітер Кордес

Щоб побачити, що відбувається злиття запиту вводу / виводу, подивіться на вихід iostat -x 4або щось таке, і відзначте стовпці rrqm / s (запити читання, об'єднані за секунду) та wrqm / s.
Пітер Кордес

1

ПОПЕРЕДЖЕННЯ: dd if=/dev/zero of=/dev/ використовується для очищення накопичувача або пристрою перед криміналістичним копіюванням даних. Перед копіюванням інформації з системи, що проводиться судово-медичним розслідуванням, для запобігання перехресному забрудненню слід завжди санітувати привід чи пристрій. Тому це не погана команда, кінцевий користувач повинен зрозуміти, для чого вона використовується, або вони знищать свої дані. Якщо ви цього хочете, щоб перевірити операцію запису нуля dd if=/dev/sda | hexdump -C | head.

Джерело: Практичний посібник з комп'ютерних криміналістичних розслідувань доктора Даррена Хейса


1

Я використовую dd if=/dev/zero of=/dev/sdX oflag=syncдля перевірки якості вставленого USB-накопичувача або картки MicroSD перед тим, як я його фактично використовую з gparted, fdisk або dd із зображенням диска. Я думаю, що це розумна ідея, особливо з MicroSD-медіа, які мають низьку якість історії.

Звичайно, будьте обережні з програмою = sdX, тому що немає прощення при випадковому стиранні диска. Перевірте, що X = літера диска передбачуваної цілі.

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