Как перемонтировать USB-флешку после отсоединения от Nautilus, не отключая ее?

25

Я обнаружил, что для того, чтобы заново смонтировать USB-накопитель, я должен физически отключить его, а затем снова подключить. Как я могу сделать это без таких утомительных физических действий?

tshepang
источник
3
USB-устройство логически отключено (должно появиться сообщение об этом в журналах вашего ядра). У него больше не будет /devзаписи, и IIRC также не появится lsusb. Я не знаю, есть ли способ восстановить это.
Жиль "ТАК - перестать быть злым"
Этот вопрос очень похож на: superuser.com/questions/1163375/…
Деннис Бенцингер,

Ответы:

8

Из моего опыта работы с Ubuntu, когда вы «извлекаете» USB-флешку из Nautilus, устройство фактически исчезает из системы. Я не уверен, почему это так, но ни Наутилус, ни командная строка не могут его вернуть. Я предполагаю, что логика заключается в том, что когда вы извлекаете USB-флешку, вы не хотите ее возвращать, но собираетесь ее отключить.

Я работаю над этим (когда это необходимо), используя umountвместо Наутилуса. Вы также можете просто позвонить, syncчтобы сбросить буферы файловой системы на диск.

Только что нашел тему, которая имеет больше информации: http://ubuntuforums.org/showthread.php?t=1477247

Так что в основном либо: а) пересоберите nautilus из исходного кода без этого патча (и обновляйте его при обновлении системы ...), либо б) используйте другой файловый менеджер (по крайней мере, при размонтировании ^^).

Томас
источник
2
Проверьте /dev/disk/by-idи посмотрите, действительно ли устройство исчезло. Могу поспорить, что это не так, и может быть перемонтирован оттуда с помощью mountкоманды.
LawrenceC
1
@ultrasawblade /dev/disk/by-idсодержит символические ссылки на файлы устройств в /dev, например /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb. Когда устройство пропало udisks --eject(что, как я предполагаю, происходит здесь), символическая ссылка устарела и не может быть использована для повторной установки.
PointedEars
16

Это поведение, которое я имею в моей системе Ubuntu Lucid:

Когда я подключаю флэш-накопитель USB с двумя разделами, система сообщает:

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

Итак, только разделы есть /dev/disk/by-uuid; в то время как диск и разделы имеют (разные) /dev/disk/by-id.

Теперь, если я щелкну левой кнопкой мыши по любой записи раздела в апплете Disk Mounter на рабочем столе Gnome2 в Lucid, я получу только две записи: «Открыть» или «Извлечь» (как указано в [РЕШЕНО]. Как перемонтировать USB-накопитель с nautilus в lynx ? , из ответа @Thomas , ссылающегося на 16_hide_unmount.patch ). Также palimpsestздесь показаны два раздела для диска.

Когда я нажимаю «Извлечь» на одном из разделов - они оба исчезают; в этот момент palimpsestпоказывается диск, но нет разделов, и вместо этого появляется сообщение «No media found»; также:

$ 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

Итак, как уже говорилось в комментарии по @ultrasawblade , на самом деле диск есть, но не разделы - хотя, я думаю , я бы нужны разделы как устройства для того, чтобы mount.

Кроме того, такое же поведение, как при щелчке левой кнопкой мыши по клавише «Eject» в графическом интерфейсе рабочего стола, я могу получить в терминале sudo eject /dev/sdb. Обратите внимание, что также можно открыть palimpsest, оттуда нажать на каждый из двух разделов и нажать «Размонтировать том» - в этот момент значки разделов все равно будут отображаться в апплете Disk Mounter, но будут отмечены как отключенные; и тогда можно сделать sudo udisks --detach /dev/sdb: это заставляет значки исчезать из апплета Disk Mounter, но /dev/sdbустройство больше не будет присутствовать в системе (однако оно lsusbвсе равно будет отображать устройство)!

После того, как я довольно долго искал ответ (пробовал что-то udevadm monitor --environmentво время подключения и отключения, с репликацией всех действий через udevadm trigger, чтобы посмотреть, что BLKRRPARTделает ioctl), но безуспешно - я, наконец, наткнулся на Как перемонтировать USB-флешку без извлечения и повторной установки - Ubuntu / Debian , на который есть ответ:

sudo eject -t /dev/sdb

После выполнения этой команды - два раздела снова появляются в апплете Disk Mounter - без отключения / повторного подключения USB-ключа !! Это все незнакомец, потому что если вы читаете man eject:

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

... вы никогда не ожидаете, что это применимо к USB Flash / Thumb drive! (И я даже попытался заглянуть в sys-utils / eject.c , и я не вижу ничего очевидного :))

Конечно, если sudo udisks --detach /dev/sdbон запускался ранее, то /dev/sdbне будет существовать, поэтому eject -t /dev/sdbпотерпит неудачу с eject: unable to find or open device for: '/dev/sdb'. В этом случае цикл питания USB, как указано в # 7457 Как повторно подключить логически отключенное устройство USB? помог мне выздороветь

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

Это привело к тому, что значки разделов снова отобразились в апплете Disk Mounter, прямо как смонтированные; чтобы найти правильный адрес, попробуйте, пока диск смонтирован:

$ 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
источник
1
tl; dr: команда «вставить» извлеченный USB-накопитель снова есть eject -t /dev/<DEVICE>.
Деннис Бензингер
4

В системах на основе Debian, по крайней мере, вы должны сделать это:

  1. выяснить, какой должна быть буква диска ... Я собираюсь сказать / dev / sdb здесь для примера.
  2. Дважды извлеките букву «будет», чтобы снова включить устройство.
  3. Прибыль!

Это работает, потому что ... магия.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
Карл Н. Редман
источник