Toto je chování, které mám na svém systému Ubuntu Lucid:
Když připojím svůj USB flash/thumbdrive, který má dva oddíly, systém hlásí:
$ 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že pouze oddíly mají /dev/disk/by-uuid
; zatímco disk i oddíly mají (různé) /dev/disk/by-id
.
Nyní, když kliknu levým tlačítkem myši na některou z položek oddílu v apletu Disk Mounter na ploše Gnome2 v Lucid, dostanu pouze dvě položky:„Otevřít“ nebo „Vysunout“ (jak je uvedeno v [ŘEŠENÉ] Jak znovu připojit usb disk s nautilem v lynx?, z odpovědi @Thomas s odkazem na 16_hide_unmount.patch). Také palimpsest
zde jsou zobrazeny dva oddíly disku.
Když kliknu na Vysunout na jednom z oddílů - oba zmizí; v tomto okamžiku palimpsest
zobrazí disk, ale žádné diskové oddíly, a místo toho zprávu "Nenalezeno žádné médium"; také:
$ 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že, jak je zmíněno v komentáři @ultrasawblade, disk tam skutečně je, ale oddíly ne - i když si myslím, že bych oddíly potřeboval jako zařízení , aby bylo mount
.
Také stejné chování jako levé kliknutí + "Vysunout" v grafickém uživatelském rozhraní pro stolní počítače, mohu se dostat do terminálu pomocí sudo eject /dev/sdb
. Všimněte si, že lze také otevřít palimpsest
, odtud klikněte na každý ze dvou oddílů a klikněte na „Odpojit svazek“ – v tomto okamžiku budou ikony oddílů stále zobrazí se v apletu Disk Mounter, ale bude označeno jako nepřipojené; a pak lze udělat sudo udisks --detach /dev/sdb
:tím zmizí ikony z apletu Disk Mounter - ale také /dev/sdb
zařízení již nebude v systému přítomno (nicméně lsusb
stále zobrazí zařízení)!
Po dlouhém hledání odpovědi (vyzkoušeno věci z udevadm monitor --environment
během připojení a odpojení s replikací všech akcí pomocí udevadm trigger
, abychom se podívali na to, co je BLKRRPART
ioctl ano), bez jakéhokoli úspěchu - konečně jsem narazil na Jak znovu připojit USB klíč bez vyjmutí a opětovného vložení - Ubuntu/Debian, který má odpověď:
sudo eject -t /dev/sdb
Po spuštění tohoto příkazu se oba oddíly znovu objeví v apletu Disk Mounter - bez odpojení/znovu zasunutí USB klíče!! To je ještě podivnější, protože pokud čtete man eject
:
-t With this option the drive is given a CD-ROM tray close command.
Not all devices support this command.
... nikdy byste nečekali, že je použitelný pro USB Flash/Thumb disk! (A dokonce jsem se pokusil podívat do sys-utils/eject.c a nevidím nic zřejmého :)
)
Samozřejmě, pokud sudo udisks --detach /dev/sdb
byl spuštěn dříve, pak /dev/sdb
nebude existovat, takže eject -t /dev/sdb
selže s eject: unable to find or open device for: '/dev/sdb'
. V takovém případě dojde k vypnutí napájení USB, jak je uvedeno v #7457 Jak znovu připojit logicky odpojené zařízení USB? pomohl mi zotavit se:
$ 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 způsobilo, že se ikony oddílů znovu zobrazí v apletu Disk Mounter, přímo jako připojené; pro nalezení správné adresy zkuste, když je disk připojený:
$ 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
Z mé zkušenosti v Ubuntu, když „vysunete“ USB klíčenku z Nautilus, zařízení skutečně zmizí ze systému. Nejsem si jistý, proč tomu tak je, ale ani Nautilus, ani příkazový řádek to nemohou vrátit. Myslím, že logika je taková, že jakmile vysunete USB flash disk, nechcete jej zpět, ale chystáte se ho odpojit.
Způsob, jak to obejít (v případě potřeby), je pomocí umount
místo Nautila. Můžete také zavolat sync
k vyprázdnění vyrovnávacích pamětí souborového systému na disk.
Právě jsem našel vlákno, které má více informací:http://ubuntuforums.org/showthread.php?t=1477247
Takže v zásadě buď a) Znovu sestavte nautilus ze zdroje bez této opravy (a udržujte jej aktuální, když aktualizujete svůj systém...) nebo b) použijte jiného správce souborů (alespoň při odpojování ^^).
Na systémech založených na Debianu byste měli být schopni udělat alespoň toto:
- zjistit, jaké by mělo být písmeno jednotky... Jako příklad zde řeknu /dev/sdb.
- Dvojitým vysunutím písmene „would be“ zařízení efektivně znovu zapněte.
- Zisk!
Funguje to, protože... magie.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb