AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[udev](unix)

Martin Hope
olishmollie
Asked: 2025-01-08 02:08:15 +0800 CST

syfs 类别/设备属性所有权的 Udev 规则

  • 6

这个问题最初是在Stack Overflow上提出的,但因偏离主题而被关闭。希望这是适合这个问题的论坛。

我正在编写一个字符设备驱动程序,该驱动程序公开 sysfs 下的类和设备属性。我正在使用 udev 使出现在/dev某个组中的设备可读/可写,但我不知道如何在不使用 shell 脚本的情况下使 sysfs 属性可由同一组写入。

$ ls -l /dev/foobar
crw-rw---- 1 root my_group 241, 0 Jan  4 21:57 /dev/foobar # ownership applied by udev
$ ls -l /sys/class/my_class/wo_attribute
--w--w---- 1 root root 4096 Jan  4 22:02 wo_attribute # still in root group :/
$ ls -l /sys/class/my_class/my_device/rw_attribute
-rw-rw-r-- 1 root root 4096 Jan  4 22:13 rw_attribute # ditto

我尝试使用udevadm info来匹配 sysfs 路径的 KERNEL 和 SUBSYSTEM 键,但没有效果。我还发现了udev_event和get_ownership字段struct class;前者没有成功,而后者适用于设备属性,但我必须对my_group的 gid 进行硬编码,这并不理想。

以下是尝试为该类别找到正确匹配键的示例:

$ udevadm info -a /sys/class/my_module
 looking at device '/class/my_class':
    KERNEL=="my_class"
    SUBSYSTEM=="subsystem"
    DRIVER==""
    ATTR{wo_attribute}=="(not readable)"

  looking at parent device '/class':
    KERNELS=="class"
    SUBSYSTEMS==""
    DRIVERS==""
    ATTRS{devcoredump/disabled}=="0"
    ATTRS{drm/version}=="drm 1.1.0 20060810"
    ATTRS{firmware/timeout}=="60"
    ATTRS{gpio/export}=="(not readable)"
    ATTRS{gpio/unexport}=="(not readable)"
    ATTRS{my_class/wo_attribute}=="(not readable)"

但是 udev 规则KERNEL=="my_class", GROUP="my_group"不起作用。

udev 是否​​仅适用于下的设备/dev,或者是否有办法将规则应用于 sysfs 属性?

udev
  • 1 个回答
  • 16 Views
Martin Hope
Carlo Wood
Asked: 2024-12-23 07:33:07 +0800 CST

如何使用 udev 和 systemd 自动挂载 USB 驱动器的(加密)分区

  • 8

我有以下要求:

  • 如果插入了特定的 USB 存储设备,系统会自动检测并安装它。安装位置信息/etc/fstab(当然)会显示在这里。
  • 如果 USB 驱动器坏了,必须自动进行彻底清理;从而不会留下任何残留痕迹,例如它曾被安装(或仍然被安装)和/或任何未完成的 systemd 单元。
  • 如果手动编辑了有问题的分区umount,那么所有内容也应该被清理,即使该棒仍然存在;将其从插头中拔出应该只会清理之前无法清理的内容(可能是单元.device)。

为了以干净的方式实现上述操作,插入 USB 驱动器将导致自定义 systemd 单元的启动,然后我们将对其进行配置以完成其余操作。

写这个需要什么?

假设我们有一个有三个分区的 USB 驱动器: /dev/sdc1和/dev/sdc2- 它们是 LUKS 加密的,以及/dev/sdc3- 它们是未加密的。

例如,

>sudo blkid /dev/sdc{1,2,3}
/dev/sdc1: UUID="de9a000f-fa60-4050-8d11-864e97829b8a" TYPE="crypto_LUKS" PARTUUID="219578f5-5905-41cd-895d-7b937ac0756a"
/dev/sdc2: UUID="012059c1-6b88-4937-889a-a21448740492" TYPE="crypto_LUKS" PARTUUID="59c7f6f3-a5cb-41af-82fa-b515031d85d5"
/dev/sdc3: LABEL="README" UUID="9d262deb-2343-4096-bccf-bb26ed4415ad" BLOCK_SIZE="1024" TYPE="ext2" PARTUUID="165db3da-4ebb-4f59-ab09-ee5e5b26ed43"

