将 dev253-10 转换为 linux 中的实际分区

将 dev253-10 转换为 linux 中的实际分区

sar -d -f /var/log/sa/sa22我发现我的 rhel7.2 虚拟机有以下输出

09:30:01 PM dev253-10      0.03      0.00      1.25     39.37      0.09   2915.21    766.00      2.43

然后我尝试使用 dmsetup 找出 dev253-10 的分区,但没有 253:10

docker-253:0-1159-1beb12cb313b06d439cc35e2cf4010133a24579dc90b6132239ea3d26c3c2bd9 (253:7)
 └─docker-253:0-1159-pool (253:4)
    ├─ (7:0)
    └─ (7:1)
rhel-swap (253:1)
 └─ (8:2)
rhel-root (253:0)
 └─ (8:2)
docker-253:0-1159-2bb8f2440697cb95e63a9633dc6ceffb0e8b553f8143b8f98332886f43767cb1 (253:6)
 └─docker-253:0-1159-pool (253:4)
    ├─ (7:0)
    └─ (7:1)
docker-253:0-1159-504a9bdece15050bcb895d0f6f2a9816f2105ca5bdc6324f95e755f85f8c5a2f (253:5)
 └─docker-253:0-1159-pool (253:4)
    ├─ (7:0)
    └─ (7:1)
rhel-lv_data1 (253:3)
 └─ (8:33)
rhel-lv_data0 (253:2)
 └─ (8:17)
docker-253:0-1159-84166572e8b53991f1d928db949a677d5cd3a8553d8e19d1845a1ef7056c18f8 (253:8)
 └─docker-253:0-1159-pool (253:4)
    ├─ (7:0)
    └─ (7:1)

也尝试过cat /proc/partitions

major minor  #blocks  name

   2        0          4 fd0
   8       16   52428800 sdb
   8       17   52427776 sdb1
   8       32  104857600 sdc
   8       33  104856576 sdc1
   8        0   25165824 sda
   8        1     512000 sda1
   8        2   24652800 sda2
  11        0    1048575 sr0
 253        0   16457728 dm-0
 253        1    8192000 dm-1
 253        2   52424704 dm-2
 253        3  104853504 dm-3
   7        0  104857600 loop0
   7        1    2097152 loop1
 253        4  104857600 dm-4
 253        5   10485760 dm-5
 253        6   10485760 dm-6
 253        7   10485760 dm-7
 253        8   10485760 dm-8

但没有哪里有253:10。

原因是什么?我怎样才能找到它?

答案1

253-10 指设备的主设备号和次设备号。

最简单(但最不可靠,因为你应该从不解析 ls) 找出它是什么的方法:

ls -l /dev/ | grep -E ' 253, +10 '

(这+是因为主编号和次编号后面的逗号之间会有未知但至少有一个的空格数)

请注意,如果您正在搜索的主/次设备号可以匹配字符设备和块设备,您将得到两行输出。由于您知道您只对块设备感兴趣(因为您知道它是磁盘分区),因此您可以将正则表达式修改为:

ls -l /dev/ | grep -E '^b.* 253, +10 '

我的系统上没有任何设备映射器分区,因此我将使用循环设备(主要 7,次要 0、16、32、48 等)作为示例:

# ls -l /dev/ | grep -E '^b.* 7, +16 '
brw-rw----  1 root disk      7,  16 Mar 17 10:37 loop1

另一种选择是使用 GNU findstat、 和grep。与此不同的是ls,这可以安全可靠地进行解析,因为您可以完全控制stat.问题是 GNUstat只能输出十六进制的主数和次数,而不是十进制。所以需要将十进制的253和转换10为十六进制的fda

Linux 上的大多数计算器应用程序都可以执行此转换,您甚至可以从命令行执行此转换bash,例如:printf '%x\n' 253

find /dev -type b -exec stat -c '%t %T %n' {} + | grep -i '^fd a '

对于我的循环设备示例,十进制 7 也是十六进制 7,但十进制 16 是十六进制 10。

# find /dev -type b -exec stat -c '%t %T %n' {} + | grep -i '^7 10 '
7 10 /dev/loop1

如果您可以通过设备主要和次要数字(与通过大小或权限或 mtime 等相同)来优化搜索,那么这会简单得多(不需要或statgrep将十进制转换为十六进制) ,但 AFAICT 来自,它似乎没有这个能力。findman find

相关内容