标签: udev

在 RHEL5 中更改 LVM LV 设备节点的所有者

第一次使用服务器故障,请原谅任何违反礼仪的行为。

我已经在服务器的本地存储中创建了几个 LVM2 逻辑卷,并且希望其中一个设备节点 - 而不是文件系统或挂载点 - 由 root:root 以外的用户/组拥有。

这几乎是一个默认的 RHEL5 服务器。我知道设备节点是在 LVM 扫描磁盘的 pv/vg/lvs 后在启动时动态创建的。我不太确定 udev、mapper 和 lvm 如何交互来创建这些节点,对于没有太多经验的人来说,配置文件规范有点神秘。

将会有更多的 lvs 需要替代权限,但我希望将卷组中的其他 lvs 保留在 root:root 中,并且只更改特定的。

谁能帮我解决这个问题?我已经用谷歌搜索了几个小时。

提前致谢,托尼


更新:

我通过以下方式实现了这一点。这可能是一种迂回的做事方式,但这只是一个暂时的环境(著名的遗言!)。哦,我可能还想删除打印到 /tmp/foo 的行。

[root@xxxxxxx rules.d]# **cat /etc/udev/rules.d/11-lvm.rules**
ACTION=="add|change", KERNEL=="dm-*", PROGRAM="/bin/sh -c /etc/udev/scripts/oracle_perms.sh"

[root@xxxxxxx rules.d]# **cat /etc/udev/scripts/oracle_perms.sh**
#!/bin/bash

