Éjecter les commandes USB / éjecter la commande


55

Je sais que la ejectcommande peut être utilisée pour éjecter presque tous les composants matériels connectés, mais peut-elle également être utilisée pour éjecter des clés USB?

Est-il possible d'éjecter les lecteurs USB et les disques durs externes avec la ejectcommande?


3
En relation: l'opposé de eject /dev/sdXis sg_start -s /dev/sdX(from sg3_utilspackage), les deux utilisent des commandes SCSI pour envoyer au périphérique.
Yeti

Réponses:


15

Non, ils ne doivent pas l'être non plus. ejectest utilisé pour ouvrir des lecteurs optiques, où il est impossible d'extraire directement le support.

Le démontage est suffisant pour USB / eSATA / etc. périphériques de stockage.


Hmm, j'ai vu éjecter hdd comme dans / dev / sda quelque part. Je suppose que la référence était fausse alors.
Joe Barr

Vous pouvez le faire, mais cela ne fait généralement pas grand chose.
Ignacio Vazquez-Abrams

1
Cela suppose que le périphérique est monté en premier lieu, ce qui entraîne un autre grand ensemble d'hypothèses (il possède un système de fichiers que vous pouvez lire, par exemple). Imaginez que vous effaciez un grand nombre de lecteurs externes - ils ne seront probablement jamais montés. éjecter est la bonne chose à utiliser.
James Moore

1
Si jamais je ne suis pas sûr, je syncle retire avant
EkriirkE

Gros, gros AVERTISSEMENT: Ce n'est pas complètement vrai. Si vous ne le faites pas, ejectle pilote de périphérique USB sous-jacent peut toujours (essayer de) écrire APRÈS umountest revenu. Cela peut être clairement vu si le lecteur a un voyant d'état. Utiliser la clé USB juste après la umountfin est RECIPE FOR DISASTER.
ZioByte

77

Oui. Par exemple:

sudo eject /dev/sda

Les autres réponses suggérant que vous avez besoin d’un matériel d’éjection mécanique sont incorrectes.

Le démontage n'est pas la même chose que l'éjection.

  1. Si vous démontez un volume, vous pouvez immédiatement le remonter, car le périphérique sous-jacent est toujours disponible. Dans certaines situations, cela pourrait présenter un risque pour la sécurité. En éjectant le périphérique, seule une réinitialisation du sous-système USB (par exemple, un redémarrage) rechargera le périphérique.
  2. En éjectant le périphérique, vous désactivez efficacement tout accès ultérieur au périphérique. Seule une réinitialisation du sous-système USB (par exemple, un redémarrage) rechargera le périphérique. Sinon, vous devez déconnecter physiquement le périphérique USB, puis le reconnecter pour pouvoir y accéder à nouveau.
  3. Avant l'éjection, cette commande démontera tous les volumes montés sur le périphérique.
  4. Si des volumes sont en cours d'utilisation, cette commande échouera comme avec démonter, sauf que certains volumes peuvent être démontés et que certains volumes peuvent rester montés.

1
Je devais également utiliser sudocette commande pour qu'elle se termine (tout ce qu'elle ferait était de démonter le lecteur avant de dire qu'il était incapable d'ouvrir le fichier). Autre que cela, réponse utile.
GDP2

Réponse sous-estimée dans ce fil. Il suffit de regarder une clé USB montée en FAT32 et de constater à quel point le démontage et l’éjection ont un monde de différences uniquement dans l’explorateur de fichiers (par exemple: nautilus). Un simple clip Sansa aiderait également à démontrer cela.
Cloud

Le périphérique est toujours présent lors de l'exécution de lsusb. Il n'est donc pas nécessaire de réinitialiser l'ensemble du sous-système USB. Juste l'appareil est suffisant. Vous pouvez utiliser usbreset à cette fin github.com/jkulesza/usbreset github.com/CWempe/usbreset Les fichiers usbreset.c sont identiques dans les deux projets,
Hannes

Comment savoir si "sda" est la bonne? Puis-je mapper sda, sdb, etc. sur les noms de périphériques réels?
Jürgen K. Le

38

ejectfonctionnera, mais ne "terminera pas vraiment le travail" en ce qui concerne les lecteurs rotatifs USB .

La meilleure façon de débrancher un disque dur externe USB, après un démontage approprié , est la suivante:

udisks --detach /dev/sdb

Cela provoque généralement une réduction progressive du lecteur.

Justement, la mise en œuvre actuelle :

  • envoie la commande SCSI sync-cache,
  • envoie la commande d'arrêt SCSI,
  • délie le pilote du noyau usb-storage,
  • suspend le périphérique USB (alimentation),
  • le désactive / le supprime logiquement de son port USB.

