Как сбросить жесткий диск (удалить Mbr и удалить разделы) из командной строки с помощью скрипта без перезагрузки?


8

Для запуска из чистого состояния мне нужно сбросить жесткий диск до пустого состояния из командной строки.

Речь идет не о запуске утилиты стирания, данные не должны быть перезаписаны.

Этот вопрос очень похож на удаление всех разделов из командной строки

Решение там работает довольно хорошо,

dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc

но если я хочу работать с таким перезаписанным диском, я получаю сообщение об ошибке, что устройство все еще используется.

root@grml ~ # blockdev --rereadpt /dev/sda
BLKRRPART: Device or resource busy

или

root@grml ~ # partprobe
Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.
Error: Partition(s) 2, 3 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.

Поэтому приходится вручную отключать все, что «сидит» на устройстве

umount /mnt/debootstrap
umount /mnt/debootstrap/tmp
umount /mnt/debootstrap/var/log
umount /mnt/debootstrap/var
umount /mnt/debootstrap/home
service mdadm stop
service lvm2 stop
vgremove vg_main
pvremove /dev/md1
mdadm --stop /dev/md0
mdadm --stop /dev/md1
mdadm --remove /dev/md0
mdadm --remove /dev/md1

после этого partprobeкоманда работает.

есть ли команда, которая работает проще? подобно

harddiskreset /dev/sda

так что его легко можно использовать в системах с разным расположением разделов / lvm / md?


1
Помимо перезагрузки, что вам посоветуете сделать? Каков контекст здесь?
Майкл Хэмптон

Я не уверен, что понимаю ваши вопросы. Я хочу загрузить систему Debian с помощью bash-скрипта, который использует setup-storage. чтобы скрипт всегда работал, жесткий диск в целевой системе должен быть очищен / сброшен ранее. это контекст, который вы просили? тогда я бы расширил свой вопрос. мне это не показалось уместным, потому что я просто ищу команду, которая может удалить mbr и разделы с жесткого диска ...
c33s

Вы должны стереть MBR перед настройкой разделов. Похоже, что вы делаете это после того, как настроили их!
Майкл Хэмптон

Ах, ха! Я понял. Чтобы это работало (с LiveCD), мне сначала нужно было сделать это: sudo wipefs -a / dev / sdb - fdisk -l не показывал таблицы разделов в / dev / sdb - затем - sudo dd if = / dev / sda из = / dev / sdb работал для создания загрузочной копии основного диска.
SDsolar

Ответы:


5

wipefsПрограмма позволяет легко удалить раздел стола подпись:

wipefs -a /dev/sda

Вы все равно должны остановить любой процесс, использующий устройство, например, LVM.

От man wipefs

wipefs может стереть подписи файловой системы, raid или таблицы разделов (магические строки) с указанного устройства, чтобы сделать подписи невидимыми для libblkid.

wipefs не удаляет ни файловую систему, ни другие данные с устройства. При использовании без каких-либо параметров, wipefs перечисляет все видимые файловые системы и смещения их основных сигнатур.

wipefs вызывает BLKRRPART ioctl, когда он стер подпись таблицы разделов, чтобы сообщить ядру об изменении.


2

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

Вы можете запустить

$ sudo parted /dev/sda

Это поможет вам начать работу и доставит вас в разделенный терминал. Затем вы можете запустить команду справки, чтобы показать все доступные команды. Это само за себя.

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

Используя parted для управления жестким диском, мне никогда не приходилось принудительно обновлять диск или что-то подобное.

Чтобы полностью обновить диск для нового использования, я обычно делаю следующее:

1) начать расстаться, запустив sudo parted /dev/sda

2) найти любые существующие разделы, запустив print

3) удалить существующие разделы, запустив rm 1замену 1 номером раздела, который вы хотите удалить. Затем повторите для всех оставшихся разделов на диске.

4) сбросьте mklabel gptметку диска, запустив я использую тип метки gpt, но вы можете использовать стандартные msdos или что-то другое. Вот список типов меток диска

5) Создайте новые разделы, запустив mkpartЭто запустит вас через мастер создания разделов. Начальная и конечная точки по умолчанию являются секторами. Вы можете изменить это, выполнив unitкоманду перед запуском. mkpartТаким образом, вы можете указать ее в ГБ, ТБ или МБ и т. Д.

6) проверьте свои результаты, используя printдля просмотра информации о новой таблице разделов

7) Затем вам нужно отформатировать разделы. Это не должно быть сделано через parted, хотя некоторые варианты для этого доступны. Я бы предложил вместо этого запустить quitвыход из терминала с разделением, а затем использовать mkfsдля форматирования разделов. Не забудьте запустить mkfs в / dev / sda1 вместо / dev / sda, потому что вы форматируете раздел, а не диск в целом.

Вот и все.

Надеюсь, это ответит на ваш вопрос.

Кроме того, вот справочное руководство по расставанию для справки: https://www.gnu.org/software/parted/manual/html_node/index.html.

РЕДАКТИРОВАТЬ:

ОП хотел делать такие вещи из скрипта, а не из терминала. Вы можете выполнить процедуру такого же типа через скрипт, запустив parted с помощью однострочных команд, а не внутри терминала parted.

Например команда

$ sudo parted /dev/sda print

Распечатает информацию о диске и таблицу разделов на консоль bash, которой затем можно будет управлять, используя grep и т. Д., Для создания переменных или чего угодно в сценарии bash.


мне нужно автоматизировать его из сценария, а не из терминала
вручную

Подождите, ваш оригинальный пост не упоминает сценарий. Какую часть этого вы пишете? Я думаю, что вы можете запускать команды parted, не заходя в терминал parted. Я не уверен в этом, хотя.
KroniK907

Просто чтобы подтвердить, вы можете запустить разделенный от однострочных команд. Например parted /dev/sda print, распечатает таблицу разделов для / dev / sda. Вы можете сделать то же самое, что я описал выше, с помощью однострочных команд, если вам нужно сделать это в скрипте bash.
KroniK907

но я должен знать, как будет называться имя устройства, чтобы использовать команду, parted /dev/sdaтакже я должен знать, сколько разделов находится на диске для вызова rm 1, я ищу команду, чтобы просто очистить диск, чтобы я мог перераспределить его, без всякой ручной работы по отключению md, удалению lv и так далее.
c33s

1) вам все еще нужно знать, как будет называться устройство для запуска команды dd ... не уверен, что вы там делаете. Просто пролистайте, dfесли диск установлен. Как вы планируете создать «сценарий», если вы не можете получить местоположение диска? 2) его достаточно просто запустить parted $drive printи получить результаты, чтобы найти все доступные номера разделов и затем сохранить их в массиве. Затем используйте эти значения для запуска parted $drive rm $partition. Все это довольно простой сценарий bash.
KroniK907

0

Используйте улучшенную неинтерактивную версию fdisk, которая является sfdisk

Чтобы удалить таблицу разделов, используйте эту команду:

sfdisk --delete /dev/sda

0

В основном эта ошибка

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

появляется, когда вы пропускаете какой-либо параметр при разбиении диска. Вы можете исправить эту ошибку, присмотревшись к параметрам, которые вы определили при разбиении.

Используйте: fdisk -lдля проверки параметров вашего диска:

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.