Articles of udev

Udev正在创造太多的设备

我为使用OpenEmbedded的vortexS86处理器构build了一个内核和根文件系统。 当它出现时,我在/dev目录中有数百个设备条目。 这包括如下项目: digi_ctl(0-255) pty(az)(0-f) ttyD(0-255) ttyMX(0-255) ..etc 我想弄清楚udev是否正在创build所有这些,如果是的话。 如果不是udev – 他们从哪里来? 我可以在/lib/udev/rules.d或/etc/udev/rules.d下find任何包含任何设备types引用的规则。 有任何想法吗?

udev属性不能在启动时设置

我正在使用udev在CentOS 6.6(2.6.32-504.el6.x86_64,udev 147)上为我的Intel I350 igb设置SR-IOV。 我修改了我在CentOS 7中使用的规则(3.10.0-123.el7.x86_64,udev 208)。 当我在CentOS 6.6上进行“udevadm test”时,规则匹配正确,并将sriov_numvfs属性设置为所需的数字,并相应地启用SR-IOV: # cat /etc/udev/rules.d/igbsriov.rules KERNEL=="0000:01:00.0", SUBSYSTEM=="pci", DRIVER=="igb", ATTR{vendor}=="0x8086", ATTR{device}=="0x1521", WAIT_FOR="/sys/bus/pci/devices/0000:01:00.0/sriov_numvfs", ATTR{sriov_numvfs}="7" 但是,当计算机重新启动时,直到我执行udevadm触发器时才设置sriov_numvfs属性 我可能会错过什么? 想法?

Linux udev持久性networking规则

我有一个Linux系统(Slackware Linux 13.0),有两个networking接口。 我们称之为NIC0和NIC1 我的目标是使NIC0在系统中显示为eth0。 我知道这可以通过将networking别名映射到networking接口的MAC地址的udev规则来实现。 在Slackware Linux中,文件/etc/udev/rules.d/70-persistent-net.rules包含这样的规则。 我的问题最棘手的部分是,我需要伪造NIC0的MAC地址。 我知道我可以使用以下命令dynamic更改networking接口的MAC地址: ifconfig eth0 hw ether <new MAC address> 你看到这个问题吗? 这假设networking接口已经build立。 所以我的问题是:如果我有一个适用于NIC1的udev规则(应该是以eth1为起始的,使用它的原始MAC地址),那么系统将另一个networking接口(NIC0)作为eth0就足够了默认? 这样我可以稍后改变它的MAC地址,在udev机器完成并且networking别名被提出之后。

当特定的磁盘被热插入时,我如何让Linux执行一个bash脚本?

我有一套硬盘驱动器可以进行异地备份。 当其中一个磁盘重新插入时,需要执行几个步骤,我已经将其放入了一个简单的bash脚本。 我想在其中一个磁盘热插拔时自动执行脚本。 理想情况下,我应该有一个磁盘ID的列表( /dev/disk/by-id/… ),以便应该触发脚本的磁盘; 当其中一个被插入时,脚本将被运行,并且特定磁盘的ID将作为参数被传入。 作为替代scheme,每个磁盘都有一个脚本的副本,并为每个磁盘运行每个脚本。 我正在运行Ubuntu Server 14.04 LTS,并且一直在浏览与USB驱动器有关的类似问题,并将udev和hotplug看作是我可能需要使用的两个系统,但希望有人能够指向我为我的需求提供一个特定的简洁解决scheme。

从容器内部调用lvcreate会挂起

我运行一个容器。 它具有所有function,并从根目录(除/proc )挂载所有目录。 当我从里面调用lvcreate时,我得到: # lvcreate -v -L104857600B -n vol1 default Finding volume group "default" Archiving volume group "default" metadata (seqno 17). Creating logical volume vol1 Creating volume group backup "/etc/lvm/backup/default" (seqno 18). Activating logical volume "vol1". activation/volume_list configuration setting not defined: Checking only host tags for default/vol1 Creating default-vol1 Loading default-vol1 table (252:4) Resuming […]

如何编写持久networking名称的规则?

我知道一个进程根据/lib/udev/rules.d/75-persistent-net-generator.rules中的规则生成持久性网卡名称。 我也知道如何完全禁用这个过程,一个简单的 echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules 但我读过我也可以写我自己的规则文件给这个接口一个名字 – 持久化规则生成器忽略了接口,如果一个名字已经设置了“(/etc/udev/rules.d/README确认这个有可能)。 你能提供关于如何编写这些规则的说明和/或例子吗? (我主要关心Debian / Ubuntu,而CentOS则less一些)。 在我的情况下,我想添加如下规则: 具有MAC A或B的卡应该被命名为eth0 MAC C或D卡应该被命名为eth1 按照默认的命名scheme 作为为什么我要编写自定义规则的具体示例:我有两个相同的服务器,一个板载LAN和一个PCI LAN。 在硬件故障的情况下,我希望能够将硬盘从硬件#1移动到硬件#2,重要的是eth0继续指向板卡和eth1到PCI卡(没有人想在中间布线的HW故障恐慌)。 我目前的解决方法的工作,但是是很多工作[1],所以我想知道如果写自定义规则将允许我expression上述规则 [1]在硬件#1中安装操作系统,并保留/etc/udev/rules.d/70-persistent-net.rules的副本。 将磁盘移到HW#2并保留同一文件的第二个副本。 连接两个副本并手动编辑NAME =“ethX”部分。 用我的版本replace/etc/udev/rules.d/70-persistent-net.rules。 最后禁用自动创build一个新的70-persistent-net.rules使用 echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules

