LinuxForum.Fans
Тема

[Решено] Cтатические имена дисков

Автор: NioriX 13 сообщений 3642 просмотров
#36505

Задача такая, есть usb жестак и флешка. Жестак подлючен всегда (ибо на нем Linux). Получаем такую конфигурацию
1. Жестак в компе - sda
2. USB жестак- sdb
Но если в момен загрузки вставлена флешка то получаем другую конфигурацию
1. Жестак в компе - sda
2. Флешка - sdb
3. USB жестак- sdc

А надо что бы жестак был всегда sdb!
Если их поменять местами (всмысле воткнуть жестак на место флешки, а флешку на место жестака) все конечно же как надо.
Я так понимаю смотреть надо в сторону udev. Но с этим делом никогда не сталкивался, поетому немного непонятно что да как. Помогите решить задачку!

#36508

Дело не в монтировании тут и как все сделано, просто часто пишу на флешку LiveCD на флешку, а так как привык что она sdc несколько раз снес usb-жестак. Так что хочу подстраховаться и заодно разобраться...

#36509

Ну тогда по тем 2 ссылкам вполне достаточно информации, чтоб сделать их /dev/flash и /dev/harddisk, скажем smile

#36515

Еще один абсолютно тупой вопрос... udevinfo нет в системе, поиск ничего не дает... Где нарыть?

#36516

Система-то какая?

З.Ы. Странно, я тоже найти не могу :(

З.З.Ы. Не оно?
[console]server31 ~ # udevadm --help
Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]
info query sysfs or the udev database
trigger request events from the kernel
settle wait for the event queue to finish
control control the udev daemon
monitor listen to kernel and udev events
test simulation run[/console]

#36518

В подписе же написано! openSuse 11.2 smile

Смотрел вроде не оно...

#36520

Оно, оно. Синтаксис поменялся, естественно.
[console]
server31 ~ # udevadm info --query env --name /dev/sda
UDEV_LOG=3
DEVPATH=/devices/pci0000:00/0000:00:09.0/host0/target0:0:0/0:0:0:0/block/sda
MAJOR=8
MINOR=0
DEVNAME=/dev/sda
DEVTYPE=disk
SUBSYSTEM=block
ID_ATA=1
ID_TYPE=disk
ID_BUS=ata
ID_MODEL=OCZ-VERTEX
ID_MODEL_ENC=OCZ-VERTEX\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
ID_REVISION=1.4
ID_SERIAL=OCZ-VERTEX_O07RD96N775KBLF210A0
ID_SERIAL_SHORT=O07RD96N775KBLF210A0
ID_ATA_WRITE_CACHE=1
ID_ATA_WRITE_CACHE_ENABLED=1
ID_ATA_FEATURE_SET_HPA=1
ID_ATA_FEATURE_SET_HPA_ENABLED=1
ID_ATA_FEATURE_SET_PM=1
ID_ATA_FEATURE_SET_PM_ENABLED=1
ID_ATA_FEATURE_SET_SECURITY=1
ID_ATA_FEATURE_SET_SECURITY_ENABLED=0
ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=0
ID_ATA_FEATURE_SET_SMART=1
ID_ATA_FEATURE_SET_SMART_ENABLED=1
ID_ATA_DOWNLOAD_MICROCODE=1
ID_ATA_SATA=1
ID_ATA_SATA_SIGNAL_RATE_GEN2=1
ID_ATA_SATA_SIGNAL_RATE_GEN1=1
ID_ATA_ROTATION_RATE_RPM=0
ID_SCSI_COMPAT=SATA_OCZ-VERTEX_O07RD96N775KBLF210A0
ID_PATH=pci-0000:00:09.0-scsi-0:0:0:0
ID_PART_TABLE_TYPE=dos
DEVLINKS=/dev/block/8:0 /dev/disk/by-id/ata-OCZ-VERTEX_O07RD96N775KBLF210A0 /dev/disk/by-id/scsi-SATA_OCZ-VERTEX_O07RD96N775KBLF210A0 /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:0:0
[/console]

#37177

Покурил это дело, но ведь udevinfo выдавал информацию пригодную для правил, не так ли?
ATTR{removable}=="0"
А тут что? или например для ID_MODEL надо писать ATTR{ID_MODEL}? Кстати по поводу выкладки выше там даже размера диска нет...

Кроме того udevinfo вышестоящие родительские устройства, а теперь руками?
И еще вопрос. Искал правила наименования жестаков (те что системные), не нашел, поиск на предмет слов sd[0-9]* sda ata ничего не дает, единственное что нащел kpartx где делаются линки к жестакам типа /dev/disk/by-id итд. Собственно где найти?

#43305
NioriX написал:
Покурил это дело, но ведь udevinfo выдавал информацию пригодную для правил, не так ли?
ATTR{removable}=="0"
А тут что? или например для ID_MODEL надо писать ATTR{ID_MODEL}? Кстати по поводу выкладки выше там даже размера диска нет...

