Comment puis-je supprimer en toute sécurité un disque SATA d'un système en cours d'exécution?

64

J'ai parfois besoin de brancher un disque dans une baie de disque. D'autres fois, j'ai la configuration très étrange de connecter un SSD à l'aide d'un câble SATA-eSATA sur mon ordinateur portable tout en alimentant un ordinateur de bureau.

Comment puis-je retirer en toute sécurité le disque SATA du système? Ce fil de discussion sur le forum de Phoronix contient quelques suggestions:

justsumdood a écrit:

Un droïde (noymous) a écrit:
Que faites-vous alors du côté logiciel avant de débrancher? Est-ce un simple "umount / dev / sd" [lettre de lecteur]? après le démontage de l'appareil, pour "éteindre" (ou mettre en veille) l'unité:

hdparm -Y /dev/sdX

(où X représente le périphérique que vous souhaitez éteindre. Par exemple: / dev / sdb)

cela mettra le variateur hors tension, ce qui permettra son retrait sans risque de surtension.

Cela signifie-t-il que les caches de disque sont correctement vidés et mis hors tension par la suite?

Une autre suggestion du même fil:

chithanh a écrit:
Tout le matériel SATA et eSATA est physiquement capable d'être branché à chaud (c'est-à-dire non endommagé si vous insérez / débranchez la prise).

La manière dont le chipset et le pilote gèrent cette question est une autre question. Certaines combinaisons pilote / chipset ne gèrent pas correctement le branchement à chaud et nécessitent une commande warmplug telle que la suivante:

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

Remplacez X par le numéro correspondant à votre port SATA / eSATA.

Je doute que ce soit la bonne façon de le faire, mais je ne peux pas non plus trouver de preuve.

Alors, quelle est la bonne façon de supprimer un disque connecté d'un système? Supposons que j'ai déjà démonté chaque partition du disque et que je me suis lancé sync. Veuillez indiquer si possible une documentation officielle, je n’ai rien trouvé dans l’arborescence de la documentation Linux, ni dans le wiki Linux ATA .

Lekensteyn
la source

Réponses:

82
  1. Démontez tous les systèmes de fichiers sur le disque. ( umount ...)
  2. Désactivez tous les groupes LVM. ( vgchange -an)
  3. Assurez-vous que rien n'utilise le disque pour quoi que ce soit.
  4. Une fois que vous avez fait cela, débranchez-le en toute sécurité.

Si vous voulez être très prudent, faites-le d' echo 1 > /sys/block/(whatever)/device/deleteabord. Cela désenregistrera le périphérique du noyau, ainsi vous saurez que rien ne l’utilise quand vous le débranchez. Lorsque je fais cela avec un disque dur dans un boîtier eSATA, j'entends les têtes du disque se garer toutes seules. Le noyau indique donc apparemment au disque de se préparer à la mise hors tension.

Si vous utilisez un contrôleur AHCI, il devrait pouvoir gérer le débranchement des périphériques. Si vous utilisez un autre type de contrôleur SATA, le pilote peut être dérouté par une connexion à chaud.

D'après mon expérience, le hotplugging SATA (avec AHCI) fonctionne plutôt bien sous Linux. J'ai débranché un lecteur optique, branché un disque dur, analysé les erreurs, créé un système de fichiers et y copié des données, démonté et débranché, branché un lecteur de DVD différent et gravé un disque, le tout avec la machine et en cours d'exécution.

Wyzard - Arrête de blesser Monica--
la source
J'avais besoin de débrancher un disque dur que je voulais effacer complètement. Après avoir sorti le disque de la baie, / dev / sdXY est toujours apparu. Ecrire 1pour le deletefaire disparaître et j'entendais le disque en train de tourner. Ce hdparm -Yn’était pas suffisant, car les /dev/entrées existeraient toujours. Merci!
Lekensteyn
16
Je conseille vivement de toujours lancer la echo 1 > /sys/block/(whatever)/device/deletecommande car le lecteur va stationner les têtes, arrêter complètement le disque et désactiver l'alimentation sur le bus. Si une tête non garée touche une plaque en rotation, le lecteur peut être définitivement détruit.
drumfire
2
En outre, si smartd est en cours d’exécution, il est judicieux d’émettre un SIGHUP au processus afin qu’il recharge les informations de lecteur. Particulièrement important si vous remplacez des lecteurs, car smartd rechargera les informations de ce lecteur et de tous les autres.
drumfire
1
Une seule note mérite d’être mentionnée, echo 1 > /sys/block/(whatever)/device/deletene fonctionnera pas sudo, l’erreur "Autorisation refusée" sera émise. Vous devrez devenir une vraie racine, utilisez donc plain old à la suplace.
TranslucentCloud
11
@TranslucentCloud Vous pouvez le diriger sudo teepour émuler une redirection en tant que root:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli
5