SATA磁盘被标识为SCSI

我有两个相同的服务器相同的硬件和克隆的Linux操作系统。 他们都有超微HBA AOC-S3008L。 然而,一台服务器将SATA磁盘标识为SCSI,而另一台则将其正确标识为SATA。 我的问题是,我需要使用libatasmart或udisks (而不是smartmontools )来监视磁盘的健康状况,但是由于在其中一个服务器上磁盘被标识为SCSI,所以我无法这样做。 如何让SystemB识别通过SATA总线连接的磁盘? 在BIOS中有没有特定的选项造成这种情况? SystemA(SATA as SATA): SystemA:~$ sudo udevadm info –query=property –name /dev/sda DEVLINKS=/dev/disk/by-id/ata-WDC_WD60EZRX-00MVLB1_WD-WX21D947N3HR /dev/disk/by-id/wwn-0x50014ee2b5d6e7b0 /dev/disk/by-path/pci-0000:01:00.0-sas-0x500304801eac0aa1-lun-0 DEVNAME=/dev/sda DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host0/port-0:0/expander-0:0/port-0:0:1/end_device-0:0:1/target0:0:0/0:0:0:0/block/sda DEVTYPE=disk ID_ATA=1 ID_ATA_DOWNLOAD_MICROCODE=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_PUIS=1 ID_ATA_FEATURE_SET_PUIS_ENABLED=0 ID_ATA_FEATURE_SET_SECURITY=1 ID_ATA_FEATURE_SET_SECURITY_ENABLED=0 ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=66306 ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=66306 ID_ATA_FEATURE_SET_SMART=1 ID_ATA_FEATURE_SET_SMART_ENABLED=1 ID_ATA_ROTATION_RATE_RPM=5700 ID_ATA_SATA=1 ID_ATA_SATA_SIGNAL_RATE_GEN1=1 ID_ATA_SATA_SIGNAL_RATE_GEN2=1 ID_ATA_WRITE_CACHE=1 ID_ATA_WRITE_CACHE_ENABLED=1 ID_BUS=ata ID_MODEL=WDC_WD60EZRX-00MVLB1 ID_MODEL_ENC=WDC\x20WD60EZRX-00MVLB1\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ID_PART_TABLE_TYPE=gpt ID_PATH=pci-0000:01:00.0-sas-0x500304801eac0aa1-lun-0 ID_PATH_TAG=pci-0000_01_00_0-sas-0x500304801eac0aa1-lun-0 ID_REVISION=80.00A80 ID_SERIAL=WDC_WD60EZRX-00MVLB1_WD-WX21D947N3HR ID_SERIAL_SHORT=WD-WX21D947N3HR ID_TYPE=disk […]

在Ubuntu的udev规则

我在Ubuntu 12.04中为我的APC UPS设置了一些udev规则,并且使用了包含的*-net.rules作为参考。 当我在我的-ups.rules使用ATTR{}==""匹配时,虽然它不起作用,但我不得不切换到ATTRS{}==""才能使它工作。 现在我想知道: 系统内置的eth0和eth1 udev规则是否被破坏? 他们应该使用ATTRS而不是ATTR ? 我将如何检查以确保他们正在工作? 我如何甚至列出networking设备的ATTRS ? 我无法find运行udevadm的设备节点。

udev规则执行2次

我已经写了一个这样的udev规则: SUBSYSTEM=="usb", ACTION=="add", RUN+="//root/usbmon/usb add %b" SUBSYSTEM=="usb", ACTION=="remove", RUN+="//root/usbmon/usb remove %b" 现在这个USB脚本发送电子邮件每当USB连接和删除。 但问题是每次发送2封电子邮件。 这意味着规则正在执行2次。 这是我在日志中得到的 Apr 26 14:52:00 box2 sendEmail[3374]: Email was sent successfully! USB Added: Email sent to [email protected] Using Udev Rule at 04-26-14-52-00. Apr 26 14:52:00 box2 sendEmail[3394]: Email was sent successfully! USB Added: Email sent to [email protected] Using Udev Rule at 04-26-14-52-00. […]

通过USB连接设备时执行命令

我目前有一个系统,将我的Linux服务器备份到/media/usb上的USB存储设备上。 这一切正常工作。 但是,我实际上有两个驱动器,我们试图每天交换。 有没有logging当USB设备插入时的日志logging和使用sendmail或类似的方式发送电子邮件给pipe理员如果驱动器尚未交换3天以上的方式?