Чтобы начать с чистого состояния, мне нужно сбросить жесткий диск до пустого состояния из командной строки.
Речь идет не о запуске утилиты очистки, данные не должны перезаписываться.
Этот вопрос очень похож на Удаление всех разделов из командной строки
Решение там работает неплохо,
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