Come ripristinare un disco rigido (eliminare Mbr ed eliminare le partizioni) dalla riga di comando con uno script senza riavviare?


8

Per iniziare da uno stato pulito ho bisogno di ripristinare il disco rigido a uno stato vuoto dalla riga di comando.

Non si tratta di eseguire un'utilità di cancellazione, i dati non devono essere sovrascritti.

Questa domanda è abbastanza simile all'eliminazione di tutte le partizioni dalla riga di comando

La soluzione lì funziona abbastanza bene,

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

ma se voglio lavorare con un disco così sovrascritto, visualizzo l'errore che il dispositivo è ancora in 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.

Quindi devo disabilitare manualmente tutto ciò che "si trova" sul 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

dopodiché il partprobecomando funziona.

c'è qualche comando che funziona in modo più semplice? piace

harddiskreset /dev/sda

quindi può essere facilmente utilizzato su sistemi con layout partizione / lvm / md diverso?


1
Oltre al riavvio, qual è ciò che ti ha consigliato di fare? Qual è il contesto qui?
Michael Hampton,

non sono sicuro di aver compreso le tue domande. voglio avviare un sistema debian con uno script bash che utilizza setup-storage. per garantire che lo script funzioni sempre, è necessario svuotare / ripristinare il disco rigido nel sistema di destinazione. è quello il contesto che hai chiesto? quindi vorrei estendere la mia domanda. non mi è sembrato rilevante, perché sto solo cercando un comando in grado di eliminare mbr e partizioni dal disco
fisso

È necessario cancellare l'MBR prima di impostare le partizioni. Sembra che qui, lo stai facendo dopo averli impostati!
Michael Hampton,

Ah ah! Capito. Per farlo funzionare (da un LiveCD) ho dovuto prima fare questo: sudo wipefs -a / dev / sdb - fdisk -l non mostrava tabelle di partizione su / dev / sdb - quindi - sudo dd if = / dev / sda di = / dev / sdb ha funzionato per creare una copia di avvio dell'unità primaria.
SDsolar,

Risposte:


5

Il wipefsprogramma consente di eliminare facilmente la firma della tabella delle partizioni:

wipefs -a /dev/sda

Tuttavia, è necessario interrompere qualsiasi processo utilizzando il dispositivo, ad esempio LVM.

A partire dal man wipefs

wipefs può cancellare le firme del filesystem, raid o della tabella delle partizioni (stringhe magiche) dal dispositivo specificato per rendere invisibili le firme per libblkid.

wipefs non cancella il filesystem stesso né altri dati dal dispositivo. Se utilizzato senza alcuna opzione, wipefs elenca tutti i filesystem visibili e gli offset delle loro firme di base.

wipefs chiama lo ioctl BLKRRPART quando ha cancellato una firma della tabella delle partizioni per informare il kernel della modifica.


2

Ho sempre usato semplicemente separato per questo. Funziona bene per cambiare il tipo di etichetta del disco e aggiungere / rimuovere partizioni, soprattutto perché può gestire HDD moderni di grandi dimensioni a differenza di fdisk.

Puoi correre

$ sudo parted /dev/sda

Ciò avvierà le cose e ti porterà nel terminale parted. È quindi possibile eseguire il comando help per mostrare tutti i comandi disponibili. È molto esplicativo.

Dirò che sì, devi avere tutte le partizioni del disco che vuoi formattare smontate. Se stavi semplicemente cercando un modo più veloce per smontare tutte le partizioni, immagino che potresti farlo con una regex nel comando umount ma sembra sciocco.

Usando parted per gestire l'HDD non ho mai dovuto forzare un aggiornamento del disco o qualcosa di simile.

Per aggiornare completamente un'unità per un nuovo utilizzo, di solito eseguo le seguenti operazioni:

1) iniziare parted correndo sudo parted /dev/sda

2) trova eventuali partizioni esistenti eseguendo print

3) rimuovere le partizioni esistenti eseguendo la rm 1sostituzione 1 con il numero di partizione che si desidera rimuovere. Quindi ripetere per tutte le partizioni rimanenti sul disco.