以下UUID是所使用的内容/dev/disk/by-uuid:

>ls -l /dev/disk/by-uuid | grep sdc
lrwxrwxrwx 1 root root 10 Dec 22 18:27 012059c1-6b88-4937-889a-a21448740492 -> ../../sdc2
lrwxrwxrwx 1 root root 10 Dec 22 18:27 9d262deb-2343-4096-bccf-bb26ed4415ad -> ../../sdc3
lrwxrwxrwx 1 root root 10 Dec 22 18:27 de9a000f-fa60-4050-8d11-864e97829b8a -> ../../sdc1

由于设备名称/dev/sdc相当随机,从现在开始我们应该只使用 UUID。

为了手动挂载未加密的分区,我们需要执行(确保 /mnt 和/或 /mnt/usb 上尚未挂载任何内容!):

UUID=9d262deb-2343-4096-bccf-bb26ed4415ad
SERIAL=408D5CBECAC3E7C0E9170AEC
sudo /bin/mkdir -p /mnt/usb/$SERIAL/part3
sudo mount -t ext2 /dev/disk/by-uuid/$UUID /mnt/usb/$SERIAL/part3

我确实选择使用 USB 设备的值ID_SERIAL_SHORT,例如可以通过以下方式获取:

>udevadm info -n /dev/sdc3 | grep -E '(ID_SERIAL_SHORT|ID_FS_UUID)='
E: ID_SERIAL_SHORT=408D5CBECAC3E7C0E9170AEC
E: ID_FS_UUID=9d262deb-2343-4096-bccf-bb26ed4415ad

/etc/fstab让我们通过向该文件添加以下内容来存储挂载点:

UUID=9d262deb-2343-4096-bccf-bb26ed4415ad   /mnt/usb/408D5CBECAC3E7C0E9170AEC/part3 ext2    rw,noauto   0 0

请注意,此后我们可以执行以下操作:

sudo mount /dev/sdc3

只要该块设备具有预期的 UUID,它就能顺利完成挂载。

另外两个分区/dev/sdc{1,2}已加密,首先需要

UUID1=573bfda0-69f5-4fb9-9d7e-333a70a51710
UUID2=6d7bdc1d-3eb0-4774-a9fb-3d1ac1027010
echo $LUKS_PASS | sudo cryptsetup -q luksOpen /dev/disk/by-uuid/$UUID1 usb-$UUID1
echo $LUKS_PASS | sudo cryptsetup -q luksOpen /dev/disk/by-uuid/$UUID2 usb-$UUID2

要执行的命令,我假设环境变量LUKS_PASS包含解​​密 LUKS 分区所需的密码。这里的 UUID 是 blkid 返回的:

>sudo blkid /dev/sdc{1,2}
/dev/sdc1: UUID="573bfda0-69f5-4fb9-9d7e-333a70a51710" TYPE="crypto_LUKS" PARTUUID="caa57a9d-7389-4990-a243-34b19a179368"
/dev/sdc2: UUID="6d7bdc1d-3eb0-4774-a9fb-3d1ac1027010" TYPE="crypto_LUKS" PARTUUID="10813450-6dcc-4700-9e88-d0577c0c9aeb"

这将为/dev/mapper/usb-$UUID每个分区创建一个设备,每个设备都有自己的 UUID:

>sudo blkid /dev/mapper/usb*
/dev/mapper/usb-573bfda0-69f5-4fb9-9d7e-333a70a51710: LABEL="gold1-2024-12-21" UUID="67f056be-dbbc-4f7a-979d-6ff077d16e93" BLOCK_SIZE="4096" TYPE="ext2"
/dev/mapper/usb-6d7bdc1d-3eb0-4774-a9fb-3d1ac1027010: LABEL="gold2-2024-12-21" UUID="94bfcc55-6b52-431f-bc76-3aa198c107c7" BLOCK_SIZE="4096" TYPE="ext2"

这些就是我们想要添加的 UUID /etc/fstab。

为了让生活更轻松,我编写了以下脚本,该脚本/etc/fstab在插入 USB 后运行时打印所需的配置(就我的特定情况而言):

