Будет ли эта команда dd if=/dev/zero of=/dev/sda bs=1M
успешной, если команда dd изначально была в / dev / sda? Будет ли это завершено, потому что дд в памяти в то время?
10
Есть три вещи, которые могут произойти:
Пока что по теории. Теперь для практического теста.
Я установил свежую Ubuntu 12.10 на ВМ. (Рабочая станция VMware на win7-x64, с использованием параметров по умолчанию и виртуального диска 10 ГБ).
Команда dd завершилась успешно, и я вернулся к тому, что казалось рабочим запросом. Я мог бы вводить новые команды, хотя они не будут работать по понятным причинам.
Segmentation fault
и вы утверждаете, что он успешно завершен ...?Быстрый эксперимент на виртуальной машине с использованием Damn Small Linux показывает, что команда dd действительно завершается, как и ожидалось; Программа изначально загружается в память для запуска, и нет смысла загружать исполняемый файл снова и снова во время процесса. В конце концов, dd выйдет и сообщит «на устройстве не осталось места».
После этого операционная система, на первый взгляд, функционирует нормально с первого взгляда, но зависает после первой команды, которую она больше не может выполнять по понятным причинам, и перестает отвечать на запросы. Краткий осмотр содержимого жесткого диска показывает, что раздел действительно обнулен.
источник
Со
mmap
страницы о Linux:Исполняемые файлы отображаются в память ядром посредством внутреннего вызова
mmap
функции. ТребуетсяMAP_PRIVATE
сопоставление типов (посмотритеfs/binfmt_elf.c
на исходное дерево ядра).Таким образом, все сводится к поведению
mmap
: распространяются ли изменения в файле или базовом блочном устройстве, на которое ссылается этот файл, на страницы сопоставления, которые уже были разбиты на страницы и присутствуют.Эта страница основана на стандартах API, а не на поведении ядра, поэтому «не определено». Фактическое поведение заключается в том, что изменения в файле не распространяются обратно на уже существующие страницы. Конечно, если программа внезапно перейдет на страницу кода, которая не была выгружена, и удаление уже выполнено, то она получит страницу со всеми нулями.
Но, вполне вероятно, к тому времени
dd
, когда оно само себя стирает, оно разбивает все страницы кода, необходимые для продолжения цикла стирания. Существует вероятность того, что после завершения цикла он может попасть в какой-то код, который находится на отсутствующей странице: например, функция пересекает границу страницы, поэтому для достижения инструкции возврата необходимо извлечь страницу.Но эта страница также может быть кэширована из предыдущего
dd
вызова.источник
Да. Конечно, это также будет стоить вам большую часть вашей файловой системы, но, вероятно, вы уже знаете, что ...
источник
Я недавно сделал ошибку. Я намеревался записать 2 ГБ img на SD-карту, но сделал это по ошибке
dd if=rasberrypi.img of=/dev/sda
. Понял мою ошибку и отменил dd, но к тому времени было написано ~ 600 МБ (на диске с ~ 500 ГБ). Стол разделов был разрушен.Рабочий стол (с 10 ГБ памяти и неделями) продолжал работать в течение нескольких часов, если ничего не произошло. Успел получить недавно измененные важные файлы в Dropbox, которые обычно просматриваются в Chrome. На самом деле я мог запустить дд на SD-карту, как я изначально хотел, работал отлично.
Через пару часов моя файловая система перешла в режим только для чтения, и случайные программы начали умирать. Я был sshed во многие другие системы, я мог продолжать использовать эти сеансы, но создание нового сеанса выдало ошибку, что он не может найти программу ssh. В это время я мог переключать открытые вкладки в Chrome, но содержимое вкладок, похоже, «зависло». Если я обновлюсь, я получу белый экран навсегда. rsyslogd по какой-то причине брал 100% ресурсов процессора (1 ядро), возможно, он был озадачен тем, что не может записывать журналы на диск ... возможно.
У меня было видео 350 МБ, открытое (и приостановленное) в VLC, я все еще мог его воспроизвести и перейти к любой части видео. Вероятно, так как его недавняя загрузка.
Я мог нормально выключить систему, используя графический интерфейс, без ошибок.
Так что это не дает точного ответа на ваш вопрос, но говорит о том, что произойдет, если вы уничтожите начало диска ..
Большинство вещей на диске все еще можно восстановить, но я не буду беспокоиться, так как (надеюсь) все, о чем я забочусь, скопировано.
источник
Скорее всего, он не будет завершен, поскольку какой-то другой исполняющий компонент запросит отсутствующий файл и запаникует ядро. если вы действительно хотите обнулить диск, используйте live CD; иначе вы никогда не сможете гарантировать результат.
источник