Come posso rimuovere in sicurezza un disco SATA da un sistema in esecuzione?


64

A volte ho bisogno di collegare un disco in un vano disco. Altre volte, ho la configurazione molto strana di collegare un SSD usando un cavo SATA-eSATA sul mio laptop mentre trae energia da un desktop.

Come posso rimuovere in sicurezza il disco SATA dal sistema? Questo thread del forum Phoronix ha alcuni suggerimenti:

justsumdood ha scritto:

Un droide (noymous) ha scritto:
Cosa fai allora sul lato software prima di scollegare? È un semplice "umount / dev / sd" [lettera di unità]? dopo aver smontato il dispositivo, per "spegnere" (o mettere in pausa) l'unità:

hdparm -Y /dev/sdX

(dove X rappresenta il dispositivo che si desidera spegnere. ad esempio: / dev / sdb)

questo spegnerà il convertitore consentendo la sua rimozione senza rischio di sovratensione.

Questo significa che le cache del disco vengono correttamente svuotate e spente in seguito?

Un altro suggerimento dallo stesso thread:

chithanh ha scritto:
Tutto l'hardware SATA ed eSATA è fisicamente in grado di essere collegato a caldo (cioè non danneggiato se si inserisce / estrae la spina).

Come il chipset e il driver gestiscono questa è un'altra domanda. Alcune combinazioni driver / chipset non gestiscono correttamente l'hotplugging e richiedono un comando warmplug come il seguente:

echo 0 - 0 > /sys/class/scsi_host/hostX/scan

Sostituisci X con il numero appropriato per la tua porta SATA / eSATA.

Dubito che sia il modo corretto per farlo, ma non riesco a trovare alcuna prova contro di esso.

Quindi, qual è il modo corretto per rimuovere un disco collegato da un sistema? Supponiamo che abbia già smontato tutte le partizioni sul disco ed eseguito sync. Si prega di indicare alcuni documenti ufficiali, se possibile, non sono riuscito a trovare nulla nell'albero della documentazione Linux, né nel wiki ATA Linux .

Risposte:


82
  1. Smonta tutti i filesystem sul disco. ( umount ...)
  2. Disattiva tutti i gruppi LVM. ( vgchange -an)
  3. Assicurati che nulla stia usando il disco per nulla.
  4. Dopo averlo fatto, dovrebbe essere sicuro staccare la spina.

Se vuoi essere più cauto, fallo echo 1 > /sys/block/(whatever)/device/deleteprima. Questo annullerà la registrazione del dispositivo dal kernel, quindi sai che nulla lo sta usando quando lo scolleghi. Quando lo faccio con un'unità in un contenitore eSATA, riesco a sentire le testine dell'unità parcheggiare, quindi il kernel apparentemente dice all'unità di prepararsi per lo spegnimento.

Se si utilizza un controller AHCI, è necessario che i dispositivi vengano scollegati. Se si utilizza un altro tipo di controller SATA, il driver potrebbe essere confuso da hotplugging.

Nella mia esperienza, l'hotplugging SATA (con AHCI) funziona abbastanza bene in Linux. Ho scollegato un'unità ottica, collegato a un disco rigido, scansionato per errori, creato un filesystem e copiato i dati su di esso, smontato e scollegato, collegato a un'unità DVD diversa e masterizzato un disco, tutto con la macchina accesa e in esecuzione.


Avevo bisogno di scollegare un HDD che volevo cancellare completamente. Dopo aver estratto il disco dal vano, / dev / sdXY è ancora apparso. Scrivere 1per deletefarlo scomparire e ho potuto sentire il disco rotarsi. Semplicemente hdparm -Ynon era abbastanza perché le /dev/voci esistevano ancora. Grazie!
Lekensteyn,

16
Consiglio vivamente di emettere sempre il echo 1 > /sys/block/(whatever)/device/deletecomando perché l'unità parcheggerà le testine, fermerà completamente il disco e disabiliterà l'alimentazione sul bus. Se una testa non parcheggiata tocca una piastra rotante, l'unità può essere distrutta in modo permanente.
incendio di batteria

2
Inoltre, se smartd è in esecuzione, è consigliabile inviare un SIGHUP al processo in modo da ricaricare le informazioni sull'unità. Particolarmente importante se si sostituiscono le unità perché smartd ricaricherà le informazioni per quell'unità e tutti gli altri.
incendio di batteria