# Get the device path.
DEVPATH=$(/bin/ls /dev/disk/by-id/usb-Kingston_DataTraveler* | grep -E -v -- '-part[0-9]+$')
# Get the serial of the USB stick.
ID_SERIAL_SHORT=$(udevadm info -n $DEVPATH | grep ID_SERIAL_SHORT | sed -e 's/.*ID_SERIAL_SHORT=//')
# Run over all existing partitions.
for p in $(/bin/ls $DEVPATH-part*); do
  # Extract the "part?" string.
  PART=$(echo $p | sed -r -e 's/.*-(part[0-9]+)$/\1/')
  # Get the UUID of the block device of this partition iff it is a LUKS encrypted partition.
  UUID=$(blkid --match-token TYPE=crypto_LUKS $p | sed -e 's/.* UUID="\([^ ]*\)".*/\1/' || true)
  if [ -n "$UUID" ]; then
    # Decrypt the partition.
    echo $LUKS_PASS | sudo cryptsetup -q luksOpen /dev/disk/by-uuid/$UUID usb-$UUID
    # Get the UUID of the encrypted partition.
    UUID2=$(blkid /dev/mapper/usb-$UUID | sed -e 's/.* UUID="\([^ ]*\)".*/\1/')
    echo -e "UUID=$UUID2\t/mnt/usb/$ID_SERIAL_SHORT/$PART\text2\trw,noauto\t0 0"
    sudo cryptsetup luksClose usb-$UUID
  else
    # Get UUID of non-encrypted partition.
    UUID=$(blkid $p | sed -e 's/.* UUID="\([^ ]*\)".*/\1/')
    echo -e "UUID=$UUID\t/mnt/usb/$ID_SERIAL_SHORT/$PART\text2\trw,noauto\t0 0"
  fi
done

导出后,LUKS_PASS请确保运行上述脚本sudo -E以保存环境。示例输出:

>sudo -E ./foo.sh
UUID=db97c4b0-8f92-4edc-bacb-dc90e62de2e2       /mnt/usb/408D5CBECAC3E7C0E9170AEC/part1 ext2    rw,noauto       0 0
UUID=c45c6a7a-1c0f-49c4-bcfb-15766114daa1       /mnt/usb/408D5CBECAC3E7C0E9170AEC/part2 ext2    rw,noauto       0 0
UUID=9d262deb-2343-4096-bccf-bb26ed4415ad       /mnt/usb/408D5CBECAC3E7C0E9170AEC/part3 ext2    rw,noauto       0 0

设置完毕/etc/fstab并确切知道需要什么命令后,剩下的就是使用udev和来自动执行此操作systemd units。

问题是:如何做?

udev
  • 2 个回答
  • 59 Views
Martin Hope
T. Pluess
Asked: 2024-06-20 01:56:19 +0800 CST

/dev/disk/by-id 下的 SAS 块设备命名?

  • 5

当在 Linux 下使用 SATA SSD 或 HDD 时,可以通过多种方式寻址,例如:

/dev/sda
/dev/disk/by-id/ata-TOSHIBA_MG05ACA800E_78LBK8P7FUUD
/dev/disk/by-id/wwn-0x50000398abc0251c

在我的系统上,它们都指向同一个磁盘。我最近开始使用几个不同品牌和型号的 SAS 磁盘,我注意到这些 SAS 磁盘的行为似乎有点不同。例如

/dev/sdb
/dev/disk/by-id/scsi-35000cca01337732c
/dev/disk/by-id/wwn-0x5000cca01337732c

也都是同一个磁盘。但我原本以为还会有一个设备文件,例如

/dev/disk/by-id/scsi-HGST_HUSSL4040BSS600_XWVZGT1A

因此格式将类似于 SATA 磁盘。<interface>-<manufacturer>_<model>_<serial>我会发现这更方便。所以我想知道,为什么 SAS 磁盘在这方面与其他磁盘的处理不同?即使 NVME 磁盘也有类似的设备文件,其名称中包含制造商、型号和序列号,但 SAS 磁盘却没有。