Ce processus est proche de la procédure manuelle suggérée ici . La réponse initiale était sur askubuntu .

EDIT: De plus, comme le souligne g.rocket , cette commande peut être équivalente:

udisksctl power-off -b /dev/sdb

Sur mon Ubuntu onyl udisksctlqui n'a pas d' --detachotion est disponible. Que faire dans ce cas? Merci.
Wakan Tanka

@WakanTanka vous installez udisks.
Totor

Comment puis-je installer udisks? Ce n'est pas sur mon système. J'ai trouvé le paquet udisks2, mais cela n'a pas fait udisksou udisks2 disponible.
Martin Thoma,

5
@WakanTanka udisksctl power-off -b /dev/sdwhateversemble faire la même chose.
g.rocket

@ g.rocket réponse mis à jour en conséquence. Je vous remercie.
Totor

8

Procédure manuelle de démontage du disque / dev / sdb (nécessite sudo):

echo 'offline' > /sys/block/sdb/device/state
echo '1' > /sys/block/sdb/device/delete

Cela éteindra complètement l'appareil et le détachera du système. Il ne sera plus détecté tant qu'il ne sera pas déconnecté et reconnecté.


2
FWIW c'est la seule chose qui fonctionne pour moi dans un Xen dom0 avec un berceau USB externe - les commandes eject et udisks donnaient des erreurs.
GS - présente ses excuses à Monica le

1
Je cherchais ceci, je suis en mode d'urgence dracut et je n'ai accès à aucune des autres fonctions. Merci!
Nassiel

hdparm -Yest également pratique pour les disques SATA / IDE.
Walf

6

Si vous lisez attentivement la page de manuel eject (1) , vous constaterez qu’il existe 4 méthodes d’éjection:

   -r   This  option specifies that the drive should be ejected using a CDROM
        eject command.

   -s   This option specifies that the drive should  be  ejected  using  SCSI
        commands.

   -f   This option specifies that the drive should be ejected using a remov‐
        able floppy disk eject command.

   -q   This option specifies that the drive should be ejected using  a  tape
        drive offline command.

Lorsque vous appelez eject sur le disque dur / SCSI, il émet une ioctl(fd, SG_IO, (void *)&io_hdr);commande (copie depuis les eject.csources).

Cela équivaut à supprimer un périphérique en toute sécurité sous MS Windows ou MaxOSX.

Pour certains appareils, cela a une moyenne particulière. Par exemple, Kindle 3 après que la commande d’ éjection a été déplacée en mode de charge et autorise la navigation sur l’appareil, alors que l’écran précédent était verrouillé.

Un autre utilitaire fait la même chose, comme ça

scsi-spin --force --down /dev/sda

3

"Éjecter" n'a aucune signification pour le matériel sans bac ou autre mécanisme de chargement (je suppose que cela fonctionne aussi avec les lecteurs de bande).

Cependant, les tests avec une clé USB externe indiquent que cela ejectfonctionne beaucoup umount: avec comme effet secondaire de faire disparaître les nœuds de périphérique, par exemple:

% ls  /dev/sdc*
/dev/sdc  /dev/sdc1
% sudo eject /dev/sdc
% ls  /dev/sdc*
/dev/sdc

Remarque qui /dev/sdc1a disparu.


1
Jamais essayé avec des bandes ( mt rewofflest plus pratique car il rembobine aussi), mais il ne fait travailler avec les lecteurs de disquettes à moteur comme ceux qu'on trouve sur les anciens Mac et stations de travail Sun.
Alexios

@Alexios intéressants.
Renan

3

Dans la ligne de commande osx, vous devez utiliser diskutilLABEL est l’étiquette de votre lecteur USB.

diskutil eject /Volumes/<LABEL>

2

udisks --detach /dev/sdXoù (X) est la dernière lettre de votre périphérique USB. Cela fonctionne bien sur n'importe quel système Linux.


Votre réponse est correcte, même si elle est peut-être un peu courte. Je suggérerais de développer davantage: ce que fait cette commande, comment, pourquoi est-ce que vous suggérez, etc.
user259412 Le

0

OK, je vais essayer de mieux l'expliquer:

La commande udisks supprime et éteint complètement tout périphérique USB monté ou connecté dans la commande de démontage du système, il suffit de démonter la partition, c.-à-d.: dev / sdb1 ou autre chose, mais que le port USB est toujours présent dans le système.

Donc ce n’est pas la même chose de démonter, éjecter et détacher

udisks = éteindre l'USB

umount = démontez simplement la partition et non la clé USB entière

éjecter = identique ou très proche de la commande umount

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.