Задача такая, есть usb жестак и флешка. Жестак подлючен всегда (ибо на нем Linux). Получаем такую конфигурацию
1. Жестак в компе - sda
2. USB жестак- sdb
Но если в момен загрузки вставлена флешка то получаем другую конфигурацию
1. Жестак в компе - sda
2. Флешка - sdb
3. USB жестак- sdc
А надо что бы жестак был всегда sdb!
Если их поменять местами (всмысле воткнуть жестак на место флешки, а флешку на место жестака) все конечно же как надо.
Я так понимаю смотреть надо в сторону udev. Но с этим делом никогда не сталкивался, поетому немного непонятно что да как. Помогите решить задачку!
[Решено] Cтатические имена дисков
udev, udev.
Только вот зачем вам это? Может монтировать их по ID или по UUID? И udev тогда копать не надо.
Если все же удав, то взгляните хоть тут - http://rus-linux.net/lib.php?name=MyLDP/sys-conf/udev.html
Или тут - http://unixforum.org/index.php?showtopic=9712
Дело не в монтировании тут и как все сделано, просто часто пишу на флешку LiveCD на флешку, а так как привык что она sdc несколько раз снес usb-жестак. Так что хочу подстраховаться и заодно разобраться...
Ну тогда по тем 2 ссылкам вполне достаточно информации, чтоб сделать их /dev/flash и /dev/harddisk, скажем smile
Еще один абсолютно тупой вопрос... udevinfo нет в системе, поиск ничего не дает... Где нарыть?
Система-то какая?
З.Ы. Странно, я тоже найти не могу :(
З.З.Ы. Не оно?
[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]
В подписе же написано! openSuse 11.2 smile
Смотрел вроде не оно...
Оно, оно. Синтаксис поменялся, естественно.
[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]
Покурил это дело, но ведь udevinfo выдавал информацию пригодную для правил, не так ли?
ATTR{removable}=="0"
А тут что? или например для ID_MODEL надо писать ATTR{ID_MODEL}? Кстати по поводу выкладки выше там даже размера диска нет...
Кроме того udevinfo вышестоящие родительские устройства, а теперь руками?
И еще вопрос. Искал правила наименования жестаков (те что системные), не нашел, поиск на предмет слов sd[0-9]* sda ata ничего не дает, единственное что нащел kpartx где делаются линки к жестакам типа /dev/disk/by-id итд. Собственно где найти?
Покурил это дело, но ведь 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
Но вместе с тем вопрос: как в правилах определить файловую систему подключенного устройства?
Спасибо за совет!
Ок, добывил файл 00-my.rules
В нем прописал
KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{product}=="USB to ATA/ATAPI Bridge", NAME="sdb"
Вот параметры жеского:
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) так и остался... Чего то напортачил?
Спасибо за совет!
Ок, добывил файл 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
ac0rn, Однако не совсем так... Правило не работало из за SUBSYSTEMS=="scsi" так как жестак usb, убрал это и О ЧУДО...
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"
Результат немного лучше:
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"
пока вопрос решен, эту тему можно закрыть.