附加问题:是否有可能(借助某些 udev 规则?)为 SAS 磁盘提供这些更具信息量的设备文件?

udev
  • 1 个回答
  • 28 Views
Martin Hope
basilm4r0
Asked: 2024-03-24 00:44:58 +0800 CST

udev 规则可以创建新的设备属性吗?

  • 6

我编写了一条 udev 规则来创建属性/etc/udev/rules.d/99-backlight-scale.rules:

ACTION=="add", \
KERNEL=="amdgpu_bl1", \
SUBSYSTEM=="backlight", \
DEVPATH=="/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1", \
ENV{GSD_BACKLIGHT_SCALE}="non-linear"

udevadm test /sys/class/backlight/amdgpu_bl1说应该创建该财产。

DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1
ACTION=add
SUBSYSTEM=backlight
TAGS=:seat:systemd:
CURRENT_TAGS=:seat:systemd:
ID_PATH=pci-0000:03:00.0
ID_PATH_TAG=pci-0000_03_00_0
ID_FOR_SEAT=backlight-pci-0000_03_00_0
GSD_BACKLIGHT_SCALE=non-linear
SYSTEMD_WANTS=systemd-backlight@backlight:amdgpu_bl1.service
USEC_INITIALIZED=23289223
Unload kernel module index.
Unloaded link configuration context.

但重新启动后该属性不会出现在输出中udevadm info --path=/sys/class/backlight/amdgpu_bl1 --query=property。

DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1
SUBSYSTEM=backlight
USEC_INITIALIZED=23289223
NVME_HOST_IFACE=none
ID_PATH=pci-0000:03:00.0
ID_PATH_TAG=pci-0000_03_00_0
ID_FOR_SEAT=backlight-pci-0000_03_00_0
SYSTEMD_WANTS=systemd-backlight@backlight:amdgpu_bl1.service
TAGS=:systemd:seat:
CURRENT_TAGS=:systemd:seat:

编辑:我完全删除了 devpath 行,就像arch wiki 中的本节一样。现在的规则是

ACTION=="add", \
KERNEL=="amdgpu_bl1", \
SUBSYSTEM=="backlight", \
ENV{GSD_BACKLIGHT_SCALE}="non-linear"

但这仍然不起作用。

我尝试创建另一个 udev 规则,写入文件以查看它们是否正在运行。ACTION=="add", KERNEL=="amdgpu_bl1", SUBSYSTEM=="backlight", RUN+="/bin/sh -c 'echo applied > /home/basilmari/udev-debug.log'" "做了工作。

那么 udev 规则可以首先创建设备属性吗?我还没有找到任何资源明确说明这一点。

udev
  • 2 个回答
  • 99 Views
Martin Hope
zwhconst
Asked: 2023-10-10 20:15:58 +0800 CST

为什么 udev 规则在 `DEVPATH=="/kernel"` 上不起作用?

  • 6

我正在使用文件测试 udev 规则/etc/udev/rules.d/10-test.rules。

这行:

DEVPATH=="/devices/system/node/node0", ATTR{hugepages/hugepages-1048576kB/nr_hugepages}="4"

使/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages成为4。

但这行:

DEVPATH=="/kernel/mm", ATTR{hugepages/hugepages-1048576kB/nr_hugepages}="4"

不影响/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages。

这行也没有:

DEVPATH=="/kernel", ATTR{mm/hugepages/hugepages-1048576kB/nr_hugepages}="4"

(即使重启也不起作用。)

为什么?

udev
  • 1 个回答
  • 20 Views
Martin Hope
treuss
Asked: 2023-09-14 00:36:47 +0800 CST

未触发删除设备的 UDev 规则

  • 5

我有一个带有集成 USB 集线器(和物理电源开关)的显示器连接到我的 pi,并且想要在打开和关闭显示器时执行两个不同的脚本。

打开显示器的第一部分工作正常,但是当再次关闭显示器时,不会触发任何内容。根据其他论坛帖子,我尝试了该规则的不同变体,但没有成功。

规则文件/etc/udev/rules.d(包含所有三种变体)

