¿Cómo restablecer un disco duro (eliminar Mbr y eliminar particiones) desde la línea de comandos con un script sin reiniciar?

8

Para comenzar desde un estado limpio, necesito restablecer el disco duro a un estado vacío desde la línea de comandos.

No se trata de ejecutar una utilidad de borrado, los datos no tienen que sobrescribirse.

Esta pregunta es bastante similar a Eliminar todas las particiones de la línea de comandos

La solución allí funciona bastante bien,

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

pero si quiero trabajar con un disco sobrescrito de este tipo, aparece el error de que el dispositivo todavía está en uso.

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

o

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.

Así que tengo que deshabilitar manualmente todo lo que "se sienta" en el dispositivo

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

después de eso el partprobecomando funciona.

¿hay algún comando que funcione más simple? me gusta

harddiskreset /dev/sda

entonces, ¿se puede usar fácilmente en sistemas con un diseño de partición / lvm / md diferente?

c33s
fuente
1
Además de reiniciar, ¿qué es lo que te aconsejó hacer? ¿Cuál es el contexto aquí?
Michael Hampton
No estoy seguro si entiendo sus preguntas. Quiero arrancar un sistema Debian con un script bash que esté usando setup-storage. Para garantizar que el script siempre funcione, el disco duro del sistema de destino debe vaciarse / reiniciarse antes. ¿Es ese el contexto que pediste? Entonces extendería mi pregunta. no me ha parecido relevante, porque solo estoy buscando un comando que pueda eliminar mbr y particiones del disco duro ...
c33s
Debe borrar el MBR antes de configurar las particiones. Parece que aquí, ¡lo estás haciendo después de configurarlos!
Michael Hampton
Ah ja! Lo tengo. Para que funcione (desde un LiveCD) primero tuve que hacer esto: sudo wipefs -a / dev / sdb - fdisk -l no mostraba tablas de particiones en / dev / sdb - luego - sudo dd if = / dev / sda of = / dev / sdb trabajó para hacer una copia de arranque de la unidad primaria.
SDsolar

Respuestas:

5

El wipefsprograma te permite eliminar fácilmente la firma de la tabla de particiones:

wipefs -a /dev/sda

Sin embargo, aún tiene que detener cualquier proceso utilizando el dispositivo, como LVM.

Desde man wipefs

wipefs puede borrar firmas del sistema de archivos, incursiones o tablas de particiones (cadenas mágicas) del dispositivo especificado para hacer que las firmas sean invisibles para libblkid.

wipefs no borra el sistema de archivos ni ningún otro dato del dispositivo. Cuando se usa sin ninguna opción, wipefs enumera todos los sistemas de archivos visibles y las compensaciones de sus firmas básicas.

wipefs llama al BLKRRPART ioctl cuando ha borrado una firma de tabla de partición para informar al núcleo sobre el cambio.

usuario144437
fuente
2

Siempre he usado simplemente parte para esto. Funciona bien para cambiar el tipo de etiqueta de disco y agregar / eliminar particiones, especialmente porque puede manejar HDD grandes y modernos a diferencia de fdisk.

Tu puedes correr

$ sudo parted /dev/sda

Esto hará que todo comience y lo llevará a la terminal separada. Luego puede ejecutar el comando de ayuda para mostrar todos los comandos disponibles. Es muy autoexplicativo.

Mencionaré que sí, debe tener todas las particiones del disco que desea formatear desmontadas. Si simplemente estaba buscando una forma más rápida de desmontar todas las particiones, supongo que podría hacerlo con una expresión regular en el comando umount, pero eso parece una tontería.

Utilizando parted para administrar el HDD, nunca he tenido que forzar una actualización del disco ni nada similar.

Para actualizar completamente una unidad para un uso completamente nuevo, generalmente hago lo siguiente:

1) comience separándose corriendo sudo parted /dev/sda

2) encuentre las particiones existentes ejecutando print

