Як знову встановити USB-накопичувач після від'єднання від Nautilus, не відключаючи його?


25

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


3
USB-пристрій логічно відключений (має бути повідомлення про це, щоб ваші ядра журнали). У ньому більше не буде /devзапису, і IIRC не з’явиться в lsusbжодному із них. Я не знаю, чи є спосіб відновити його.
Жиль "ТАК - перестань бути злим"

Це питання дуже схоже на: superuser.com/questions/1163375/…
Денніс Бензінгер

Відповіді:


8

З мого досвіду роботи в Ubuntu, коли ви "виймаєте" USB-накопичувач зсередини Nautilus, пристрій фактично зникає з системи. Я не впевнений, чому це так, але ні Nautilus, ні командний рядок не можуть його повернути. Я думаю, що логіка полягає в тому, що коли ви виймаєте USB-накопичувач, ви не хочете його повернути назад, але збираєтесь відключити його.

Те, як я обіймаю це (коли потрібно), використовую umountзамість Nautilus. Ви також можете просто зателефонувати, syncщоб передати буфер файлової системи на диск.

Щойно знайшли нитку, яка містить додаткову інформацію: http://ubuntuforums.org/showthread.php?t=1477247

Отже, в основному або a) Перебудуйте nautilus з джерела без цього виправлення (і оновлюйте його під час оновлення системи ...) або b) використовуйте інший файловий менеджер (принаймні, при відключенні ^^).


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(що, мабуть, трапляється тут), симпосилання застаріле і не може використовуватися для повторного монтажу.
Вказані вуха

16

Це поведінка в моїй системі Ubuntu Lucid:

Коли я підключаю свій USB flash / thumbdrive, який має два розділи, система звітує:

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

Тепер, якщо я клацну лівою кнопкою миші на будь-якій із записів розділу в аплеті програми «Диск Горитель» на робочому столі Gnome2 у Lucid, я отримаю лише дві записи: «Відкрити» або «Витягнути» (як зазначено у [ВІРШЕНО]) Як перерахувати usb-накопичувач з nautilus у рисі?, з відповіді @Thomas (посилаючись на 16_hide_unmount.patch ). Також palimpsestтут показані два розділи для диска.

Коли я натискаю кнопку "Витягнути" на будь-якому з розділів - вони обоє зникають; в цей момент palimpsestпоказує диск, але не розділи, а натомість повідомлення "Не знайдено носія"; також:

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

Крім того, та сама поведінка, що і клацнути лівою кнопкою миші + "Вийняти" в графічному інтерфейсі робочого столу, я можу потрапити в термінал з sudo eject /dev/sdb. Зауважте, що можна також відкрити palimpsest, звідти натиснути на кожен з двох розділів і натиснути "Відключити гучність" - у цей момент піктограми для розділів все ще відображатимуться в аплеті програми для встановлення дисків, але будуть відмічені як відключені; і тоді можна зробити 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

Після запуску цієї команди - два розділи знову з’являться в аплеті програми «Диск Горитель» - без відключення / повторного підключення USB-ключа !! Це все чуже, бо якщо ти читаєш man eject:

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

... Ви ніколи не очікували, що це застосовно до флеш-накопичувача USB! (І я навіть спробував розглянути 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'

Це призвело до того, що піктограми розділів знову відображаються в аплеті програми для встановлення диска, безпосередньо як встановлено; щоб знайти потрібну адресу, спробуйте, поки диск встановлений:

$ 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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.