Wie kann ich einen USB-Stick nach dem Abmelden von Nautilus neu mounten, ohne ihn zu trennen?

25

Ich finde, um einen USB-Stick neu zu mounten, muss ich ihn physisch trennen und dann wieder anschließen. Wie kann ich das ohne solch anstrengende körperliche Handlungen tun?

Tshepang
quelle
3
Das USB-Gerät ist logisch getrennt (es sollte eine Meldung zu Ihren Kernel-Protokollen angezeigt werden). Es wird keinen /devEintrag mehr geben und IIRC wird auch nicht angezeigt lsusb. Ich weiß nicht, ob es eine Möglichkeit gibt, die Verbindung wiederherzustellen.
Gilles 'SO- hör auf böse zu sein'
Diese Frage ist sehr ähnlich zu: superuser.com/questions/1163375/…
Dennis Benzinger

Antworten:

8

Nach meiner Erfahrung in Ubuntu verschwindet das Gerät tatsächlich vom System, wenn Sie einen USB-Stick aus Nautilus "auswerfen". Ich bin mir nicht sicher, warum das so ist, aber weder Nautilus noch die Befehlszeile können es zurückbekommen. Ich denke, die Logik ist, dass Sie einen USB-Stick nach dem Auswerfen nicht mehr zurückhaben wollen, sondern ihn trennen werden.

Die Art und Weise, wie ich das umgehe (wenn nötig), ist die Verwendung von umountanstelle von Nautilus. Sie können auch einfach aufrufen sync, um die Dateisystempuffer auf die Festplatte zu kopieren.

Habe gerade einen Thread mit weiteren Informationen gefunden: http://ubuntuforums.org/showthread.php?t=1477247

Also im Grunde genommen entweder a) Nautilus aus dem Quellcode ohne diesen Patch neu erstellen (und auf dem neuesten Stand halten, wenn Sie Ihr System aktualisieren ...) oder b) einen anderen Dateimanager verwenden (zumindest beim Abmelden ^^).

Thomas
quelle
2
Überprüfen /dev/disk/by-idSie, ob das Gerät wirklich weg ist. Ich wette, es ist nicht und kann von dort mit einem mountBefehl wieder montiert werden .
LawrenceC
1
@ultrasawblade /dev/disk/by-identhält symbolische Links zu Gerätedateien in /dev, zum Beispiel /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb. Wenn das Gerät udisks --ejectnicht mehr verwendet wird (was hier vermutlich passiert), ist der Symlink veraltet und kann nicht zum erneuten Mounten verwendet werden.
PointedEars
16

Das ist das Verhalten, das ich auf meinem Ubuntu Lucid-System habe:

Wenn ich meinen USB-Stick mit zwei Partitionen einstecke, meldet das System Folgendes:

$ ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2

$ udisks --show-info /dev/sdb | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
  detected at:                 Mon 29 Apr 2013 02:16:50 PM CEST
--
  partition table:
    scheme:                    mbr
    count:                     2

$ udisks --show-info /dev/sdb1 | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0-part1
    by-id:                     /dev/disk/by-uuid/581E-EE0B
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1
  detected at:                 Mon 29 Apr 2013 04:24:25 PM CEST

$ udisks --show-info /dev/sdb2 | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0-part2
    by-id:                     /dev/disk/by-uuid/4A0E-A166
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part2
  detected at:                 Mon 29 Apr 2013 04:24:25 PM CEST

$ udevadm info --query=all --name=/dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb    
$ udevadm info --query=all --name=/dev/sdb1 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb/sdb1
$ udevadm info --query=all --name=/dev/sdb2 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb/sdb2
$ sudo partprobe /dev/sdb
$

Also haben nur Partitionen /dev/disk/by-uuid; während sowohl Festplatte als auch Partitionen (unterschiedlich) haben /dev/disk/by-id.

Wenn ich nun in Lucid mit der linken Maustaste auf einen der Partitionseinträge im Disk Mounter-Applet auf dem Gnome2-Desktop klicke, werden nur zwei Einträge angezeigt: "Öffnen" oder "Auswerfen" (wie im Abschnitt [Gelöst] beschrieben) Ein USB-Laufwerk mit Nautilus im Luchs (aus der Antwort von @Thomas , die sich auf ein 16_hide_unmount.patch bezieht ). Außerdem werden palimpsesthier zwei Partitionen für die Festplatte angezeigt.

Wenn ich auf eine der Partitionen klicke, verschwinden beide. An dieser Stelle wird palimpsestdie Festplatte, aber keine Partitionen angezeigt und stattdessen die Meldung "Kein Medium gefunden". ebenfalls:

$ ls /dev/sdb*
/dev/sdb

$ udisks --show-info /dev/sdb | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
  detected at:                 Mon 29 Apr 2013 02:16:50 PM CEST

$ udisks --show-info /dev/sdb1 | grep -A2 'partition table\|by-id'
$

