Я обнаружил, что для того, чтобы заново смонтировать USB-накопитель, я должен физически отключить его, а затем снова подключить. Как я могу сделать это без таких утомительных физических действий?
Я обнаружил, что для того, чтобы заново смонтировать USB-накопитель, я должен физически отключить его, а затем снова подключить. Как я могу сделать это без таких утомительных физических действий?
Ответы:
Из моего опыта работы с Ubuntu, когда вы «извлекаете» USB-флешку из Nautilus, устройство фактически исчезает из системы. Я не уверен, почему это так, но ни Наутилус, ни командная строка не могут его вернуть. Я предполагаю, что логика заключается в том, что когда вы извлекаете USB-флешку, вы не хотите ее возвращать, но собираетесь ее отключить.
Я работаю над этим (когда это необходимо), используя umount
вместо Наутилуса. Вы также можете просто позвонить, sync
чтобы сбросить буферы файловой системы на диск.
Только что нашел тему, которая имеет больше информации: http://ubuntuforums.org/showthread.php?t=1477247
Так что в основном либо: а) пересоберите nautilus из исходного кода без этого патча (и обновляйте его при обновлении системы ...), либо б) используйте другой файловый менеджер (по крайней мере, при размонтировании ^^).
/dev/disk/by-id
и посмотрите, действительно ли устройство исчезло. Могу поспорить, что это не так, и может быть перемонтирован оттуда с помощью mount
команды.
/dev/disk/by-id
содержит символические ссылки на файлы устройств в /dev
, например /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb
. Когда устройство пропало udisks --eject
(что, как я предполагаю, происходит здесь), символическая ссылка устарела и не может быть использована для повторной установки.
Это поведение, которое я имею в моей системе 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
eject -t /dev/<DEVICE>
.
В системах на основе Debian, по крайней мере, вы должны сделать это:
Это работает, потому что ... магия.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
/dev
записи, и IIRC также не появитсяlsusb
. Я не знаю, есть ли способ восстановить это.