SUBSYSTEM=="usb", ACTION=="add",    ATTR{idProduct}=="2514", ATTR{idVendor}=="03f0", RUN+="/home/pi/monitor_on.sh"
SUBSYSTEM=="usb", ACTION=="remove", ATTR{idProduct}=="2514", ATTR{idVendor}=="03f0", RUN+="/home/pi/monitor_off.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{ID_MODEL}=="2514", ENV{ID_VENDOR}=="03f0", RUN+="/home/pi/monitor_off.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{idProduct}=="2514", ENV{idVendor}=="03f0", RUN+="/home/pi/monitor_off.sh"

测试udevadm test告诉我,前两个删除规则应该触发,第三个则不会。

udevadm test --action="remove" /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4
This program is for debugging only, it does not run any program
[...]
Reading rules file: /etc/udev/rules.d/99-monitor.rules
[...]
1-1.4: RUN '/home/pi/monitor_off.sh' /etc/udev/rules.d/99-monitor.rules:2
1-1.4: RUN '/home/pi/monitor_off.sh' /etc/udev/rules.d/99-monitor.rules:3
DEVPATH=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4
DEVNAME=/dev/bus/usb/001/060
DEVTYPE=usb_device
DRIVER=usb
PRODUCT=3f0/2514/0
TYPE=9/0/2
BUSNUM=001
DEVNUM=060
MAJOR=189
MINOR=59
ACTION=remove
SUBSYSTEM=usb
USEC_INITIALIZED=1470318118448
ID_VENDOR=03f0
ID_VENDOR_ENC=03f0
ID_VENDOR_ID=03f0
ID_MODEL=2514
ID_MODEL_ENC=2514
ID_MODEL_ID=2514
ID_REVISION=0000
ID_SERIAL=03f0_2514
ID_BUS=usb
ID_USB_INTERFACES=:090001:090002:
ID_VENDOR_FROM_DATABASE=HP, Inc
ID_MODEL_FROM_DATABASE=4-port hub
ID_PATH=platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4
ID_PATH_TAG=platform-fd500000_pcie-pci-0000_01_00_0-usb-0_1_4
ID_FOR_SEAT=usb-platform-fd500000_pcie-pci-0000_01_00_0-usb-0_1_4
TAGS=:seat:
run: '/home/pi/monitor_off.sh'
run: '/home/pi/monitor_off.sh'
Unload module index
Unloaded link configuration context.

然后关闭显示器,不会触发monitor_off.sh脚本。daemon.log有很多消息,不知道如何理解它们。以下是与 USB 集线器相关的内容(1-1.4)。

Sep 13 17:57:05 crumble systemd-udevd[5413]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Processing device (SEQNUM=3310, ACTION=unbind)
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: IMPORT builtin 'usb_id' /usr/lib/udev/rules.d/50-udev-default.rules:13
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Failed to open USB device 'descriptors' file: No such file or directory
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Failed to get idVendor attribute: No such file or directory
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: IMPORT builtin 'usb_id' fails: No such file or directory
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Handling device node '/dev/bus/usb/001/060', devnum=c189:59, mode=0600, uid=0, gid=0
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: cannot stat() node '/dev/bus/usb/001/060' (No such file or directory)
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: sd-device: Created empty file '/run/udev/data/c189:59' for '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4'
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Device (SEQNUM=3310, ACTION=unbind) processed
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor
Sep 13 17:57:05 crumble systemd-udevd[5413]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Processing device (SEQNUM=3311, ACTION=remove)
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Device (SEQNUM=3311, ACTION=remove) processed
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor

我还尝试使用与orATTRS相反的方式,这确实会触发脚本,但是它会根据连接到集线器的内容多次触发脚本。ATTRENV

操作系统版本是raspbian buster。

udev
  • 1 个回答
  • 21 Views
Martin Hope
cas
Asked: 2023-08-01 12:48:23 +0800 CST

udev 为 nvme 驱动器和分区创建重复的 /dev/disk/by-id 符号链接

  • 5

最近,我注意到我的 NVME 驱动器中有额外的符号链接/dev/disk/by-id,并且重复项具有相同的名称并_1附加了名称。

# ls -lF /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW{,_1}
lrwxrwxrwx 1 root root 13 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW -> ../../nvme0n1
lrwxrwxrwx 1 root root 13 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1 -> ../../nvme0n1