Кроме того udevinfo вышестоящие родительские устройства, а теперь руками?
И еще вопрос. Искал правила наименования жестаков (те что системные), не нашел, поиск на предмет слов sd[0-9]* sda ata ничего не дает, единственное что нащел kpartx где делаются линки к жестакам типа /dev/disk/by-id итд. Собственно где найти?

man udevadm, опция --attribute-walk
попробуй, возможно это то что надо:
#udevadm info --name /dev/sdb1 --attribute-walk
Но вместе с тем вопрос: как в правилах определить файловую систему подключенного устройства?

#47800

Спасибо за совет!
Ок, добывил файл 00-my.rules
В нем прописал
KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{product}=="USB to ATA/ATAPI Bridge", NAME="sdb"

Вот параметры жеского:

text

udevadm info --name=/dev/sdc --attribute-walk

Udevadm info 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 '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host5/target5:0:0/5:0:0:0/block/sdc': KERNEL=="sdc" SUBSYSTEM=="block" DRIVER=="" ATTR{range}=="16" ATTR{ext_range}=="256" ATTR{removable}=="0" ATTR{ro}=="0" ATTR{size}=="625142448" ATTR{alignment_offset}=="0" ATTR{capability}=="52" ATTR{stat}==" 9153 3009 784527 289730 788 1717 19992 66058 0 51309 355778" ATTR{inflight}==" 0 0"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host5/target5:0:0/5:0:0:0': KERNELS=="5:0:0:0" SUBSYSTEMS=="scsi" DRIVERS=="sd" ATTRS{device_blocked}=="0" ATTRS{type}=="0" ATTRS{scsi_level}=="3" ATTRS{vendor}=="ST932032" ATTRS{model}=="5AS " ATTRS{rev}==" " ATTRS{tgps}=="0" ATTRS{state}=="running" ATTRS{timeout}=="30" ATTRS{iocounterbits}=="32" ATTRS{iorequest_cnt}=="0x26e4" ATTRS{iodone_cnt}=="0x26e4" ATTRS{ioerr_cnt}=="0x1" ATTRS{modalias}=="scsi:t-0x00" ATTRS{evt_media_change}=="0" ATTRS{queue_depth}=="1" ATTRS{queue_type}=="none" ATTRS{max_sectors}=="240"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host5/target5:0:0': KERNELS=="target5:0:0" SUBSYSTEMS=="scsi" DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host5': KERNELS=="host5" SUBSYSTEMS=="scsi" DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0': KERNELS=="2-5:1.0" SUBSYSTEMS=="usb" DRIVERS=="usb-storage" ATTRS{bInterfaceNumber}=="00" ATTRS{bAlternateSetting}==" 0" ATTRS{bNumEndpoints}=="02" ATTRS{bInterfaceClass}=="08" ATTRS{bInterfaceSubClass}=="06" ATTRS{bInterfaceProtocol}=="50" ATTRS{modalias}=="usb:v152Dp2329d0100dc00dsc00dp00ic08isc06ip50" ATTRS{supports_autosuspend}=="0" ATTRS{interface}=="MSC Bulk-Only Transfer"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5': KERNELS=="2-5" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{configuration}=="USB Mass Storage" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bmAttributes}=="c0" ATTRS{bMaxPower}==" 2mA" ATTRS{urbnum}=="50069" ATTRS{idVendor}=="152d" ATTRS{idProduct}=="2329" ATTRS{bcdDevice}=="0100" ATTRS{bDeviceClass}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{bNumConfigurations}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{speed}=="480" ATTRS{busnum}=="2" ATTRS{devnum}=="4" ATTRS{version}==" 2.00" ATTRS{maxchild}=="0" ATTRS{quirks}=="0x0" ATTRS{authorized}=="1" ATTRS{manufacturer}=="JMicron" ATTRS{product}=="USB to ATA/ATAPI Bridge" ATTRS{serial}=="5E37D42FFFFF"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2': KERNELS=="usb2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{configuration}=="" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bMaxPower}==" 0mA" ATTRS{urbnum}=="50" ATTRS{idVendor}=="1d6b" ATTRS{idProduct}=="0002" ATTRS{bcdDevice}=="0206" ATTRS{bDeviceClass}=="09" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{bNumConfigurations}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{speed}=="480" ATTRS{busnum}=="2" ATTRS{devnum}=="1" ATTRS{version}==" 2.00" ATTRS{maxchild}=="6" ATTRS{quirks}=="0x0" ATTRS{authorized}=="1" ATTRS{manufacturer}=="Linux 2.6.31.12-0.2-desktop ehci_hcd" ATTRS{product}=="EHCI Host Controller" ATTRS{serial}=="0000:00:1d.7" ATTRS{authorized_default}=="1"

