November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Saturday, December 9th, 2006 01:24 pm
Например, у вас есть внешний USB HDD и внешняя же флэшка. В зависимости от того, в каком порядке их втыкать, у них будут разные имена. Например, у одного /dev/sda, у другого /dev/sdb. Или наоборот. Что еще хуже, диск может быть разбит на разделы, и у него надо монтировать /dev/sd?1, а флэшка используется вся целиком, как дискета, и у нее надо монтировать собственно /dev/sd?.
Или, скажем, сетевые карты при загрузке обнаруживаются в разном порядке, и получается, что 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 - я не знаю.
Tags:
Saturday, December 9th, 2006 01:34 pm (UTC)
ага, только, afaik, она это в бутблок устройства прописывает или куда-то там :)
Saturday, December 9th, 2006 01:47 pm (UTC)
Для винчестеров она хранит их серийный номер (он уникален для каждого диска) в реестре.
Для флэшек — ХЗ, вероятно, тоже.
Saturday, December 9th, 2006 01:49 pm (UTC)
гм. в случае с подтыканием диска с ntfs на другую машину были случаи, что он вставал на ту же букву диска, что и на предыдущей системе, а не на первую свободную
Sunday, December 10th, 2006 01:45 pm (UTC)
в нтфсе буква диска хранится где-то там в системной области нтфса.
Sunday, December 10th, 2006 01:56 pm (UTC)
Интересно, а что будет, если я воткну в одну машину два диска, у каждого из которых ранее была написана одна и та же буква?

P.S. А в FAT'е она где хранится?
Sunday, December 10th, 2006 02:06 pm (UTC)
Будет.. я думаю, будет пиздец. Но сейчас сюда прибегут евангелисты™, и всё разъяснят :)

А в фате она нигде не хранится. Разве что в регистри.
Friday, February 2nd, 2007 10:58 am (UTC)
есть в папке System Volume Information файлик MountPointManagerRemoteDatabase. вот там оно и хранит всякие точки монтирования для текущего тома. Плюс где-то ведет базу Removable Media как раз для сменных флешек, винтов, ленточек и т.д..