Например, у вас есть внешний USB HDD и внешняя же флэшка. В зависимости от того, в каком порядке их втыкать, у них будут разные имена. Например, у одного /dev/sda, у другого /dev/sdb. Или наоборот. Что еще хуже, диск может быть разбит на разделы, и у него надо монтировать /dev/sd?1, а флэшка используется вся целиком, как дискета, и у нее надо монтировать собственно /dev/sd?.
Или, скажем, сетевые карты при загрузке обнаруживаются в разном порядке, и получается, что eth1 - это иногда wifi, а иногда firewire. А иногда наоборот.
В результате настраивать точки монтирования или параметры сетевых интерфейсов становится очень неудобно. Но есть выход.
Подключаем диск, смотрим в /var/log/messages, как его нынче назвали. Предположим, sda. И на нем есть раздел sda1.
Запускаем
и видим что-то вроде:
Выбираем из этой кучки параметров что-нибудь достаточно уникальное. Например, размер.
Создаем файл /etc/udev/rules.d/10_local.rules, в который пишем
Проверяем:
Если в выдаче есть строчка
значит, все хорошо. Если не появилась, ищем ошибку в параметрах проверки.
Перегружать машину после этого не обязательно, правила начинают действовать сразу. Достаточно отключить диск и подключить его обратно - и магическим образом появится /dev/usbdisk, который отныне можно смело использовать в /etc/fstab.
Для дисков, которые используются целиком, без разбивки на разделы (типично для флэшек с FAT), удобно проверять ATTRS{vendor}, ATTRS{model}, ATTRS{rev} и другие более уникальные вещи, чем размер.
То же самое можно делать и для сетевых карт - у них уникальным параметром является MAC-адрес. Учтите, что в правилах для udev буквы в мак-адресах надо писать маленькими, тогда как ifconfig показывает их большими.
Например:
Отныне проводной интерфейс всегда будет называться lan, wifi-интерфейс - wlan, а firewire - eth1394, и они больше не перепутаются.
А еще можно при повялении девайса выполнять некоторые команды, например, поднимать bluetooth'ный интерфейс, если он почему-то не поднимается сам.
Ну и так далее - аудиокарты, принтеры, фотокамеры...
А как в такой же ситуации явно назначить букву для диска или точку монтирования в Windows - я не знаю.
Или, скажем, сетевые карты при загрузке обнаруживаются в разном порядке, и получается, что eth1 - это иногда wifi, а иногда firewire. А иногда наоборот.
В результате настраивать точки монтирования или параметры сетевых интерфейсов становится очень неудобно. Но есть выход.
Подключаем диск, смотрим в /var/log/messages, как его нынче назвали. Предположим, sda. И на нем есть раздел sda1.
Запускаем
# udevinfo -a -p /sys/block/sda/sda1
и видим что-то вроде:
looking at device '/block/sda/sda1':
KERNEL=="sda1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{stat}==" 89 178 0 0"
ATTR{size}=="195366402"
ATTR{start}=="63"
ATTR{dev}=="8:1"Выбираем из этой кучки параметров что-нибудь достаточно уникальное. Например, размер.
Создаем файл /etc/udev/rules.d/10_local.rules, в который пишем
KERNEL=="sd?1", SUBSYSTEM=="block", ATTR{size}=="195366402", SYMLINK+="usbdisk"Проверяем:
# udevtest /sys/block/sda/sda1
Если в выдаче есть строчка
udev_node_add: creating symlink '/dev/usbdisk' to 'sda1'
значит, все хорошо. Если не появилась, ищем ошибку в параметрах проверки.
Перегружать машину после этого не обязательно, правила начинают действовать сразу. Достаточно отключить диск и подключить его обратно - и магическим образом появится /dev/usbdisk, который отныне можно смело использовать в /etc/fstab.
Для дисков, которые используются целиком, без разбивки на разделы (типично для флэшек с FAT), удобно проверять ATTRS{vendor}, ATTRS{model}, ATTRS{rev} и другие более уникальные вещи, чем размер.
То же самое можно делать и для сетевых карт - у них уникальным параметром является MAC-адрес. Учтите, что в правилах для udev буквы в мак-адресах надо писать маленькими, тогда как ifconfig показывает их большими.
Например:
KERNEL=="eth*", SYSFS{address}=="00:0b:5d:xx:xx:xx", NAME="lan"
KERNEL=="eth*", SYSFS{address}=="00:0e:35:xx:xx:xx", NAME="wlan"
KERNEL=="eth*", SYSFS{address}=="00:00:0e:10:01:xx:xx:xx", NAME="eth1394"Отныне проводной интерфейс всегда будет называться lan, wifi-интерфейс - wlan, а firewire - eth1394, и они больше не перепутаются.
А еще можно при повялении девайса выполнять некоторые команды, например, поднимать bluetooth'ный интерфейс, если он почему-то не поднимается сам.
KERNEL=="hci*", RUN+="/usr/sbin/hciconfig %k up".
Ну и так далее - аудиокарты, принтеры, фотокамеры...
А как в такой же ситуации явно назначить букву для диска или точку монтирования в Windows - я не знаю.
no subject
Винда, как обычно, всё делает сама ;)
В Disk Management назначить нужному устройству нужную букву, при следующем подключении она будет ему молча выдаваться. Например, постоянно используемая USB-флэшка у меня висит на K:, и потому с временно подключаемыми флэшками, плеером и прочей фигнёй никак не интерферирует — им винда даёт первую свободную букву (F:).
no subject
no subject
Для флэшек — ХЗ, вероятно, тоже.
no subject
no subject
no subject
P.S. А в FAT'е она где хранится?
no subject
А в фате она нигде не хранится. Разве что в регистри.
у венды
no subject
не только
no subject
MOUNTVOL - Creates, deletes, or lists a volume mount point.
\\?\Volume{dbe6bf74-07b1-11db-8cd9-000c6e40997a}\
N:\
это мой ипод. монтировать можно по этому UUID.
это он отмонтирован:
\\?\Volume{dbe6bf74-07b1-11db-8cd9-000c6e40997a}\
*** NO MOUNT POINTS ***
монтируем:
O:\>mountvol o:\ipod \\?\Volume{dbe6bf74-07b1-11db-8cd9-000c6e40997a}\
смотрим - смонтирован:
\\?\Volume{dbe6bf74-07b1-11db-8cd9-000c6e40997a}\
O:\ipod\
не совсем по теме, но вдруг пригодиться.
P.S. не пробуйте отмонтировать на win2000 системный диск, на XP/2k3 вроде можно, перемонтирует :)
no subject
но в целом, спасибо, да - у меня руки не доходили почитать FM на эту тему
no subject
no subject
no subject
< SYSFS{dev}=="188:0"
---
> SYSFS{dev}=="188:1"
Так что различить можно!
no subject
То есть, различить-то их, понятное дело, можно, но определить, что конкретно этот - второй от пальма - нельзя.
Можно попробовать извратиться с запуском внешнего скрипта, который будет следить за количеством девайсов.. udev так тоже может
no subject
no subject
svu@sputnik:~$ diff usb0 usb1
8,9c8,9
< looking at device '/class/tty/ttyUSB0':
< KERNEL=="ttyUSB0"
---
> looking at device '/class/tty/ttyUSB1':
> KERNEL=="ttyUSB1"
11c11
< SYSFS{dev}=="188:0"
---
> SYSFS{dev}=="188:1"
13,14c13,14
< looking at device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/ttyUSB0':
< ID=="ttyUSB0"
---
> looking at device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/ttyUSB1':
> ID=="ttyUSB1"
no subject
no subject
А какие мысли будут по поводу скрипта?
no subject
no subject
no subject
Параметром туда передается ядреное имя девайса, а на выходе скрипт должен сгенерировать последовательность слов, разделенных пробелами. на которые потом можно ссылаться как %c{i}
no subject
no subject
no subject
no subject
no subject
А скажи
udevinfo -a -p `udevinfo -q path -n /dev/ttyUSB0`
и, соответственно,
udevinfo -a -p `udevinfo -q path -n /dev/ttyUSB1`
no subject
no subject
no subject
no subject
no subject
И для сетевых карт это точно не поможет.
no subject
USB-to-Serial, например.
no subject
udevinfo -a -p `udevinfo -q path -n /dev/ttyUSB0`
?
no subject
svu@tosha:~$ ls /dev/ttyUSB0
/dev/ttyUSB0
svu@tosha:~$ udevinfo -q path -n /dev/ttyUSB0
no record for 'ttyUSB0' in database
no subject
Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/class/tty/ttyUSB0': KERNEL=="ttyUSB0" SUBSYSTEM=="tty" DRIVER=="" ATTR{dev}=="188:0" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/ttyUSB0': KERNELS=="ttyUSB0" SUBSYSTEMS=="usb-serial" DRIVERS=="pl2303" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0': KERNELS=="2-1:1.0" SUBSYSTEMS=="usb" DRIVERS=="pl2303" ATTRS{modalias}=="usb:v067Bp2303d0300dc00dsc00dp00icFFisc00ip00" ATTRS{bInterfaceProtocol}=="00" ATTRS{bInterfaceSubClass}=="00" ATTRS{bInterfaceClass}=="ff" ATTRS{bNumEndpoints}=="03" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceNumber}=="00" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1': KERNELS=="2-1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{configuration}=="" ATTRS{product}=="USB-Serial Controller" ATTRS{manufacturer}=="Prolific Technology Inc." ATTRS{maxchild}=="0" ATTRS{version}==" 1.10" ATTRS{devnum}=="2" ATTRS{speed}=="12" ATTRS{bMaxPacketSize0}=="64" ATTRS{bNumConfigurations}=="1" ATTRS{bDeviceProtocol}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceClass}=="00" ATTRS{bcdDevice}=="0300" ATTRS{idProduct}=="2303" ATTRS{idVendor}=="067b" ATTRS{bMaxPower}=="100mA" ATTRS{bmAttributes}=="80" ATTRS{bConfigurationValue}=="1" ATTRS{bNumInterfaces}==" 1" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2': KERNELS=="usb2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{configuration}=="" ATTRS{serial}=="0000:00:1d.0" ATTRS{product}=="UHCI Host Controller" ATTRS{manufacturer}=="Linux 2.6.18-3-686 uhci_hcd" ATTRS{maxchild}=="2" ATTRS{version}==" 1.10" ATTRS{devnum}=="1" ATTRS{speed}=="12" ATTRS{bMaxPacketSize0}=="64" ATTRS{bNumConfigurations}=="1" ATTRS{bDeviceProtocol}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceClass}=="09" ATTRS{bcdDevice}=="0206" ATTRS{idProduct}=="0000" ATTRS{idVendor}=="0000" ATTRS{bMaxPower}==" 0mA" ATTRS{bmAttributes}=="e0" ATTRS{bConfigurationValue}=="1" ATTRS{bNumInterfaces}==" 1" looking at parent device '/devices/pci0000:00/0000:00:1d.0': KERNELS=="0000:00:1d.0" SUBSYSTEMS=="pci" DRIVERS=="uhci_hcd" ATTRS{broken_parity_status}=="0" ATTRS{enable}=="1" ATTRS{modalias}=="pci:v00008086d000027C8sv00008086sd0000544Ebc0Csc03i00" ATTRS{local_cpus}=="ff" ATTRS{irq}=="225" ATTRS{class}=="0x0c0300" ATTRS{subsystem_device}=="0x544e" ATTRS{subsystem_vendor}=="0x8086" ATTRS{device}=="0x27c8" ATTRS{vendor}=="0x8086" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""no subject
no subject
ATTRS{idVendor}=="067b"
Или у тебя их несколько?
no subject
Если ты такой умный
то почему строем не ходишто может объяснишь мне, из-за чего может быть такая засада? довольно часто происходит так: usb накопитель включил, устройство в dev появилось, но пока в него не ткнёшься чем нибудь - не появляются устройства под разделы. Ну т.е. /dev/sda есть, а /dev/sda1 - нет. И пока, например, mount /dev/sda не сделаешь - и не появится.Re: Если ты такой умный
Вот воткнул свой диск, так оно сразу и сказало:
Dec 12 22:37:14 kernel: SCSI device sda: 195371568 512-byte hdwr sectors (100030 MB)
Dec 12 22:37:14 kernel: sda: Write Protect is off
Dec 12 22:37:14 kernel: sda: sda1
Re: Если ты такой умный
пнёшь не полетит. :((
Re: Если ты такой умный
То есть, первый раз грузишь - видит стандартную PS/2-мышь. Выгружаешь-загружаешь - обнаруживается Synaptics touchpad. Иногда со второго раза тоже не обнаруживается, а только с третьего. Почему?
Re: Если ты такой умный
принудительно отключить поддержку обычной мыши.
P.S. Ты чего, обиделся чтоль? Я-ж на полном серьёзе спрашивал - я-то в
эту сторону вообще не копал, думал ты с такой проблемой сталкивался.
Собственно именно это и имел в виду под фразой "такой умный". Если
обидел - извини, не хотел.
Re: Если ты такой умный
Не, не обиделся, это я с ответной иронией :)
no subject
2) diskmgmt.msc
3) Для экстремалов :
HKLM\SYSTEM\MountedDevices
( http://support.microsoft.com/?kbid=307844 )
no subject