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 substituídos.
Esta pergunta é bastante semelhante a Excluir todas as partições da linha de comando
A solução lá funciona muito bem,
dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc
mas se eu quiser trabalhar com um disco substituído, recebo o erro de que o dispositivo ainda esteja 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.
Então, eu 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 que o partprobe
comando funciona.
existe algum comando que funciona mais simples? gostar
harddiskreset /dev/sda
para que ele possa ser facilmente usado em sistemas com layout de partição / lvm / md diferente?
Respostas:
O
wipefs
programa permite excluir facilmente a assinatura da tabela de partições:Você ainda precisa interromper qualquer processo usando o dispositivo, como o LVM.
De
man wipefs
fonte
Eu sempre usei simplesmente parted para isso. Ele funciona bem para alterar o tipo de rótulo de disco e adicionar / remover partições, especialmente porque ele pode lidar com grandes HDDs modernos, diferentemente do fdisk.
Você pode correr
Isso fará com que tudo comece e você entre no terminal separado. Você pode executar o comando help para mostrar todos os comandos disponíveis. É muito auto-explicativo.
Mencionarei que sim, você precisa ter todas as partições do disco que deseja formatar desmontadas. Se você estivesse simplesmente procurando uma maneira mais rápida de desmontar todas as partições, acho que você poderia fazê-lo com uma regex no comando umount, mas isso parece bobagem.
Usando o parted para gerenciar o disco rígido, nunca tive que forçar uma atualização do disco ou algo semelhante.
Para atualizar completamente uma unidade para uso totalmente novo, geralmente faço o seguinte:
1) comece a se separar executando
sudo parted /dev/sda
2) encontre partições existentes executando
print
3) remova as partições existentes executando a
rm 1
substituição de 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 os msdos padrão ou qualquer que seja sua preferência. Aqui está uma lista dos tipos de disco5) Crie novas partições executando
mkpart
Isso o guiará pelo assistente de criação de partições. Os pontos inicial e final são padronizados para setores. Você pode alterar isso executando ounit
comando antes de executar.mkpart
Dessa forma, você pode especificá-lo em GB ou TB ou MB etc.6) verifique seus resultados usando
print
para visualizar suas novas informações da tabela de partições7) Você precisa formatar as partições. Isso não deve ser feito através de partições, embora algumas opções estejam disponíveis. Eu sugeriria, em vez disso, correr
quit
para sair do terminal dividido e depois usarmkfs
para formatar as partições. Lembre-se de executar 'mkfs' em / dev / sda1 em vez 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 online dividido para referência: https://www.gnu.org/software/parted/manual/html_node/index.html
EDITAR:
O OP queria fazer esse tipo de coisa a partir de um script e não de um terminal. Você pode executar o mesmo tipo de procedimento por meio de um script executando parted através de comandos de linha única em vez de dentro do terminal separado.
Por exemplo, o comando
Irá imprimir as informações da unidade e a tabela de partição no console do bash, que pode ser manipulado usando grep etc para criar variáveis ou o que você desejar em um script do bash.
fonte
parted /dev/sda print
, imprimirá a tabela de partição para / dev / sda. Você pode fazer a mesma coisa que descrevi acima apenas com comandos de linha única, se precisar fazê-lo em um script bash.parted /dev/sda
também tenho que saber quantas partições há na unidade para chamarrm 1
, estou procurando um comando para simplesmente limpar o disco, para reparticioná-lo, sem fazer todo o material manual de desligar md's removendo lv's e assim por diante.df
se a unidade estiver montada. Como você planeja criar um "script" se não consegue obter a localização da unidade? 2) é fácil o suficiente executarparted $drive print
e grep os resultados para encontrar todos os números de partição disponíveis e armazená-los em uma matriz. Em seguida, use esses valores para executarparted $drive rm $partition
. Todas essas coisas são scripts simples do bash.Use a versão não interativa aprimorada do fdisk, que é sfdisk
Para apagar a tabela de partição, use este comando:
fonte
Basicamente, esse erro
aparece quando você perde algum parâmetro ao particionar seu disco. Você pode corrigir esse erro observando atentamente os parâmetros que você definiu ao particionar.
Use:
fdisk -l
para verificar os parâmetros do seu disco:fonte