查看所有硬盘的SMART详细信息
依赖包安装
1 | sudo apt install smartmontools |
命令介绍
首先使用lsblk获取所有的存储设备,然后使用grep过滤出sd、hd、nvme、vd开头的设备,最后使用xargs和smartctl获取每个设备的SMART信息。
1 | lsblk -d -o NAME | grep -E '^(sd|hd|nvme|vd)' | xargs -I {} sudo smartctl -a "/dev/{}" |
查看所有硬盘的SMART详细信息(极简输出)
依赖包安装
1 | sudo apt install smartmontools |
命令介绍
流程同上
1 | lsblk -d -o NAME | grep -E '^(sd|hd|nvme|vd)' | xargs -I {} sudo smartctl -H "/dev/{}" |
定位进程所属容器/Pod
依赖包安装
定位pod需要crictl
1 | sudo apt install crictl |
命令介绍
Docker
首先使用cat和grep获取进程所属的cgroup,然后使用docker ps和grep获取容器ID。
1 | docker ps | grep $(sudo cat /proc/<pid>/cgroup | grep -oP 'docker-\K[a-f0-9]+' | head -c 12) |
ctr(containerd)
首先使用cat和grep获取进程所属的cgroup,然后选取包含pids的一行以去掉重复数据,直接从最后的信息中提取命名空间和容器名称。
1 | sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print $(NF-1), $NF}' |
Kubernetes获取容器id
首先使用cat和grep获取进程所属的cgroup, 然后选取包含pids的一行以去掉重复数据,从行中解析最后一级的前12位。
1 | sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print substr($NF,1,12)}' |
Kubernetes获取Pod名称
使用crictl根据容器ID获取Pod名称。其中容器ID为上一步获取到的12位ID。
1 | crictl inspect -o go-template --template='{{index .status.labels "io.kubernetes.pod.name"}}' $(sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print substr($NF,1,12)}') |
常见问题
Linux怎么查看所有硬盘的SMART健康状态?
先安装smartmontools,然后用lsblk列出存储设备,过滤出sd、hd、nvme、vd开头的设备,再用xargs配合smartctl -H查看每个硬盘的健康状态。一条命令:lsblk -d -o NAME | grep -E '^(sd|hd|nvme|vd)' | xargs -I {} sudo smartctl -H "/dev/{}"。
如何定位Linux进程属于哪个Docker容器?
查看进程的cgroup信息,用grep提取docker-后面的12位容器ID,再用docker ps过滤出对应容器。命令:docker ps | grep $(sudo cat /proc/<pid>/cgroup | grep -oP 'docker-\K[a-f0-9]+' | head -c 12)。注意替换<pid>为实际进程号。
Kubernetes中怎么根据进程ID找到Pod名称?
先通过进程的cgroup信息提取容器ID前12位,然后用crictl inspect命令查询Pod名称。具体命令:crictl inspect -o go-template --template='{{index .status.labels "io.kubernetes.pod.name"}}' $(sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print substr($NF,1,12)}')。注意需要安装crictl。