Como redefinir um disco rígido (excluir Mbr e excluir partições) da linha de comando com um script sem reinicializar?

5

Para começar de um estado limpo, preciso redefinir o disco rígido para um estado vazio na linha de comando.

Não se trata de executar um utilitário de limpeza, os dados não precisam ser sobrescritos.

Essa pergunta é bem parecida com Excluindo todas as partições da linha de comando

A solução funciona bem,

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

mas se eu quiser trabalhar com esse disco substituído, recebo o erro de que o dispositivo ainda está em uso.

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

ou

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.

Portanto, tenho que desativar manualmente tudo o que "fica" no 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

depois disso, o comando partprobe funciona.

existe algum comando que funcione mais simples? como

harddiskreset /dev/sda

para que possa ser facilmente utilizado em sistemas com diferentes partições / layout lvm / md?

    
por c33s 15.01.2016 / 01:27

2 respostas

2

Eu sempre usei simplesmente o partido para isso. Ele funciona bem para alterar o tipo de disklabel e adicionar / remover partições, especialmente porque ele pode lidar com HDDs grandes e modernos, diferente do fdisk.

Você pode executar

$ sudo parted /dev/sda

Isso fará com que as coisas iniciem e entrem no terminal dividido. Você pode então executar o comando help para mostrar todos os comandos disponíveis. É muito auto-explicativo.

Eu mencionarei que sim você precisa ter todas as partições do disco que deseja formatar desmontadas. Se você estava simplesmente procurando uma maneira mais rápida de desmontar todas as partições, eu acho que você poderia fazê-lo com um regex no comando umount, mas isso parece bobo.

Usando o parted para gerenciar o disco rígido, nunca precisei forçar uma atualização do disco ou algo semelhante.

Para atualizar completamente uma unidade para novo uso, geralmente faço o seguinte:

1) comece a dividir executando sudo parted /dev/sda

2) encontre qualquer partição existente executando print

3) remova as partições existentes executando rm 1 substituindo 1 pelo número da partição que você deseja remover. Em seguida, repita para todas as partições restantes no disco.

4) redefina o disklabel executando mklabel gpt Eu uso o tipo de rótulo gpt mas você pode usar o msdos padrão ou qualquer que seja sua preferência. Aqui está uma lista de tipos de disklabel

5) Crie novas partições executando mkpart Isso irá percorrer o assistente de criação de partições. Os pontos inicial e final são padronizados para setores. Você pode alterar isso executando o comando unit antes de executar mkpart . Dessa forma, você pode especificá-lo em GB ou TB ou MB, etc.

6) verifique seus resultados usando print para ver as novas informações da tabela de partições

7) Você então precisa formatar as partições. Isso não deve ser feito através do parted, embora algumas opções para isso estejam disponíveis. Em vez disso, sugiro executar quit para sair do terminal dividido e, em seguida, usar mkfs para formatar as partições. Lembre-se de rodar 'mkfs' em / dev / sda1 ao invés de / dev / sda porque você está formatando a partição e não o disco como um todo.

É sobre isso.

Espero que isso responda à sua pergunta.

Além disso, aqui está o manual on-line para referência: link

EDITAR:

O OP queria fazer esse tipo de coisa a partir de um script e não de um terminal. Você pode fazer o mesmo tipo de procedimento através de um script executando parted via comandos de linha única em vez de no terminal parted.

Por exemplo, o comando

$ sudo parted /dev/sda print

Imprimirá as informações sobre a unidade e a tabela de partições no console bash, que pode então ser manipulado usando o grep etc para criar variáveis ou o que você quiser em um script bash.

    
por 15.01.2016 / 02:41
2

O programa wipefs permite excluir facilmente a assinatura da tabela de partições:

wipefs -a /dev/sda

Você ainda tem que parar qualquer processo usando o dispositivo, como o LVM.

De man wipefs

wipefs can erase filesystem, raid or partition-table signatures (magic strings) from the specified device to make the signatures invisible for libblkid.

wipefs does not erase the filesystem itself nor any other data from the device. When used without any options, wipefs lists all visible filesystems and the offsets of their basic signatures.

wipefs calls the BLKRRPART ioctl when it has erased a partition-table signature to inform the kernel about the change.

    
por 02.05.2017 / 21:27