looking at parent device '/devices/pci0000:00/0000:00:1d.7': KERNELS=="0000:00:1d.7" SUBSYSTEMS=="pci" DRIVERS=="ehci_hcd" ATTRS{vendor}=="0x8086" ATTRS{device}=="0x293a" ATTRS{subsystem_vendor}=="0x1025" ATTRS{subsystem_device}=="0x013c" ATTRS{class}=="0x0c0320" ATTRS{irq}=="23" ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000003" ATTRS{local_cpulist}=="0-1" ATTRS{modalias}=="pci:v00008086d0000293Asv00001025sd0000013Cbc0Csc03i20" ATTRS{numa_node}=="0" ATTRS{enable}=="1" ATTRS{broken_parity_status}=="0" ATTRS{msi_bus}=="" ATTRS{companion}==""

looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""

После перезагрузки он как был sdc (а флешка sdb) так и остался... Чего то напортачил?

#50677
NioriX написал:
Спасибо за совет!
Ок, добывил файл 00-my.rules
В нем прописал
KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{product}=="USB to ATA/ATAPI Bridge", NAME="sdb"

После перезагрузки он как был sdc (а флешка sdb) так и остался... Чего то напортачил?

Получается, что система почему-то сначала видит флешку и присваивает ей первое свободное имя, коим и является sdb, а уж потом начинает срабатывать правило, прописаное в 00-my.rules, в котором usb жескому диску пытаются присвоить уже занятое имя. В итоге правило не срабатывает. Как вариант, в 00-my.rules засунуть еще одно правило, которое для флешки будет жестко присваивать имя sdc
НО: Зачем это нужно???? oO

#56446

ac0rn, Однако не совсем так... Правило не работало из за SUBSYSTEMS=="scsi" так как жестак usb, убрал это и О ЧУДО...

text
ls -l /dev/disk/by-id
итого 0
lrwxrwxrwx 1 root root  9 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116 -> ../../sda
lrwxrwxrwx 1 root root 10 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116-part5 -> ../../sda5
lrwxrwxrwx 1 root root  9 Июл  2 22:52 edd-int13_dev80 -> ../../sdb
lrwxrwxrwx 1 root root  9 Июл  2 22:52 edd-int13_dev81 -> ../../sda
lrwxrwxrwx 1 root root  9 Июл  2 22:52 edd-int13_dev82 -> ../../sdb
lrwxrwxrwx 1 root root  9 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116 -> ../../sda
lrwxrwxrwx 1 root root 10 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116-part5 -> ../../sda5
lrwxrwxrwx 1 root root  9 Июл  2 22:51 usb-Multiple_Card_Reader_058F63666433-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-Multiple_Card_Reader_058F63666433-0:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0-part1 -> ../../sdb
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0-part2 -> ../../sdb
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0-part3 -> ../../sdb

И жестак и все его разделы теперь sdb oO (за место sdb1 sdb2) да к тому же и флешка тоже sdb. Посмотрел и попробовал так
KERNEL=="sd*[!0-9]", ATTRS{product}=="USB to ATA/ATAPI Bridge", NAME="sdb"
Результат немного лучше:

text
ls -l /dev/disk/by-id
итого 0
lrwxrwxrwx 1 root root  9 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116 -> ../../sda
lrwxrwxrwx 1 root root 10 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Июл  3  2010 ata-WDC_WD3200BEVT-22ZCT0_WD-WXE208MY9116-part5 -> ../../sda5
lrwxrwxrwx 1 root root  9 Июл  2 22:52 edd-int13_dev80 -> ../../sdb
lrwxrwxrwx 1 root root  9 Июл  2 22:52 edd-int13_dev81 -> ../../sda
lrwxrwxrwx 1 root root  9 Июл  2 22:52 edd-int13_dev82 -> ../../sdb
lrwxrwxrwx 1 root root  9 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116 -> ../../sda
lrwxrwxrwx 1 root root 10 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Июл  3  2010 scsi-SATA_WDC_WD3200BEVT-_WD-WXE208MY9116-part5 -> ../../sda5
lrwxrwxrwx 1 root root  9 Июл  2 22:51 usb-Multiple_Card_Reader_058F63666433-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-Multiple_Card_Reader_058F63666433-0:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0-part1 -> ../../sdс1
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0-part2 -> ../../sdс2
lrwxrwxrwx 1 root root 10 Июл  2 22:51 usb-ST932032_5AS_5E37D42FFFFF-0:0-part3 -> ../../sdс3

но тоже не то, еще 5 минут работы мозгом и вот оно!

KERNEL=="sdb", NAME="sdc"
KERNEL=="sdb[0-9]", NAME="sdc%n"
KERNEL=="sd*[!0-9]", ATTRS{product}=="USB to ATA/ATAPI Bridge", NAME="sdb"
KERNEL=="sd*[0-9]", ATTRS{product}=="USB to ATA/ATAPI Bridge", NAME="sdb%n"

пока вопрос решен, эту тему можно закрыть.

Войдите или зарегистрируйтесь, чтобы ответить.