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

不知道为什么微信公众号编辑器的代码功能抽风了,一点击插入代码就会合并成一行。

发表评论

邮箱地址不会被公开。 必填项已用*标注