4) reimpostare il disklabel eseguendo mklabel gptUso il tipo di etichetta gpt ma è possibile utilizzare il msdos standard o qualunque sia la tua preferenza. Ecco un elenco di tipi di etichetta del disco

5) Crea nuove partizioni eseguendo mkpartQuesto ti guiderà attraverso la procedura guidata di creazione delle partizioni. I punti iniziale e finale sono impostati automaticamente sui settori. È possibile modificarlo eseguendo il unitcomando prima di eseguire In mkpartquesto modo è possibile specificarlo in GB, TB o MB ecc.

6) controlla i risultati usando printper visualizzare le informazioni sulla nuova tabella delle partizioni

7) È quindi necessario formattare le partizioni. Questo non dovrebbe essere fatto attraverso parted sebbene siano disponibili alcune opzioni per questo. Suggerirei invece di correre quitper uscire dal terminale parted e quindi utilizzare mkfsper formattare le partizioni. Ricorda di eseguire 'mkfs' su / dev / sda1 invece di / dev / sda perché stai formattando la partizione e non il disco nel suo insieme.

Questo è tutto.

Spero che questo risponda alla tua domanda.

Inoltre, ecco il manuale parted online per riferimento: https://www.gnu.org/software/parted/manual/html_node/index.html

MODIFICARE:

L'OP voleva fare questo genere di cose da uno script e non da un terminale. È possibile eseguire lo stesso tipo di procedura tramite uno script eseguendo parted tramite comandi a riga singola anziché all'interno del terminale parted.

Ad esempio il comando

$ sudo parted /dev/sda print

Stampa le informazioni sull'unità e la tabella delle partizioni sulla console bash che può quindi essere manipolata usando grep etc per creare variabili o qualunque cosa tu voglia in uno script bash.


ne ho bisogno automatizzato da una sceneggiatura non manuale dal terminale
c33

Aspetta che il tuo post originale non menzioni uno script. Quale parte di questo stai scrivendo? Penso che tu possa eseguire i comandi parted senza entrare nel terminale parted. Non ne sono sicuro però.
KroniK907,

Solo per confermare, è possibile eseguire parted da comandi a riga singola. Ad esempio parted /dev/sda printstamperà la tabella delle partizioni per / dev / sda. Puoi fare la stessa cosa che ho descritto sopra solo con comandi a riga singola se devi farlo all'interno di uno script bash.
KroniK907,

ma devo sapere quale sarà il nome del dispositivo per utilizzare il comando, parted /dev/sdainoltre devo sapere quante partizioni sono sull'unità da chiamare rm 1, sto cercando un comando per pulire semplicemente il disco, così posso ripartizionarlo, senza fare tutte le cose manuali per spegnere md's rimuovendo lv's e così via.
C33,

1) devi ancora sapere quale sarà il nome del dispositivo per eseguire un comando dd ... non sei sicuro di cosa stai arrivando lì. Basta passare attraverso dfse l'unità è montata. Come pensi di creare uno "script" se non riesci a trovare la posizione dell'unità? 2) è abbastanza facile eseguire parted $drive printe grep i risultati per trovare tutti i numeri di partizione disponibili e quindi memorizzarli in un array. Quindi utilizzare quei valori per l'esecuzione parted $drive rm $partition. Tutte queste cose sono script bash piuttosto semplici.
KroniK907,

0

Usa una versione non interattiva migliorata di fdisk, che è sfdisk

Per cancellare la tabella delle partizioni usare questo comando:

sfdisk --delete /dev/sda

0

Fondamentalmente, questo errore

Errore: Le partizioni 1 su / dev / sdc sono state scritte, ma non siamo stati in grado di informare il kernel della modifica, probabilmente perché sono in uso. Di conseguenza, le vecchie partizioni rimarranno in uso. È necessario riavviare ora prima di apportare ulteriori modifiche.

appare quando si perde qualche parametro durante il partizionamento del disco. È possibile correggere questo errore osservando attentamente i parametri definiti durante il partizionamento.

Usa: fdisk -lper controllare i parametri del tuo disco:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.