$ udevadm info --query=all --name=/dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb
$ udevadm info --query=all --name=/dev/sdb1 | grep DEVPATH
device node not found

$ sudo partprobe /dev/sdb
Error: Error opening /dev/sdb: No medium found

Wie im Kommentar von @ultrasawblade erwähnt , ist zwar die Festplatte vorhanden, aber nicht die Partitionen - obwohl ich denke, ich würde die Partitionen als Geräte benötigen , um mount.

Auch das gleiche Verhalten wie Linksklick + "Auswerfen" in der Desktop-GUI kann ich im Terminal mit bekommen sudo eject /dev/sdb. Beachten Sie, dass Sie auch eine palimpsestder beiden Partitionen öffnen können , indem Sie von dort aus auf jede der beiden Partitionen klicken und auf "Unmount Volume" klicken. Zu diesem Zeitpunkt werden die Symbole für die Partitionen weiterhin im Disk Mounter-Applet angezeigt, werden jedoch als nicht gemountet gekennzeichnet. und dann kann man es tun sudo udisks --detach /dev/sdb: Dadurch werden die Symbole aus dem Disk Mounter-Applet ausgeblendet - aber auch das /dev/sdbGerät ist nicht mehr auf dem System vorhanden (es lsusbwird jedoch weiterhin das Gerät angezeigt)!

Nachdem udevadm monitor --environmentich einiges nach der Antwort gesucht hatte (probierte Dinge während des Ein- und Aussteckens, mit dem Replizieren aller Aktionen über udevadm trigger, um zu sehen, was der BLKRRPARTioctl macht), ohne Erfolg - stieß ich schließlich auf How To Remount A USB Stick Without Removing And Reinserting - Ubuntu / Debian , das die Antwort hat:

sudo eject -t /dev/sdb

Nachdem dieser Befehl ausgeführt wurde, werden die beiden Partitionen erneut im Disk Mounter-Applet angezeigt, ohne dass der USB-Stick abgezogen oder wieder eingesteckt werden muss. Das ist alles der Fremde, denn wenn Sie lesen man eject:

   -t   With  this  option the drive is given a CD-ROM tray close command.
        Not all devices support this command.

... Sie würden nie erwarten, dass es für USB-Flash- / USB-Sticks geeignet ist! (Und ich habe sogar versucht, in sys-utils / eject.c nachzuschauen , und ich kann nichts Offensichtliches erkennen. :))

Wenn sudo udisks --detach /dev/sdbes zuvor ausgeführt wurde, ist es natürlich /dev/sdbnicht vorhanden, also eject -t /dev/sdbscheitert es mit eject: unable to find or open device for: '/dev/sdb'. In diesem Fall wird der USB- Aus- und Wiedereinschaltzyklus wie in # 7457 beschrieben fortgesetzt. Wie wird ein logisch getrenntes USB-Gerät wieder angeschlossen? hat mir geholfen, mich zu erholen:

$ sudo sh -c 'echo suspend > /sys/bus/usb/devices/1-2/power/level'
$ sudo sh -c 'echo auto > /sys/bus/usb/devices/1-2/power/level'

Dies führte dazu, dass die Symbole der Partitionen im Disk Mounter-Applet wieder direkt als gemountet angezeigt wurden. Um die richtige Adresse zu finden, versuchen Sie, während der Datenträger eingehängt ist:

$ udevadm info --attribute-walk --name=/dev/sdb | grep "looking\|busnum\|devnum" | grep -B1 'busnum\|devnum'
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2':
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="13"
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"

# the first (.../usb1/1-2) should be the right one, check bus/devnum:
$ lsusb -s 1:13
Bus 001 Device 013: ID 090c:1000 Feiya Technology Corp. Flash Drive

# looks good; check for symlinks in `sys/bus/usb/devices` as per "parent device" .../usb1/1-2
$ ls -la /sys/bus/usb/devices/ | grep "usb1/1-2"
lrwxrwxrwx 1 root root 0 2013-04-29 17:17 1-2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-2
lrwxrwxrwx 1 root root 0 2013-04-29 17:21 1-2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0

# so it should be /sys/bus/usb/devices/1-2; check if it has power/level:
$ ls /sys/bus/usb/devices/1-2/power/level 
/sys/bus/usb/devices/1-2/power/level
sdaau
quelle
1
tl; dr: Der Befehl zum erneuten "Einlegen" eines ausgeworfenen USB-Laufwerks lautet eject -t /dev/<DEVICE>.
Dennis Benzinger
4

Zumindest auf Debian-basierten Systemen sollte dies möglich sein:

  1. Finde heraus, wie der Laufwerksbuchstabe lauten soll ... Ich sage hier als Beispiel / dev / sdb.
  2. Werfen Sie den Laufwerksbuchstaben 'would be' zweimal aus, um das Gerät wieder einzuschalten.
  3. Profitieren!

Das funktioniert, weil ... Magie.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
Karl N. Redman
quelle