3) elimine las particiones existentes ejecutando rm 1reemplazando 1 con el número de partición que desea eliminar. Luego repita para todas las particiones restantes en el disco.

4) restablecer la etiqueta del disco ejecutando mklabel gptYo uso el tipo de etiqueta gpt pero podría usar el msdos estándar o lo que sea su preferencia. Aquí hay una lista de tipos de etiqueta de disco

5) Cree nuevas particiones ejecutando mkpartEsto lo ejecutará a través del asistente de creación de particiones. Los puntos de inicio y finalización están predeterminados por sectores. Puede cambiar esto ejecutando el unitcomando antes de ejecutarlo. De mkpartesta manera puede especificarlo en GB o TB o MB, etc.

6) verifique sus resultados usando printpara ver la información de su nueva tabla de particiones

7) Luego debe formatear las particiones. Esto no debe hacerse por separado, aunque algunas opciones para esto están disponibles. Sugeriría en su lugar ejecutar quitpara salir del terminal dividido y luego usar mkfspara formatear las particiones. Recuerde ejecutar 'mkfs' en / dev / sda1 en lugar de / dev / sda porque está formateando la partición y no el disco como un todo.

Eso es todo.

Espero que esto responda tu pregunta.

Además, aquí está el manual separado en línea para referencia: https://www.gnu.org/software/parted/manual/html_node/index.html

EDITAR:

El OP quería hacer este tipo de cosas desde un script y no desde un terminal. Puede realizar el mismo tipo de procedimiento a través de un script ejecutando parted a través de comandos de línea única en lugar de dentro del terminal dividido.

Por ejemplo el comando

$ sudo parted /dev/sda print

Imprimirá la información de la unidad y la tabla de particiones en la consola bash que luego se puede manipular usando grep, etc. para crear variables o lo que desee en un script bash.

KroniK907
fuente
lo necesito automatizado desde un script no manual desde la terminal
c33s
Espera, tu publicación original no menciona un guión. ¿Qué parte de esto estás escribiendo? Creo que puedes ejecutar comandos divididos sin entrar en el terminal dividido. Aunque no estoy seguro de eso.
KroniK907
Solo para confirmar, puede ejecutar parted desde comandos de una sola línea. Por ejemplo parted /dev/sda print, imprimirá la tabla de particiones para / dev / sda. Puede hacer lo mismo que describí anteriormente solo con comandos de una sola línea si necesita hacerlo dentro de un script bash.
KroniK907
pero tengo que saber cuál será el nombre del dispositivo para usar el comando parted /dev/sdatambién tengo que saber cuántas particiones hay en la unidad para llamar rm 1, estoy buscando un comando para simplemente limpiar el disco, para poder volver a particionarlo , sin hacer todo el trabajo manual de apagar md's, eliminar lv's, etc.
c33s
1) todavía tiene que saber cuál será el nombre del dispositivo para ejecutar un comando dd ... no estoy seguro de lo que está obteniendo allí. Simplemente pase dfsi la unidad está montada. ¿Cómo planea crear un "script" si no puede obtener la ubicación de la unidad? 2) es bastante fácil de ejecutar parted $drive printy grep los resultados para encontrar todos los números de partición disponibles y luego almacenarlos en una matriz. Luego usa esos valores para correr parted $drive rm $partition. Todo esto es una secuencia de comandos bash bastante simple.
KroniK907
0

Utilice una versión no interactiva mejorada de fdisk, que es sfdisk

Para borrar la tabla de particiones use este comando:

sfdisk --delete /dev/sda
Suncatcher
fuente
0

Básicamente, este error

Error: Las particiones 1 en / dev / sdc se han escrito, pero no hemos podido informar al núcleo del cambio, probablemente porque están en uso. Como resultado, las particiones antiguas permanecerán en uso. Debe reiniciar ahora antes de realizar más cambios.

aparece cuando omite algún parámetro al particionar su disco. Puede corregir este error observando de cerca los parámetros que definió durante la partición.

Uso: fdisk -lpara verificar los parámetros de su disco:

usuario569959
fuente