From bd301d459fce7d4f7a09e5db1107d3de26bedaa7 Mon Sep 17 00:00:00 2001 From: Kenneth Van Alstyne Date: Fri, 14 Dec 2018 14:27:10 -0600 Subject: Added support for detecting Ceph BlueStore Block Devices --- libblkid/src/superblocks/bluestore.c | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 libblkid/src/superblocks/bluestore.c (limited to 'libblkid') diff --git a/libblkid/src/superblocks/bluestore.c b/libblkid/src/superblocks/bluestore.c new file mode 100644 index 000000000..24c56f24a --- /dev/null +++ b/libblkid/src/superblocks/bluestore.c @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2018 by Kenneth Van Alstyne + * + * This file may be redistributed under the terms of the + * GNU Lesser General Public License. + * + * + * Ceph BlueStore is one of the supported storage + * methods for Object Storage Devices (OSDs). + * This is used to detect the backing block devices + * used for these types of OSDs in a Ceph Cluster. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "bitops.h" +#include "superblocks.h" + +#define BLUESTORE_MAGIC_L 22 + +struct bluestore_phdr { + uint8_t magic[BLUESTORE_MAGIC_L]; + uint32_t version; +} __attribute__((packed)); + +static int probe_bluestore(blkid_probe pr, const struct blkid_idmag *mag) +{ + struct bluestore_phdr *header; + + header = blkid_probe_get_sb(pr, mag, struct bluestore_phdr); + if (header == NULL) + return errno ? -errno : 1; + + blkid_probe_sprintf_version(pr, "%u", le32_to_cpu(header->version)); + return 0; +} + +const struct blkid_idinfo bluestore_idinfo = +{ + .name = "ceph_bluestore", + .usage = BLKID_USAGE_OTHER, + .probefunc = probe_bluestore, + .magics = + { + { .magic = "bluestore block device", .len = 22 } + } +}; -- cgit v1.2.3-55-g7522 From 4125497278525da7fdac70bc92d11b9b2b6ad634 Mon Sep 17 00:00:00 2001 From: Kenneth Van Alstyne Date: Fri, 14 Dec 2018 14:32:13 -0600 Subject: Finished up BlueStore support --- libblkid/src/Makemodule.am | 1 + libblkid/src/superblocks/superblocks.c | 1 + libblkid/src/superblocks/superblocks.h | 1 + 3 files changed, 3 insertions(+) (limited to 'libblkid') diff --git a/libblkid/src/Makemodule.am b/libblkid/src/Makemodule.am index 4109561c4..0ecb5579e 100644 --- a/libblkid/src/Makemodule.am +++ b/libblkid/src/Makemodule.am @@ -49,6 +49,7 @@ libblkid_la_SOURCES = \ libblkid/src/superblocks/befs.c \ libblkid/src/superblocks/bfs.c \ libblkid/src/superblocks/bitlocker.c \ + libblkid/src/superblocks/bluestore.c \ libblkid/src/superblocks/btrfs.c \ libblkid/src/superblocks/cramfs.c \ libblkid/src/superblocks/ddf_raid.c \ diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c index 70d4c2697..277a2c6de 100644 --- a/libblkid/src/superblocks/superblocks.c +++ b/libblkid/src/superblocks/superblocks.c @@ -102,6 +102,7 @@ static const struct blkid_idinfo *idinfos[] = &jmraid_idinfo, &bcache_idinfo, + &bluestore_idinfo, &drbd_idinfo, &drbdmanage_idinfo, &drbdproxy_datalog_idinfo, diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h index 11c16e4b4..3313d0245 100644 --- a/libblkid/src/superblocks/superblocks.h +++ b/libblkid/src/superblocks/superblocks.h @@ -70,6 +70,7 @@ extern const struct blkid_idinfo zfs_idinfo; extern const struct blkid_idinfo bfs_idinfo; extern const struct blkid_idinfo vmfs_volume_idinfo; extern const struct blkid_idinfo vmfs_fs_idinfo; +extern const struct blkid_idinfo bluestore_idinfo; extern const struct blkid_idinfo drbd_idinfo; extern const struct blkid_idinfo drbdmanage_idinfo; extern const struct blkid_idinfo drbdproxy_datalog_idinfo; -- cgit v1.2.3-55-g7522