(序列号无特殊原因大部分被编辑为 XXXXXXXX)

它还会复制 NVME 驱动器上所有分区的条目:

$ ls -lF /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1*-part*'
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part3 -> ../../nvme0n1p3
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part4 -> ../../nvme0n1p4
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part5 -> ../../nvme0n1p5
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part6 -> ../../nvme0n1p6
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part7 -> ../../nvme0n1p7

这只发生在我的 NVME 驱动器上,而不发生在我的 SATA 或 USB 闪存驱动器上。

我看不出有任何明显的东西/usr/lib/udev/rules.d/60-persistent-storage.rules可以做到这一点。

有谁知道为什么udev这样做?更重要的是,如何阻止它?

udev
  • 1 个回答
  • 18 Views
Martin Hope
ibrahem
Asked: 2023-07-31 20:45:30 +0800 CST

删除/dev目录

  • 5

我sudo rm -fr /dev一不小心
我会丢失数据或有任何副作用吗?
我已经重新启动系统了。
我的数据看起来没问题,但恐怕有数据丢失,我还没有发现。


编辑:
我读过这篇文章:Recover from rm -rf /proc /sys/ /dev/pts /dev without restart?
但没有足够确定没有发生数据丢失。
我需要更加确定。
udev
  • 1 个回答
  • 26 Views
Martin Hope
Peter bill
Asked: 2023-07-21 04:35:34 +0800 CST

如何以只读方式安装特定 USB 驱动器

  • 7

我需要以只读方式安装某些 USB 驱动器 - 不是每个驱动器,只是那些包含存档数据的驱动器。我想防止意外或恶意更改。

有很多文章对此进行了阐述udev,这似乎是可能的,但我的规则似乎并未得到执行。我研究过如何创建 udev 规则来以只读方式挂载 USB 驱动器?- 我没有 gvfs,其他答案没有帮助。

这是我的/etc/udev/rules.d/25-usb-read-only.rules文件。为了进行测试,我使用卷名为 SCRATCH 的驱动器。该驱动器安装在/dev/sda,但始终可写。

#SUBSYSTEM=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="SCRATCH", ENV{UDISKS_MOUNT_OPTIONS}="ro"
SUBSYSTEM=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="SCRATCH", MODE="0550"
#SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_USAGE}=="filesystem", ENV{ID_FS_LABEL}=="SCRATCH", ENV{UDISKS_MOUNT_OPTIONS}="ro"
# The RUN here just to test the rule is executed
#KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_USAGE}=="filesystem", ENV{ID_FS_LABEL}=="SCRATCH", RUN+="/home/test-udev.sh"

注释行是之前失败的尝试。sudo udevadm control --reload我在两次考试之间都记得。

请注意,即使 RUN 命令也失败了。该脚本仅写入调试文件,并在从命令行执行时起作用。

我已经启用了调试并进行了检查/var/log/syslog——仅在测试的几秒钟内就有数万行。我找不到任何有用的东西。

我的系统是 Linux Mint 21.1 Cinnamon,但以上所有内容都来自 bash。

任何帮助,将不胜感激。

udev
  • 1 个回答
  • 36 Views
Martin Hope
Daniel
Asked: 2023-07-10 22:15:21 +0800 CST

udev: hwclock 设置失败?

  • 5

“/usr/lib/udev/hwclock-set”中有一个文件:

它应从 RTC 设置正确的日期/时间,但有一个障碍:

if [ -e /run/systemd/system ] ; then
    exit 0
fi
/shin/hwclock ....

现在,当 udev 运行 hwclock 规则时,上述文件夹已经存在,因此脚本将退出,而不设置系统时间。

这个条件背后的想法是什么?

此外,它还阻止 udev 规则和 systemd 服务设置系统时间(通过此脚本)。

它让我疯狂。没有 udev 规则或 systemd 服务可以处理此障碍。

此外2:当我取消注释“exit”并且udev规则尝试运行此脚本时,所有“hwclock”调用都返回1(错误)。

当我手动运行此脚本(使用未注释的“exit”)时,它会正确设置时间。

udev
  • 1 个回答
  • 24 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve