ceph升级到bluestore后,df命令不能直接显示osd id与磁盘/dev/sdN的对应关系了,如:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
......
tmpfs 24700568 24 24700544 1% /var/lib/ceph/osd/ceph-7
tmpfs 24700568 24 24700544 1% /var/lib/ceph/osd/ceph-8
tmpfs 24700568 24 24700544 1% /var/lib/ceph/osd/ceph-6
......
以前的/dev/sdN被tmpfs取代,如果某个osd故障怎么知道它对应哪块磁盘呢?
其实OSD磁盘对应的设备就链接在osd挂载目录下面的block,如:
# ls -l /var/lib/ceph/osd/ceph-7/
total 24
lrwxrwxrwx 1 ceph ceph 93 Jan 13 22:00 block -> /dev/ceph-a7179907-59ac-4103-a14e-b3cad6a99cc0/osd-block-ebf1859b-4fc5-4941-8c3e-b89a35f5654c
lrwxrwxrwx 1 ceph ceph 90 Jan 13 22:00 block.db -> /dev/ceph-bc317814-25b6-4c2c-adb0-9843035ca687/osd-db-5c7cf192-3718-43f8-9dd0-401e26b8e689
......
这个"block"就是对应的OSD设备,"block.db"是固态硬盘做的osd的db,那怎么把后面那一串让人眼花缭乱的uuid还原为熟悉的/dev/sdN呢,使用命令"dmsetup",如:
# dmsetup table /dev/ceph-a7179907-59ac-4103-a14e-b3cad6a99cc0/osd-block-ebf1859b-4fc5-4941-8c3e-b89a35f5654c
0 3906994176 linear 8:32 2048
注意这个编号"8:32",对比一下
root@node011:~# ls -l /dev/sd*
......
brw-rw---- 1 root disk 8, 16 Jan 13 22:00 /dev/sdb
brw-rw---- 1 root disk 8, 32 Jan 13 22:00 /dev/sdc
brw-rw---- 1 root disk 8, 48 Jan 13 22:00 /dev/sdd
......
我们就知道了osd 7 对应的磁盘是 /dev/sdc
最后,搞个命令组合连续批量处理:
ids=$(df -h | grep ceph- | cut -d'-' -f2)
for i in ${ids[@]}
do
echo -e "n OSD $i";
dmsetup table $(ls -l /var/lib/ceph/osd/ceph-$i/block | awk '{print $11}')
done
不知道为什么微信公众号编辑器的代码功能抽风了,一点击插入代码就会合并成一行。