Linux中DevOps — /sys/devices 目录

什么是 /sys/devices

在Linux服务器中,该/sys/devices目录专门包含系统识别的设备信息。这些设备可以是物理硬件设备或逻辑、虚拟设备。下面的目录层次结构/sys/devices反映了设备层次结构,子目录代表设备、它们的子系统以及每个设备的各个组件。

/sys/devices目录中,您可以收集有关系统上的设备、它们的属性和当前状态的信息。您还可以通过写入特定文件来与某些设备进行交互,从而允许您修改某些设置或以各种方式控制设备。

请注意,修改目录中的文件/sys可能会产生意想不到的后果,如果操作不当,可能会导致您的系统变得不稳定或无响应。

这是一个目录示例/sys/devices


$ tree -L 1 /sys/devices/
/sys/devices/
├── breakpoint
├── kprobe
├── LNXSYSTM:00
├── msr
├── pci0000:00
├── platform
├── pnp0
├── software
├── system
├── tracepoint
├── uprobe
└── virtual

/sys/devices 中的常用子目录

以下是一些常见的目录及其用途:

  • platform:此目录包含平台设备,这些设备是特定于系统的设备,不一定属于任何特定总线。平台设备的示例包括 GPIO 控制器、LED 或为特定系统构建的自定义设备。
$ tree -L 1 /sys/devices/platform/
/sys/devices/platform/
├── AMZN0000:00
├── i8042
├── pcspkr
├── platform-framebuffer.0
├── PNP0103:00
├── power
├── serial8250
└── uevent
  • pci0000:00:此目录代表 PCI(外围组件互连)总线及其设备。PCI 是将网卡、显卡和声卡等高速设备连接到主板的标准。
$ tree -L 1 /sys/devices/pci0000\:00/
/sys/devices/pci0000:00/
├── 0000:00:00.0
├── 0000:00:01.0
├── 0000:00:01.3
├── 0000:00:03.0
├── 0000:00:04.0
├── 0000:00:05.0
├── 0000:00:1f.0
├── firmware_node -> ../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00
├── pci_bus
├── power
└── uevent
  • system:此目录包含有关各种系统组件的信息,例如 CPU、内存和固件。例如,/sys/devices/system/cpu包含有关系统上可用 CPU 的信息,包括它们的频率、核心数和其他属性。

$ tree -L 1 /sys/devices/system
/sys/devices/system
├── clockevents
├── clocksource
├── container
├── cpu
├── edac
├── machinecheck
├── memory
└── node
  • virtual:该目录包含不是物理硬件组件而是由内核或其他软件组件创建和管理的虚拟设备

$ tree -L 1 /sys/devices/virtual
/sys/devices/virtual
├── bdi
├── cpuid
├── dmi
├── input
├── mem
├── misc
├── msr
├── net
├── nvme-subsystem
├── thermal
├── tty
├── vc
├── vtconsole
└── workqueue

Why /sys/devices

  • 设备表示/sys/devices提供系统中设备的分层表示,反映它们的物理或逻辑组织。这允许用户、管理员和软件更好地理解和导航设备及其子系统之间的关系。
  • 设备属性:其中的文件和目录/sys/devices公开设备的各种属性和特性,例如它们的当前状态、配置和操作参数。通过阅读这些文件,用户和软件可以获得有关设备及其功能的宝贵信息。
  • 用户空间交互/sys/devices使用户和用户空间应用程序能够通过 sysfs 接口与设备进行交互。通过读取或写入目录中的特定文件/sys/devices,用户和应用程序可以更改设备设置、控制其行为或收集诊断信息。
  • 热插拔和设备事件:该/sys/devices目录在处理热插拔事件方面起着至关重要的作用,例如在运行时从系统中添加或删除设备。添加或删除设备时,内核会/sys/devices相应地更新目录,用户空间工具(如 udev)可以监视这些更改以执行加载适当的驱动程序或设置设备节点等操作。
  • 简化的设备管理:通过将设备信息和交互整合到一个统一的文件系统中,/sys/devices它简化了 Linux 中的设备管理。它为使用设备提供了一致的界面,无论其底层硬件或通信协议如何,使用户、管理员和开发人员更容易管理设备和排除故障。

使用 /sys/devices 解决 Linux 问题

Linux 中的目录/sys/devices可用于解决各种硬件和设备相关问题。

识别可用的 CPU 及其在线状态

要检查 CPU 的在线状态,您可以导航到/sys/devices/system/cpu并检查该online文件。这可以帮助您确定是否有任何 CPU 内核当前不在线或不可用。

$ cat /sys/devices/system/cpu/online
0-1

输出将采用由连字符分隔的两个数字的格式,其中第一个数字是第一个在线的 CPU 核心的索引,第二个数字是最后一个在线的 CPU 核心的索引。例如,如果输出为0-3,则表示 CPU 内核 0、1、2 和 3 在线。

检查网络接口链接状态

要确定网络接口(例如eth0)的链接状态,可以读取carrier相应网络设备目录中的文件。值为 1 表示链接已打开,而 0 表示链接已关闭。


$ cat /sys/devices/pci0000:00/0000:00:05.0/net/eth0/carrier
 1

在 Go 中访问 /sys/devices

/sys/devices在 Go 中,您可以使用包提供的标准文件 I/O 操作访问目录中的文件os。以下是从以下位置读取在线 CPU 的示例/sys/devices/system/cpu/online


package main

import (
 "fmt"
 "io/ioutil"
 "os"
)

func main() {
 cpuOnlinePath := "/sys/devices/system/cpu/online"
 data, err := ioutil.ReadFile(cpuOnlinePath)
 if err != nil {
  fmt.Fprintf(os.Stderr, "Error reading file %s: %v\n", cpuOnlinePath, err)
  os.Exit(1)
 }

 fmt.Printf("Online CPUs: %s\n", string(data))
}

To run

$ go run main.go
Online CPUs: 0-1
posted @ 2023-07-19 16:04  寻梦99  阅读(1866)  评论(0)    收藏  举报