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 '
(+
メジャー番号とマイナー番号の後のカンマの間には不明な数のスペースがありますが、少なくとも1つ以上あるためです)
文字デバイスとブロックデバイスの両方に一致するメジャー/マイナーデバイス番号を検索すると、2行の出力が表示されます。ブロックデバイスにのみ興味があることを知っているので(ディスクパーティションであることを知っているので)、正規表現を次のように変更できます。
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
find
別のオプションはGNU、、、およびstat
を使用することですgrep
。これとは異なり、ls
これはユーザーが完全な権限を持っているため、安全で信頼性の高い解析を可能にしますstat
。問題は、GNUがstat
10進数ではなく16進数でのみ専攻と度数を出力できることです。したがって、10進数の合計を16進数の合計に253
変換する必要があります。10
fd
a
ほとんどのLinux電卓アプリケーションはこの変換を実行でき、コマンドラインでも実行できますbash
。たとえば、次のようになります。printf '%x\n' 253
find /dev -type b -exec stat -c '%t %T %n' {} + | grep -i '^fd a '
私のループデバイスの例では、10進数7も16進数7ですが、10進数16は16進数10です。
# find /dev -type b -exec stat -c '%t %T %n' {} + | grep -i '^7 10 '
7 10 /dev/loop1
デバイスのメジャー番号とマイナー番号(サイズ、権限、mtimeなどと同じ)で検索を細分化できる場合ははるかに簡単ですが(10進数を16進数にstat
変換する必要はありませんgrep
)、AFAICTではそうではありません。この能力を持っています。find
man find