1
Solo una nota degna di nota, echo 1 > /sys/block/(whatever)/device/deletenon funzionerà sotto sudo, verrà lanciato l'errore "Autorizzazione negata". Dovrai diventare una vera radice, quindi usa semplicemente il vecchio su.
TranslucentCloud

11
@TranslucentCloud Puoi sudo teereindirizzarlo per emulare un reindirizzamento come root:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli

5

Queste due sezioni sono per cose diverse.

Il primo è per scollegare . Il secondo è per il collegamento .

Per lo scollegamento, il sistema operativo sincronizzerà i dati durante l'operazione di smontaggio. Pertanto, se il disco è smontato (supponendo che abbiate effettivamente il supporto hardware completo), è possibile spegnere il disco, quindi scollegarlo senza il rischio di perdita o danneggiamento dei dati.

Per il collegamento, il dispositivo dovrebbe essere riconosciuto automaticamente. In caso contrario, è possibile eseguire quel comando per attivare una scansione del bus. Una volta riconosciuto il dispositivo, è possibile montarlo.

E lasciatemi avvertire dicendo che ho sempre fatto questo genere di cose con le unità USB.


Grazie per la tua risposta, ma non sono ancora convinto di quale sarebbe l'azione corretta. Gli SSD hanno un campo SMART "Unsafe Shutdown Count", basta scollegarlo senza fare nulla non mi sembra sicuro.
Lekensteyn,

3
Se mi aiuta, eseguo regolarmente il hot plug e lo scollegamento dei dischi rigidi SATA come parte del mio lavoro, senza altro che assicurarmi che sia stato smontato per primo, e non ho mai avuto problemi. È aneddotico, quindi non prenderlo come vangelo, ma è almeno qualche prova che probabilmente è sicuro. In ogni caso, lo considererei un bug del kernel se il sistema operativo non garantisce che i dati siano completamente scritti al termine di un'operazione di smontaggio, specialmente in un mondo hotplug.
Jander,

1
@Lekensteyn, se hdparm -Yne occuperà. Questo è fondamentalmente ciò che fa il sistema ogni volta che si sospende o si arresta.
psusi

5

che dire eject /dev/sdX? Nella mia configurazione, questo comando smonta, sincronizza e spegne l'unità.


4
Ho provato questo con un disco collegato tramite eSATA ma il comando non è riuscito con "non collegabile a caldo" o qualcosa del genere.
Lekensteyn,

1
Afaik eject disconnette il disco collegabile e non il dispositivo. Dipende dal fatto che il driver del dispositivo a blocchi supporta l' ioctl()operazione utilizzata dallo ejectstrumento. Le unità disco fisso Esata non lo supportano, ma dispositivi ottici, floppy e probabilmente unità flash, sì.
user259412

2

Ho un paio di script che si basano sulla risposta di Wyzard . Il primo, scsi-dropè di staccare in sicurezza un singolo disco:

#!/bin/sh

if test -h "$1"
then
    disk=$(chase "$1")
else
    disk="$1"
fi

if test -b "$disk"
then
    echo 1 >/sys/block/$(basename "$disk")/device/delete
else
    echo "$0: not a block device: $1" >&2
    exit 1
fi

Il suo principale vantaggio è che puoi passargli un link simbolico, come quello trovato in /dev/disk/by-id/e lo risolverà al dispositivo reale. Richiede chasel'installazione; potresti essere in grado di ottenere lo stesso risultato usando readlink -e.

Il secondo script, scsi-rescanviene utilizzato dopo aver collegato a caldo un nuovo dispositivo:

#!/bin/bash

exec tee /sys/class/scsi_host/host*/scan <<<'- - -' >/dev/null

Ciò rende nuovamente tutti gli adattatori alla ricerca di dispositivi. È stato l'unico modo in cui sono riuscito a leggere la nuova capacità e la tabella delle partizioni.


0

In realtà, le unità SATA parcheggiano automaticamente le testine quando si perde energia. Tirare l'unità mentre gira ancora, non dovrebbe causare problemi. Tuttavia, i dischi rotanti sono soggetti a ammaccature se urtati. Puoi sentirlo quando hai energia traballante o brillamenti solari.

La maggior parte dei danni è in genere causata da cache non svuotata e scritture non impegnate nei buffer, ecc ... Ecco perché DEVI smontare un'unità, prima di rimuoverla. Il comando SCSI è solo una buona misura e funziona allo stesso fine.

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.