1 .. _ceph-volume-lvm-prepare:
5 This subcommand allows a :term:`filestore` or :term:`bluestore` setup. It is
6 recommended to pre-provision a logical volume before using it with
9 Logical volumes are not altered except for adding extra metadata.
11 .. note:: This is part of a two step process to deploy an OSD. If looking for
12 a single-call way, please see :ref:`ceph-volume-lvm-create`
14 To help identify volumes, the process of preparing a volume (or volumes) to
15 work with Ceph, the tool will assign a few pieces of metadata information using
18 :term:`LVM tags` makes volumes easy to discover later, and help identify them as
19 part of a Ceph system, and what role they have (journal, filestore, bluestore,
22 Although initially :term:`filestore` is supported (and supported by default)
23 the back end can be specified with:
26 * :ref:`--filestore <ceph-volume-lvm-prepare_filestore>`
27 * :ref:`--bluestore <ceph-volume-lvm-prepare_bluestore>`
29 .. _ceph-volume-lvm-prepare_filestore:
33 This is the OSD backend that allows preparation of logical volumes for
34 a :term:`filestore` objectstore OSD.
36 It can use a logical volume for the OSD data and a partitioned physical device
37 or logical volume for the journal. No special preparation is needed for these
38 volumes other than following the minimum size requirements for data and
41 The API call looks like::
43 ceph-volume prepare --filestore --data data --journal journal
45 For enabling :ref:`encryption <ceph-volume-lvm-encryption>`, the ``--dmcrypt`` flag is required::
47 ceph-volume lvm prepare --filestore --dmcrypt --data volume_group/lv_name --journal journal
49 There is flexibility to use a raw device or partition as well for ``--data``
50 that will be converted to a logical volume. This is not ideal in all situations
51 since ``ceph-volume`` is just going to create a unique volume group and
52 a logical volume from that device.
54 When using logical volumes for ``--data``, the value *must* be a volume group
55 name and a logical volume name separated by a ``/``. Since logical volume names
56 are not enforced for uniqueness, this prevents using the wrong volume. The
57 ``--journal`` can be either a logical volume *or* a partition.
59 When using a partition, it *must* contain a ``PARTUUID`` discoverable by
60 ``blkid``, so that it can later be identified correctly regardless of the
61 device name (or path).
63 When using a partition, this is how it would look for ``/dev/sdc1``::
65 ceph-volume prepare --filestore --data volume_group/lv_name --journal /dev/sdc1
67 For a logical volume, just like for ``--data``, a volume group and logical
68 volume name are required::
70 ceph-volume prepare --filestore --data volume_group/lv_name --journal volume_group/journal_lv
72 A generated uuid is used to ask the cluster for a new OSD. These two pieces are
73 crucial for identifying an OSD and will later be used throughout the
74 :ref:`ceph-volume-lvm-activate` process.
76 The OSD data directory is created using the following convention::
78 /var/lib/ceph/osd/<cluster name>-<osd id>
80 At this point the data volume is mounted at this location, and the journal
83 ln -s /path/to/journal /var/lib/ceph/osd/<cluster_name>-<osd-id>/journal
85 The monmap is fetched using the bootstrap key from the OSD::
87 /usr/bin/ceph --cluster ceph --name client.bootstrap-osd
88 --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
89 mon getmap -o /var/lib/ceph/osd/<cluster name>-<osd id>/activate.monmap
91 ``ceph-osd`` will be called to populate the OSD directory, that is already
92 mounted, re-using all the pieces of information from the initial steps::
94 ceph-osd --cluster ceph --mkfs --mkkey -i <osd id> \
95 --monmap /var/lib/ceph/osd/<cluster name>-<osd id>/activate.monmap --osd-data \
96 /var/lib/ceph/osd/<cluster name>-<osd id> --osd-journal /var/lib/ceph/osd/<cluster name>-<osd id>/journal \
97 --osd-uuid <osd uuid> --keyring /var/lib/ceph/osd/<cluster name>-<osd id>/keyring \
98 --setuser ceph --setgroup ceph
100 .. _ceph-volume-lvm-existing-osds:
104 For existing clusters that want to use this new system and have OSDs that are
105 already running there are a few things to take into account:
107 .. warning:: this process will forcefully format the data device, destroying
108 existing data, if any.
110 * OSD paths should follow this convention::
112 /var/lib/ceph/osd/<cluster name>-<osd id>
114 * Preferably, no other mechanisms to mount the volume should exist, and should
115 be removed (like fstab mount points)
117 The one time process for an existing OSD, with an ID of 0 and
118 using a ``"ceph"`` cluster name would look like::
120 ceph-volume lvm prepare --filestore --osd-id 0 --osd-fsid E3D291C1-E7BF-4984-9794-B60D9FA139CB
122 The command line tool will not contact the monitor to generate an OSD ID and
123 will format the LVM device in addition to storing the metadata on it so that it
124 can later be startednot contact the monitor to generate an OSD ID and will
125 format the LVM device in addition to storing the metadata on it so that it can
126 later be started (for detailed metadata description see :ref:`ceph-volume-lvm-tags`).
129 .. _ceph-volume-lvm-prepare_bluestore:
133 The :term:`bluestore` objectstore is the default for new OSDs. It offers a bit
134 more flexibility for devices. Bluestore supports the following configurations:
136 * A block device, a block.wal, and a block.db device
137 * A block device and a block.wal device
138 * A block device and a block.db device
139 * A single block device
141 It can accept a whole device (or partition), or a logical volume for ``block``.
142 If a physical device is provided it will then be turned into a logical volume.
143 This allows a simpler approach at using LVM but at the cost of flexibility:
144 there are no options or configurations to change how the LV is created.
146 The ``block`` is specified with the ``--data`` flag, and in its simplest use
149 ceph-volume lvm prepare --bluestore --data vg/lv
151 A raw device can be specified in the same way::
153 ceph-volume lvm prepare --bluestore --data /path/to/device
155 For enabling :ref:`encryption <ceph-volume-lvm-encryption>`, the ``--dmcrypt`` flag is required::
157 ceph-volume lvm prepare --bluestore --dmcrypt --data vg/lv
159 If a ``block.db`` or a ``block.wal`` is needed (they are optional for
160 bluestore) they can be specified with ``--block.db`` and ``--block.wal``
161 accordingly. These can be a physical device (they **must** be a partition) or
164 For both ``block.db`` and ``block.wal`` partitions aren't made logical volumes
165 because they can be used as-is. Logical Volumes are also allowed.
167 While creating the OSD directory, the process will use a ``tmpfs`` mount to
168 place all the files needed for the OSD. These files are initially created by
169 ``ceph-osd --mkfs`` and are fully ephemeral.
171 A symlink is always created for the ``block`` device, and optionally for
172 ``block.db`` and ``block.wal``. For a cluster with a default name, and an OSD
173 id of 0, the directory could look like::
175 # ls -l /var/lib/ceph/osd/ceph-0
176 lrwxrwxrwx. 1 ceph ceph 93 Oct 20 13:05 block -> /dev/ceph-be2b6fbd-bcf2-4c51-b35d-a35a162a02f0/osd-block-25cf0a05-2bc6-44ef-9137-79d65bd7ad62
177 lrwxrwxrwx. 1 ceph ceph 93 Oct 20 13:05 block.db -> /dev/sda1
178 lrwxrwxrwx. 1 ceph ceph 93 Oct 20 13:05 block.wal -> /dev/ceph/osd-wal-0
179 -rw-------. 1 ceph ceph 37 Oct 20 13:05 ceph_fsid
180 -rw-------. 1 ceph ceph 37 Oct 20 13:05 fsid
181 -rw-------. 1 ceph ceph 55 Oct 20 13:05 keyring
182 -rw-------. 1 ceph ceph 6 Oct 20 13:05 ready
183 -rw-------. 1 ceph ceph 10 Oct 20 13:05 type
184 -rw-------. 1 ceph ceph 2 Oct 20 13:05 whoami
186 In the above case, a device was used for ``block`` so ``ceph-volume`` create
187 a volume group and a logical volume using the following convention:
189 * volume group name: ``ceph-{cluster fsid}`` or if the vg exists already
190 ``ceph-{random uuid}``
192 * logical volume name: ``osd-block-{osd_fsid}``
198 To set the crush device class for the OSD, use the ``--crush-device-class`` flag. This will
199 work for both bluestore and filestore OSDs::
201 ceph-volume lvm prepare --bluestore --data vg/lv --crush-device-class foo
206 The following tags will get applied as part of the preparation process
207 regardless of the type of volume (journal or data) or OSD objectstore:
213 * ``crush_device_class``
215 For :term:`filestore` these tags will be added:
220 For :term:`bluestore` these tags will be added:
229 .. note:: For the complete lvm tag conventions see :ref:`ceph-volume-lvm-tag-api`
234 To recap the ``prepare`` process for :term:`bluestore`:
236 #. Accept a logical volume for block or a raw device (that will get converted
238 #. Accept partitions or logical volumes for ``block.wal`` or ``block.db``
239 #. Generate a UUID for the OSD
240 #. Ask the monitor get an OSD ID reusing the generated UUID
241 #. OSD data directory is created on a tmpfs mount.
242 #. ``block``, ``block.wal``, and ``block.db`` are symlinked if defined.
243 #. monmap is fetched for activation
244 #. Data directory is populated by ``ceph-osd``
245 #. Logical Volumes are are assigned all the Ceph metadata using lvm tags
248 And the ``prepare`` process for :term:`filestore`:
250 #. Accept only logical volumes for data and journal (both required)
251 #. Generate a UUID for the OSD
252 #. Ask the monitor get an OSD ID reusing the generated UUID
253 #. OSD data directory is created and data volume mounted
254 #. Journal is symlinked from data volume to journal location
255 #. monmap is fetched for activation
256 #. devices is mounted and data directory is populated by ``ceph-osd``
257 #. data and journal volumes are assigned all the Ceph metadata using lvm tags