Jak ponownie zamontować pamięć USB po odmontowaniu z Nautilus bez odłączania?

25

Uważam, że aby ponownie zamontować pamięć USB, muszę ją fizycznie odłączyć, a następnie podłączyć ponownie. Jak mogę to zrobić bez tak męczącego wysiłku fizycznego?

tshepang
źródło
3
Urządzenie USB jest logicznie odłączone (powinien pojawić się komunikat o tym, że twoje dzienniki jądra). Nie będzie już żadnego /devwpisu, a IIRC nie pojawi się w lsusbżadnym z nich. Nie wiem, czy jest jakiś sposób na ponowne połączenie.
Gilles: „Przestańcie być źli”,
To pytanie jest bardzo podobne do: superuser.com/questions/1163375/…
Dennis Benzinger

Odpowiedzi:

8

Z mojego doświadczenia w Ubuntu, kiedy „wysuwasz” pamięć USB z Nautilus, urządzenie faktycznie znika z systemu. Nie jestem pewien, dlaczego tak jest, ale ani Nautilus, ani wiersz poleceń nie mogą go odzyskać. Myślę, że logika jest taka, że ​​kiedy wyjmiesz pamięć USB, nie chcesz jej z powrotem, ale zamierzasz ją odłączyć.

Sposób na obejście tego (w razie potrzeby) polega na użyciu umountzamiast Nautilusa. Możesz także po prostu zadzwonić, syncaby opróżnić bufory systemu plików na dysk.

Właśnie znalazłem wątek, który zawiera więcej informacji: http://ubuntuforums.org/showthread.php?t=1477247

Więc w zasadzie albo: a) Odbuduj nautilusa ze źródła bez tej łatki (i aktualizuj go podczas aktualizacji systemu ...) lub b) użyj innego menedżera plików (przynajmniej podczas odmontowywania ^^).

Tomasz
źródło
2
Sprawdź /dev/disk/by-idi sprawdź, czy urządzenie naprawdę zniknęło. Założę się, że tak nie jest i można stamtąd ponownie zamontować mountkomendę.
LawrenceC,
1
@ultrasawblade /dev/disk/by-idzawiera na przykład dowiązania symboliczne do plików urządzeń . Kiedy urządzenie zniknie (co, jak zakładam, dzieje się tutaj), dowiązanie symboliczne jest nieaktualne i nie można go użyć do ponownego montażu. /dev/dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdbudisks --eject
PointedEars,
16

Takie zachowanie mam w moim systemie Ubuntu Lucid:

Po podłączeniu dysku flash USB / pendrive, który ma dwie partycje, system zgłasza:

$ 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
$

Tak więc tylko partycje mają /dev/disk/by-uuid; podczas gdy zarówno dysk, jak i partycje mają (różne) /dev/disk/by-id.

Teraz, jeśli kliknę lewym przyciskiem myszy dowolne pozycje partycji w aplecie Disk Mounter na pulpicie Gnome2 w Lucid, otrzymam tylko dwa wpisy: „Otwórz” lub „Wysuń” (jak wspomniano w [ROZWIĄZANY] Jak zamontować ponownie dysk USB z nautilusem w rysiu ? z odpowiedzi @ Thomas , odnoszący się do 16_hide_unmount.patch ). Tutaj również palimpsestpokazano dwie partycje dysku.

Kiedy kliknę przycisk Wysuń na jednej z partycji - obie znikną; w tym momencie palimpsestpokazuje dysk, ale nie ma partycji, a zamiast tego pojawia się komunikat „Nie znaleziono nośnika”; również:

$ 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

Tak więc, jak wspomniano w komentarzu @ultrasawblade , rzeczywiście dysk tam jest, ale nie ma partycji - chociaż myślę, że potrzebowałbym partycji jako urządzeń , aby to zrobić mount.

Również takie samo zachowanie jak kliknięcie lewym przyciskiem + „Wysuń” w graficznym graficznym interfejsie użytkownika, z którym mogę się połączyć sudo eject /dev/sdb. Zauważ, że można również otworzyć palimpsest, a następnie kliknąć każdą z dwóch partycji i kliknąć „Odinstaluj wolumin” - w tym momencie ikony partycji będą nadal wyświetlane w aplecie Disk Mounter, ale będą oznaczone jako odmontowane; i wtedy można zrobić sudo udisks --detach /dev/sdb: powoduje to zniknięcie ikon z apletu Disk Mounter - ale także /dev/sdburządzenie nie będzie już obecne w systemie (jednak lsusbnadal będzie wyświetlać urządzenie)!

Po dość długim poszukiwaniu odpowiedzi (wypróbowałem rzeczy udevadm monitor --environmentpodczas podłączania i odłączania, z replikacją wszystkich działań przez udevadm trigger, do sprawdzania, co BLKRRPARTrobi ioctl), bez powodzenia - w końcu natknąłem się na jak ponownie zamontować pamięć USB bez wyjmowania i ponownego wkładania - Ubuntu / Debian , który ma odpowiedź:

sudo eject -t /dev/sdb

Po uruchomieniu tego polecenia - dwie partycje pojawiają się ponownie w aplecie Disk Mounter - bez odłączania / ponownego podłączania klucza USB !! To wszystko jest dziwniejsze, ponieważ jeśli czytasz man eject:

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

... nigdy nie spodziewałbyś się, że ma to zastosowanie do pamięci USB Flash / Thumb! (Próbowałem nawet zajrzeć do sys-utils / eject.c i nie widzę niczego oczywistego :))

Oczywiście, jeśli sudo udisks --detach /dev/sdbzostał wcześniej uruchomiony, to /dev/sdbnie będzie istniał, więc eject -t /dev/sdbzawiedzie eject: unable to find or open device for: '/dev/sdb'. W takim przypadku cykl zasilania USB opisany w # 7457 Jak ponownie podłączyć logicznie odłączone urządzenie USB? pomógł mi odzyskać:

$ 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'

To sprawiło, że ikony partycji ponownie pokazały się w aplecie Disk Mounter, bezpośrednio jako zamontowane; aby znaleźć właściwy adres, spróbuj, gdy dysk jest zamontowany:

$ 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
źródło
1
tl; dr: Polecenie „włóż” ponownie wysunięty dysk USB to eject -t /dev/<DEVICE>.
Dennis Benzinger
4

Na systemach opartych na Debianie powinieneś być w stanie to zrobić:

  1. wymyśl, jaka powinna być litera napędu ... Chciałbym powiedzieć tutaj / dev / sdb na przykład.
  2. Dwukrotnie wysuń literę „będzie”, aby skutecznie ponownie włączyć urządzenie.
  3. Zysk!

To działa, ponieważ ... magia.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
Karl N. Redman
źródło