echo "DEVPATH=$DEVPATH" >> /tmp/foo
MAJMIN=`cat /sys${DEVPATH}/dev`
echo "MAJMIN=$MAJMIN" >> /tmp/foo
MAJ=`echo ${MAJMIN} | awk -F: '{ print $1 }'`
MIN=`echo ${MAJMIN} | awk -F: '{ print $2 }'`
DEVNODE=`/sbin/dmsetup info -j ${MAJ} …
Run Code Online (Sandbox Code Playgroud)

linux hard-drive lvm udev

5
推荐指数
1
解决办法
4659
查看次数

Linux 控制台 - 以编程方式检测 USB 存储分配给哪个设备

每天早上 9 点,我们将外部 HD 插入我们的办公室服务器(始终连接到同一个 USB 端口)。
HD 每天都是新的,但都是由同一家制造商 (Freecom) 制造的。

每天凌晨 12 点,脚本运行将所有内容备份到 HD。
第一步是以这种方式安装 HD:

mount /dev/sdc1 /mnt/backup
Run Code Online (Sandbox Code Playgroud)

问题有时是设备文件不是 /dev/sdc1 而是其他内容(即 /dev/sdd1)。我仍然不知道为什么,因为我们没有插入任何其他东西,而且我们总是使用相同的端口。

所以我的问题是如何以非常安全的方式以编程方式检测正确的设备文件。到目前为止,我唯一的想法是 grep /dev/disk/by-id 目录的内容以从这一行中查找和提取 /dev/xxx :

lrwxrwxrwx 1 root root 10 Sep 24 11:03 usb-Freecom_ToughDrive_1A90102657FF-part1 -> ../../sdc1
Run Code Online (Sandbox Code Playgroud)

有什么更好的建议吗?对我的方式有任何顾虑吗?

我很惊讶 lsusb 怎么帮不了我那么多。

linux usb udev

5
推荐指数
1
解决办法
1940
查看次数

如何强制 mdadm 使用 udev 设备名称而不是 /dev/sdX

问题主要在标题中。

mdadm 和 /proc/mdstat 坚持按“传统”/dev/sdX 名称列出 md 成员。我想要的是让他们使用较新的 udev 设备名称(例如 /dev/disk/by-path 和 by-id)。

我已经将 /etc/mdadm/mdadm.conf 从

DEVICE partitions
Run Code Online (Sandbox Code Playgroud)

DEVICE /dev/disk/by-path/*
Run Code Online (Sandbox Code Playgroud)

但这似乎根本没有效果。

此外,阵列是使用旁路设备名称来创建的。

这是在 Ubuntu 11.10 上。

当前/proc/mdstat:

~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid5 sdi[4] sde[2] sdh[1] sdd[0]
      2929651200 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_]
      [=>...................]  recovery =  7.0% (69242720/976550400) finish=632.8min speed=23893K/sec

md0 : active raid5 sdb[0] sdg[4] sdc[2] sdf[1]
      2197228032 blocks super 1.2 …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu mdadm udev

5
推荐指数
1
解决办法
1467
查看次数

MD (RAID1) + LVM 上的 root 引导失败:udev 事件计时

全新安装的 Ubuntu Server 13.10 (x64) 从位于 md+lvm 的根卷启动时遇到问题。我现在已经找到了一个解决方案,但我想更多地了解正在发生的事情以及可能有哪些更好的解决方案。

由于这台机器的目标是试验 Xen(为了更好地了解商业虚拟机托管),所以这台机器是由我手头的零件组装而成的,具体来说:Q6600 + Asus P5QL Pro、1 TB 和 500 GB SATA 磁盘(尽管 500 GB 光盘仍在其他地方使用,但稍后会添加。)

1TB 磁盘有三个分区:sda1 与 500 GB 磁盘上的 sdb1 大小相等,sda2 是交换区,其余在 sda3 中。md0 是由 sda1+sdb1 组成的 RAID1 卷[1],是 LVM 可用的一个 PV。

Ubuntu 安装在这个 VG (vg_mir) 中的两个 LV(dom0_root 和 dom0_homes)中,/boot 位于 dom0_root 中。

在光盘初始化后,特定问题立即显示为以下消息:

kernel: [    3.003506] md: bind<sda1>
kernel: [    3.007705] md/raid1:md0: active with 1 out of 1 mirrors
kernel: [    3.007768] md0: detected capacity change from 0 to …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu lvm udev md

5
推荐指数
1
解决办法
1998
查看次数

无法在启动时设置 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 测试”时,规则匹配正确并将 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"
Run Code Online (Sandbox Code Playgroud)

但是,当计算机重新启动时,sriov_numvfs 属性不会设置,直到我执行 udevadm trigger

我可能缺少什么?想法?

udev centos6 sr-iov

5
推荐指数
0
解决办法
328
查看次数

mdadm 软件 RAID 在 initramfs 阶段未在启动时组装

首先,我更愿意提到我已经找到并阅读了这个

我正在使用标准 3.16 内核运行 Debian Jessie。我已经手动定义了一个 RAID1 阵列。但它不会在启动时自动组装。因此,在尝试挂载 /etc/fstab 中描述的 FS 后,systemd 会回退到某个降级的 shell。如果注释了 fstab 中的那一行,则引导过程会结束,但 RAID 阵列不可用。手动组装它不会触发任何错误。然后安装 FS 很简单。

手动组装时,数组如下所示:

root@tinas:~# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active (auto-read-only) raid1 sdc1[0] sdd1[1]
      1953382464 blocks super 1.2 [2/2] [UU]
      bitmap: 0/15 pages [0KB], 65536KB chunk

unused devices: <none>
Run Code Online (Sandbox Code Playgroud)

这是 blkid 命令的摘录:

/dev/sdd1: UUID="c8c2cb23-fbd2-4aae-3e78-d9262f9e425b" UUID_SUB="8647a005-6569-c76f-93ee-6d4fedd700c3" LABEL="tinas:0" TYPE="linux_raid_member" PARTUUID="81b1bbfe-fad7-4fd2-8b73-554f13fbb26b"
/dev/sdc1: UUID="c8c2cb23-fbd2-4aae-3e78-d9262f9e425b" UUID_SUB="ee9c2905-0ce7-2910-2fed-316ba20ec3a9" LABEL="tinas:0" TYPE="linux_raid_member" PARTUUID="11d681e5-9021-42c0-a858-f645c8c52708"
/dev/md0: UUID="b8a72591-040e-4ca1-a663-731a5dcbebc2" UUID_SUB="a2d4edfb-876a-49c5-ae76-da5eac5bb1bd" TYPE="btrfs"
Run Code Online (Sandbox Code Playgroud)

来自 fdisk 的信息:

root@tinas:~# fdisk -l /dev/sdc

Disque /dev/sdc : …
Run Code Online (Sandbox Code Playgroud)

linux boot udev raid1 systemd

5
推荐指数
1
解决办法
2万
查看次数

从容器内部调用 lvcreate 挂起

我运行一个容器。它具有所有功能并从根目录挂载所有目录(除了/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 default-vol1 (252:4)
Run Code Online (Sandbox Code Playgroud)

并且命令挂起。我也在日志中得到了这个:

Sep 12 12:03:31 node3 systemd-udevd[12529]: Process '/sbin/dmsetup udevcomplete 23072978' failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

如果我用ctrl-C我设置中断它,则创建逻辑卷。我也可以通过dmsetup udevcomplete_all …

lvm udev docker

5
推荐指数
1
解决办法
1633
查看次数

重新映射 Linux 串口设备名称

我有一台运行 Debian Linux 的服务器,它有一个内置的串行端口,即将作为 ttyS0。我有一个插入式 PCI 卡,它带有两个在 Linux 中注册为 ttyS2 和 ttyS3 的串行端口。

不幸的是,我正在尝试运行一些假设 ttyS0 和 ttyS1 可用的软件。是否可以重新映射串行端口设备名称(使用 udev 规则?),以便 ttyS0 保持原样,而 ttyS2 变为 ttyS1?

linux debian serial udev

4
推荐指数
1
解决办法
2万
查看次数

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

我目前有一个系统可以将我的 Linux 服务器备份到/media/usb. 这一切正常。但是,我实际上有 2 个驱动器,我们尝试每天更换它们。

例如,如果插入 USB 设备并使用sendmail某种方式或类似的方式向管理员发送电子邮件(例如,如果驱动器已超过 3 天未更换)是否有任何记录?

automation linux backup bash udev

4
推荐指数
1
解决办法
1万
查看次数

如何为持久网络名称编写规则?

我知道一个进程会根据 /lib/udev/rules.d/75-persistent-net-generator.rules 中的规则生成持久网卡名称。我也知道如何用一个简单的方法完全禁用这个过程

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules
Run Code Online (Sandbox Code Playgroud)

但我读到我“也可以编写自己的规则文件来为接口命名——如果已经设置了名称,持久性规则生成器将忽略该接口”(/etc/udev/rules.d/README 确认这个有可能)。

您能否提供有关如何编写此类规则的说明和/或示例?(我主要关心 Debian/Ubuntu,而对 CentOS 则不太关心)。就我而言,我想添加如下规则:

  • MAC A 或 B 的卡应命名为 eth0
  • MAC C 或 D 卡应命名为 eth1
  • 其他任何东西都遵循默认命名方案

作为我为什么要编写自定义规则的一个具体示例:我有两台相同的服务器,一个板载 LAN 和一个 PCI LAN。如果发生硬件故障,我希望能够将磁盘从 HW#1 移动到 HW#2,并且 eth0 继续指向板载卡并将 eth1 继续指向 PCI 卡(没有人想弄乱中间的布线)很重要硬件故障恐慌)。我目前的解决方法有效,但工作量很大 [1] 所以我想知道编写自定义规则是否可以让我表达上述规则


[1] 在 HW#1 中安装操作系统并保留 /etc/udev/rules.d/70-persistent-net.rules 的副本。将磁盘移动到 HW#2 并保留同一文件的第二个副本。连接两个副本并手动编辑 NAME="ethX" 部分。用我的版本替换 /etc/udev/rules.d/70-persistent-net.rules。最后使用禁用自动创建新的 70-persistent-net.rules

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules
Run Code Online (Sandbox Code Playgroud)

networking linux udev

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

udev ×10

linux ×8

lvm ×3

ubuntu ×2

automation ×1

backup ×1

bash ×1

boot ×1

centos6 ×1

debian ×1

docker ×1

hard-drive ×1

md ×1

mdadm ×1

networking ×1

raid1 ×1

serial ×1

sr-iov ×1

systemd ×1

usb ×1