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?
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?
Antworten:
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 umount
anstelle 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 ^^).
/dev/disk/by-id
Sie, ob das Gerät wirklich weg ist. Ich wette, es ist nicht und kann von dort mit einem mount
Befehl wieder montiert werden .
/dev/disk/by-id
enthä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 --eject
nicht mehr verwendet wird (was hier vermutlich passiert), ist der Symlink veraltet und kann nicht zum erneuten Mounten verwendet werden.
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 palimpsest
hier zwei Partitionen für die Festplatte angezeigt.
Wenn ich auf eine der Partitionen klicke, verschwinden beide. An dieser Stelle wird palimpsest
die 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 palimpsest
der 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/sdb
Gerät ist nicht mehr auf dem System vorhanden (es lsusb
wird jedoch weiterhin das Gerät angezeigt)!
Nachdem udevadm monitor --environment
ich 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 BLKRRPART
ioctl 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/sdb
es zuvor ausgeführt wurde, ist es natürlich /dev/sdb
nicht vorhanden, also eject -t /dev/sdb
scheitert 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
eject -t /dev/<DEVICE>
.
Zumindest auf Debian-basierten Systemen sollte dies möglich sein:
Das funktioniert, weil ... Magie.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
/dev
Eintrag mehr geben und IIRC wird auch nicht angezeigtlsusb
. Ich weiß nicht, ob es eine Möglichkeit gibt, die Verbindung wiederherzustellen.