web-dev-qa-db-fra.com

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

J'ai parfois besoin de brancher un disque dans une baie de disque. À d'autres moments, 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 tirant sur un ordinateur de bureau.

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

justsumdood a écrit:

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

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, permettant son retrait sans risque de surtension.

Est-ce à dire 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:
.

Comment le chipset et le pilote gèrent cela 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 approprié pour votre port SATA/eSATA.

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

Alors, quelle est la bonne façon de supprimer un disque attaché d'un système? Supposons que j'ai déjà démonté toutes les partitions du disque et exécuté sync. Veuillez indiquer si possible une documentation officielle, je n'ai rien trouvé dans l'arborescence de la documentation Linux, ni wiki Linux ATA .

67
Lekensteyn
  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, vous devriez pouvoir le débrancher en toute sécurité.

Si vous voulez être extrêmement prudent, faites d'abord echo 1 > /sys/block/(whatever)/device/delete. Cela désenregistrera le périphérique du noyau, donc vous savez rien ne l'utilise lorsque vous le débranchez. Lorsque je fais cela avec un lecteur dans un boîtier eSATA, j'entends les têtes du lecteur se garer, donc le noyau dit apparemment au lecteur de se préparer à la mise hors tension.

Si vous utilisez un contrôleur AHCI, il devrait faire face aux périphériques qui sont débranchés. Si vous utilisez un autre type de contrôleur SATA, le pilote peut être confondu par branchement à chaud.

D'après mon expérience, le branchement à chaud SATA (avec AHCI) fonctionne plutôt bien sous Linux. J'ai débranché un lecteur optique, branché un disque dur, recherché des erreurs, créé un système de fichiers et copié des données dessus, démonté et débranché, branché un autre lecteur de DVD et gravé un disque, le tout avec la machine en place et courir.

84
Wyzard

qu'en est-il de eject /dev/sdX? Sur ma configuration, cette commande démonte, synchronise et éteint le lecteur.

5
bitvitez

Ces deux sections sont pour des choses différentes.

Le premier est pour débrancher. Le second est pour branchement.

Pour le débranchement, le système d'exploitation synchronisera les données pendant l'opération de démontage. Ainsi, si le disque n'est pas monté (en supposant que vous ayez en fait une prise en charge matérielle complète), vous pouvez éteindre le disque puis le débrancher sans risque de perte de données ou de corruption.

Pour le branchement, l'appareil doit être reconnu automatiquement. Sinon, vous pouvez exécuter cette commande pour déclencher un balayage de bus. Une fois l'appareil reconnu, vous pouvez le monter.

Et permettez-moi de faire une mise en garde en disant que je n'ai jamais fait ce genre de chose avec des clés USB.

5
bahamat

J'ai une paire de scripts qui s'appuient sur réponse de Wyzard . La première, scsi-drop, consiste à 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 passer un lien symbolique, comme dans /dev/disk/by-id/ et il résoudra cela sur le vrai appareil. Il nécessite l'installation de chase; vous pourrez peut-être obtenir le même résultat en utilisant readlink -e.

Le deuxième script, scsi-rescan, est utilisé après le branchement à chaud d'un nouveau périphérique:

#!/bin/bash

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

Cela oblige tous les adaptateurs à rechercher à nouveau les périphériques. C'était le seul moyen par lequel j'ai réussi à lire la nouvelle table de capacité et de partition.

2
Toby Speight

En fait, les disques SATA garent automatiquement les têtes en cas de panne de courant. Tirer le disque alors qu'il tourne encore ne devrait pas entraîner de problèmes. Cependant, les disques en rotation sont sujets aux coups s'ils sont heurtés. Vous pouvez entendre cela lorsque vous avez une puissance feuilletée 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 les tampons, etc. C'est pourquoi vous DEVEZ démonter un lecteur avant de le retirer. La commande SCSI est juste une bonne mesure et fonctionne dans le même sens.

0
spongebob