Ces deux sections sont pour des choses différentes.

Le premier est pour débrancher . La seconde est pour brancher .

Pour le débranchement, le système d'exploitation synchronise les données pendant l'opération de démontage. Ainsi, si le disque est démonté (en supposant que vous bénéficiez d'un support matériel complet), vous pouvez l'éteindre puis le débrancher sans risque de perte de données ou de corruption.

Pour brancher, l'appareil doit être automatiquement reconnu. Sinon, vous pouvez exécuter cette commande pour déclencher une analyse du bus. Une fois le périphérique reconnu, vous pouvez le monter.

Et permettez-moi de préciser que je n’ai jamais fait ce genre de chose avec des clés USB.

bahamat
la source
Merci pour votre réponse, mais je ne suis toujours pas convaincu de la bonne action à prendre. Les disques SSD ont un champ SMART "Nombre de coupures non sécurisées", mais le débrancher sans rien faire ne me semble pas sûr.
Lekensteyn
3
Si cela peut aider, j’ai régulièrement recours à des disques durs SATA branchés à chaud et débranchés à chaud dans le cadre de mon travail, sans plus que veiller à ce qu’il soit démonté d’abord, et je n’ai jamais rencontré de problème. C'est anecdotique, alors ne le prenez pas comme un évangile, mais c'est au moins une preuve qu'il est probablement en sécurité. Dans tous les cas, je considérerais cela comme un bogue du noyau si le système d’exploitation ne garantit pas que les données sont entièrement écrites à la fin d’une opération de démontage, en particulier dans un monde où le hotplug est actif.
Jander
1
@Lekensteyn, le hdparm -Ys'occupera de ça. C'est essentiellement ce que le système fait chaque fois que vous suspendez ou arrêtez.
Psusi
5

qu'en est-il eject /dev/sdX? Sur ma configuration, cette commande permet de monter, de synchroniser et d’éteindre le lecteur.

Bitvitez
la source
4
J'ai essayé avec un disque connecté via eSATA, mais la commande a échoué avec "not hotpluggable" ou quelque chose du genre.
Lekensteyn
1
Afaik eject déconnecte le disque insérable et non le périphérique. Cela dépend du fait que le pilote de périphérique de bloc prend en charge l' ioctl()opération utilisée par l' ejectoutil. Les lecteurs de disque dur Esata ne le prennent pas en charge, mais les périphériques optiques, les disquettes et probablement les lecteurs flash, oui.
user259412
2

J'ai une paire de scripts qui s'appuie sur la réponse de Wyzard . La première scsi-dropconsiste à détacher en toute sécurité un seul disque:

#!/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

Son principal avantage est que vous pouvez lui transmettre un lien symbolique, tel que trouvé dans, /dev/disk/by-id/et cela résoudra ce problème sur le périphérique réel. Cela nécessite chased'être installé; vous pourrez peut-être obtenir le même résultat en utilisant readlink -e.

Le second script, scsi-rescanest utilisé après avoir branché à chaud un nouveau périphérique:

#!/bin/bash

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

Cela fait que tous les adaptateurs recherchent à nouveau des périphériques. C’est la seule façon pour moi d’obtenir la lecture de la nouvelle table de capacité et de capacité.

Toby Speight
la source
0

En fait, les disques SATA garent automatiquement les têtes en cas de coupure de courant. Tirer le disque en cours de rotation ne devrait pas entraîner de problèmes. Cependant, les disques en rotation sont sujets aux bosses s’ils sont heurtés. Vous pouvez entendre cela lorsque vous avez une puissance instable ou des éruptions solaires.

La plupart des dommages sont généralement causés par un cache non vidé et des écritures non validées dans des mémoires tampons, etc. C'est pourquoi vous DEVEZ démonter un lecteur avant de le retirer. La commande SCSI est juste une bonne mesure et va dans le même sens.

Bob l'éponge
la source