Назад | Перейти на главную страницу

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

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

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

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

Решение там работает неплохо,

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?

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

wipefs -a /dev/sda

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

Из man wipefs

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

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

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

Я всегда просто использовал для этого 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

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

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

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

$ sudo parted /dev/sda print

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

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

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

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

Использование: fdisk -l чтобы проверить параметры вашего диска:

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

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

sfdisk --delete /dev/sda