4 .. _device management: ../rados/operations/devices
5 .. _libstoragemgmt: https://github.com/libstorage/libstoragemgmt
10 ``ceph-volume`` scans each host in the cluster from time to time in order
11 to determine which devices are present and whether they are eligible to be
14 To print a list of devices discovered by ``cephadm``, run this command:
18 ceph orch device ls [--hostname=...] [--wide] [--refresh]
23 Hostname Path Type Serial Size Health Ident Fault Available
24 srv-01 /dev/sdb hdd 15P0A0YFFRD6 300G Unknown N/A N/A No
25 srv-01 /dev/sdc hdd 15R0A08WFRD6 300G Unknown N/A N/A No
26 srv-01 /dev/sdd hdd 15R0A07DFRD6 300G Unknown N/A N/A No
27 srv-01 /dev/sde hdd 15P0A0QDFRD6 300G Unknown N/A N/A No
28 srv-02 /dev/sdb hdd 15R0A033FRD6 300G Unknown N/A N/A No
29 srv-02 /dev/sdc hdd 15R0A05XFRD6 300G Unknown N/A N/A No
30 srv-02 /dev/sde hdd 15R0A0ANFRD6 300G Unknown N/A N/A No
31 srv-02 /dev/sdf hdd 15R0A06EFRD6 300G Unknown N/A N/A No
32 srv-03 /dev/sdb hdd 15R0A0OGFRD6 300G Unknown N/A N/A No
33 srv-03 /dev/sdc hdd 15R0A0P7FRD6 300G Unknown N/A N/A No
34 srv-03 /dev/sdd hdd 15R0A0O7FRD6 300G Unknown N/A N/A No
36 Using the ``--wide`` option provides all details relating to the device,
37 including any reasons that the device might not be eligible for use as an OSD.
39 In the above example you can see fields named "Health", "Ident", and "Fault".
40 This information is provided by integration with `libstoragemgmt`_. By default,
41 this integration is disabled (because `libstoragemgmt`_ may not be 100%
42 compatible with your hardware). To make ``cephadm`` include these fields,
43 enable cephadm's "enhanced device scan" option as follows;
47 ceph config set mgr mgr/cephadm/device_enhanced_scan true
50 Although the libstoragemgmt library performs standard SCSI inquiry calls,
51 there is no guarantee that your firmware fully implements these standards.
52 This can lead to erratic behaviour and even bus resets on some older
53 hardware. It is therefore recommended that, before enabling this feature,
54 you test your hardware's compatibility with libstoragemgmt first to avoid
55 unplanned interruptions to services.
57 There are a number of ways to test compatibility, but the simplest may be
58 to use the cephadm shell to call libstoragemgmt directly - ``cephadm shell
59 lsmcli ldl``. If your hardware is supported you should see something like
64 Path | SCSI VPD 0x83 | Link Type | Serial Number | Health Status
65 ----------------------------------------------------------------------------
66 /dev/sda | 50000396082ba631 | SAS | 15P0A0R0FRD6 | Good
67 /dev/sdb | 50000396082bbbf9 | SAS | 15P0A0YFFRD6 | Good
70 After you have enabled libstoragemgmt support, the output will look something
76 Hostname Path Type Serial Size Health Ident Fault Available
77 srv-01 /dev/sdb hdd 15P0A0YFFRD6 300G Good Off Off No
78 srv-01 /dev/sdc hdd 15R0A08WFRD6 300G Good Off Off No
81 In this example, libstoragemgmt has confirmed the health of the drives and the ability to
82 interact with the Identification and Fault LEDs on the drive enclosures. For further
83 information about interacting with these LEDs, refer to `device management`_.
86 The current release of `libstoragemgmt`_ (1.8.8) supports SCSI, SAS, and SATA based
87 local disks only. There is no official support for NVMe devices (PCIe)
89 .. _cephadm-deploy-osds:
94 Listing Storage Devices
95 -----------------------
97 In order to deploy an OSD, there must be a storage device that is *available* on
98 which the OSD will be deployed.
100 Run this command to display an inventory of storage devices on all cluster hosts:
106 A storage device is considered *available* if all of the following
109 * The device must have no partitions.
110 * The device must not have any LVM state.
111 * The device must not be mounted.
112 * The device must not contain a file system.
113 * The device must not contain a Ceph BlueStore OSD.
114 * The device must be larger than 5 GB.
116 Ceph will not provision an OSD on a device that is not available.
121 There are a few ways to create new OSDs:
123 * Tell Ceph to consume any available and unused storage device:
127 ceph orch apply osd --all-available-devices
129 * Create an OSD from a specific device on a specific host:
133 ceph orch daemon add osd *<host>*:*<device-path>*
139 ceph orch daemon add osd host1:/dev/sdb
141 * You can use :ref:`drivegroups` to categorize device(s) based on their
142 properties. This might be useful in forming a clearer picture of which
143 devices are available to consume. Properties include device type (SSD or
144 HDD), device model names, size, and the hosts on which the devices exist:
148 ceph orch apply -i spec.yml
153 The ``--dry-run`` flag causes the orchestrator to present a preview of what
154 will happen without actually creating the OSDs.
160 ceph orch apply osd --all-available-devices --dry-run
164 NAME HOST DATA DB WAL
165 all-available-devices node1 /dev/vdb - -
166 all-available-devices node2 /dev/vdc - -
167 all-available-devices node3 /dev/vdd - -
169 .. _cephadm-osd-declarative:
174 The effect of ``ceph orch apply`` is persistent. This means that drives that
175 are added to the system after the ``ceph orch apply`` command completes will be
176 automatically found and added to the cluster. It also means that drives that
177 become available (by zapping, for example) after the ``ceph orch apply``
178 command completes will be automatically found and added to the cluster.
180 We will examine the effects of the following command:
184 ceph orch apply osd --all-available-devices
186 After running the above command:
188 * If you add new disks to the cluster, they will automatically be used to
190 * If you remove an OSD and clean the LVM physical volume, a new OSD will be
191 created automatically.
193 To disable the automatic creation of OSD on available devices, use the
194 ``unmanaged`` parameter:
196 If you want to avoid this behavior (disable automatic creation of OSD on available devices), use the ``unmanaged`` parameter:
200 ceph orch apply osd --all-available-devices --unmanaged=true
204 Keep these three facts in mind:
206 - The default behavior of ``ceph orch apply`` causes cephadm constantly to reconcile. This means that cephadm creates OSDs as soon as new drives are detected.
208 - Setting ``unmanaged: True`` disables the creation of OSDs. If ``unmanaged: True`` is set, nothing will happen even if you apply a new OSD service.
210 - ``ceph orch daemon add`` creates OSDs, but does not add an OSD service.
212 * For cephadm, see also :ref:`cephadm-spec-unmanaged`.
214 .. _cephadm-osd-removal:
219 Removing an OSD from a cluster involves two steps:
221 #. evacuating all placement groups (PGs) from the cluster
222 #. removing the PG-free OSD from the cluster
224 The following command performs these two steps:
228 ceph orch osd rm <osd_id(s)> [--replace] [--force]
238 Scheduled OSD(s) for removal
240 OSDs that are not safe to destroy will be rejected.
245 You can query the state of OSD operation with the following command:
249 ceph orch osd rm status
253 OSD_ID HOST STATE PG_COUNT REPLACE FORCE STARTED_AT
254 2 cephadm-dev done, waiting for purge 0 True False 2020-07-17 13:01:43.147684
255 3 cephadm-dev draining 17 False True 2020-07-17 13:01:45.162158
256 4 cephadm-dev started 42 False True 2020-07-17 13:01:45.162158
259 When no PGs are left on the OSD, it will be decommissioned and removed from the cluster.
262 After removing an OSD, if you wipe the LVM physical volume in the device used by the removed OSD, a new OSD will be created.
263 For more information on this, read about the ``unmanaged`` parameter in :ref:`cephadm-osd-declarative`.
268 It is possible to stop queued OSD removals by using the following command:
272 ceph orch osd rm stop <osd_id(s)>
278 ceph orch osd rm stop 4
282 Stopped OSD(s) removal
284 This resets the initial state of the OSD and takes it off the removal queue.
292 orch osd rm <osd_id(s)> --replace [--force]
298 ceph orch osd rm 4 --replace
302 Scheduled OSD(s) for replacement
304 This follows the same procedure as the procedure in the "Remove OSD" section, with
305 one exception: the OSD is not permanently removed from the CRUSH hierarchy, but is
306 instead assigned a 'destroyed' flag.
308 **Preserving the OSD ID**
310 The 'destroyed' flag is used to determine which OSD ids will be reused in the
313 If you use OSDSpecs for OSD deployment, your newly added disks will be assigned
314 the OSD ids of their replaced counterparts. This assumes that the new disks
315 still match the OSDSpecs.
317 Use the ``--dry-run`` flag to make certain that the ``ceph orch apply osd``
318 command does what you want it to. The ``--dry-run`` flag shows you what the
319 outcome of the command will be without making the changes you specify. When
320 you are satisfied that the command will do what you want, run the command
321 without the ``--dry-run`` flag.
325 The name of your OSDSpec can be retrieved with the command ``ceph orch ls``
327 Alternatively, you can use your OSDSpec file:
331 ceph orch apply osd -i <osd_spec_file> --dry-run
335 NAME HOST DATA DB WAL
336 <name_of_osd_spec> node1 /dev/vdb - -
339 When this output reflects your intention, omit the ``--dry-run`` flag to
340 execute the deployment.
343 Erasing Devices (Zapping Devices)
344 ---------------------------------
346 Erase (zap) a device so that it can be reused. ``zap`` calls ``ceph-volume
347 zap`` on the remote host.
351 ceph orch device zap <hostname> <path>
357 ceph orch device zap my_hostname /dev/sdx
360 If the unmanaged flag is unset, cephadm automatically deploys drives that
361 match the DriveGroup in your OSDSpec. For example, if you use the
362 ``all-available-devices`` option when creating OSDs, when you ``zap`` a
363 device the cephadm orchestrator automatically creates a new OSD in the
364 device. To disable this behavior, see :ref:`cephadm-osd-declarative`.
369 Automatically tuning OSD memory
370 ===============================
372 OSD daemons will adjust their memory consumption based on the
373 ``osd_memory_target`` config option (several gigabytes, by
374 default). If Ceph is deployed on dedicated nodes that are not sharing
375 memory with other services, cephadm can automatically adjust the per-OSD
376 memory consumption based on the total amount of RAM and the number of deployed
379 This option is enabled globally with::
381 ceph config set osd osd_memory_target_autotune true
383 Cephadm will start with a fraction
384 (``mgr/cephadm/autotune_memory_target_ratio``, which defaults to
385 ``.7``) of the total RAM in the system, subtract off any memory
386 consumed by non-autotuned daemons (non-OSDs, for OSDs for which
387 ``osd_memory_target_autotune`` is false), and then divide by the
390 The final targets are reflected in the config database with options like::
392 WHO MASK LEVEL OPTION VALUE
393 osd host:foo basic osd_memory_target 126092301926
394 osd host:bar basic osd_memory_target 6442450944
396 Both the limits and the current memory consumed by each daemon are visible from
397 the ``ceph orch ps`` output in the ``MEM LIMIT`` column::
399 NAME HOST PORTS STATUS REFRESHED AGE MEM USED MEM LIMIT VERSION IMAGE ID CONTAINER ID
400 osd.1 dael running (3h) 10s ago 3h 72857k 117.4G 17.0.0-3781-gafaed750 7015fda3cd67 9e183363d39c
401 osd.2 dael running (81m) 10s ago 81m 63989k 117.4G 17.0.0-3781-gafaed750 7015fda3cd67 1f0cc479b051
402 osd.3 dael running (62m) 10s ago 62m 64071k 117.4G 17.0.0-3781-gafaed750 7015fda3cd67 ac5537492f27
404 To exclude an OSD from memory autotuning, disable the autotune option
405 for that OSD and also set a specific memory target. For example,
409 ceph config set osd.123 osd_memory_target_autotune false
410 ceph config set osd.123 osd_memory_target 16G
415 Advanced OSD Service Specifications
416 ===================================
418 :ref:`orchestrator-cli-service-spec`\s of type ``osd`` are a way to describe a
419 cluster layout, using the properties of disks. Service specifications give the
420 user an abstract way to tell Ceph which disks should turn into OSDs with which
421 configurations, without knowing the specifics of device names and paths.
423 Service specifications make it possible to define a yaml or json file that can
424 be used to reduce the amount of manual work involved in creating OSDs.
426 For example, instead of running the following command:
428 .. prompt:: bash [monitor.1]#
430 ceph orch daemon add osd *<host>*:*<path-to-device>*
432 for each device and each host, we can define a yaml or json file that allows us
433 to describe the layout. Here's the most basic example.
435 Create a file called (for example) ``osd_spec.yml``:
440 service_id: default_drive_group <- name of the drive_group (name can be custom)
442 host_pattern: '*' <- which hosts to target, currently only supports globs
443 data_devices: <- the type of devices you are applying specs to
444 all: true <- a filter, check below for a full list
448 #. Turn any available device (ceph-volume decides what 'available' is) into an
449 OSD on all hosts that match the glob pattern '*'. (The glob pattern matches
450 against the registered hosts from `host ls`) A more detailed section on
451 host_pattern is available below.
453 #. Then pass it to `osd create` like this:
455 .. prompt:: bash [monitor.1]#
457 ceph orch apply osd -i /path/to/osd_spec.yml
459 This instruction will be issued to all the matching hosts, and will deploy
462 Setups more complex than the one specified by the ``all`` filter are
463 possible. See :ref:`osd_filters` for details.
465 A ``--dry-run`` flag can be passed to the ``apply osd`` command to display a
466 synopsis of the proposed layout.
470 .. prompt:: bash [monitor.1]#
472 ceph orch apply osd -i /path/to/osd_spec.yml --dry-run
482 Filters are applied using an `AND` gate by default. This means that a drive
483 must fulfill all filter criteria in order to get selected. This behavior can
484 be adjusted by setting ``filter_logic: OR`` in the OSD specification.
486 Filters are used to assign disks to groups, using their attributes to group
489 The attributes are based off of ceph-volume's disk query. You can retrieve
490 information about the attributes with this command:
494 ceph-volume inventory </path/to/disk>
499 Specific disks can be targeted by vendor or model:
503 model: disk_model_name
509 vendor: disk_vendor_name
515 Specific disks can be targeted by `Size`:
524 Size specifications can be of the following forms:
533 To include disks of an exact size
539 To include disks within a given range of size:
545 To include disks that are less than or equal to 10G in size:
551 To include disks equal to or greater than 40G in size:
557 Sizes don't have to be specified exclusively in Gigabytes(G).
559 Other units of size are supported: Megabyte(M), Gigabyte(G) and Terrabyte(T).
560 Appending the (B) for byte is also supported: ``MB``, ``GB``, ``TB``.
566 This operates on the 'rotational' attribute of the disk.
572 `1` to match all disks that are rotational
574 `0` to match all disks that are non-rotational (SSD, NVME etc)
580 This will take all disks that are 'available'
582 Note: This is exclusive for the data_devices section.
592 If you have specified some valid filters but want to limit the number of disks that they match, use the ``limit`` directive:
598 For example, if you used `vendor` to match all disks that are from `VendorA`
599 but want to use only the first two, you could use `limit`:
607 Note: `limit` is a last resort and shouldn't be used if it can be avoided.
613 There are multiple optional settings you can use to change the way OSDs are deployed.
614 You can add these options to the base level of a DriveGroup for it to take effect.
616 This example would deploy all OSDs with encryption enabled.
621 service_id: example_osd_spec
628 See a full list in the DriveGroupSpecs
630 .. py:currentmodule:: ceph.deployment.drive_group
632 .. autoclass:: DriveGroupSpec
634 :exclude-members: from_json
642 All nodes with the same setup
656 This is a common setup and can be described quite easily:
661 service_id: osd_spec_default
665 model: HDD-123-foo <- note that HDD-123 would also be valid
667 model: MC-55-44-XZ <- same here, MC-55-44 is valid
669 However, we can improve it by reducing the filters on core properties of the drives:
674 service_id: osd_spec_default
682 Now, we enforce all rotating devices to be declared as 'data devices' and all non-rotating devices will be used as shared_devices (wal, db)
684 If you know that drives with more than 2TB will always be the slower data devices, you can also filter by size:
689 service_id: osd_spec_default
697 Note: All of the above DriveGroups are equally valid. Which of those you want to use depends on taste and on how much you expect your node layout to change.
703 Here we have two distinct setups
723 * 20 HDDs should share 2 SSDs
724 * 10 SSDs should share 2 NVMes
726 This can be described with two layouts.
731 service_id: osd_spec_hdd
738 limit: 2 (db_slots is actually to be favoured here, but it's not implemented yet)
741 service_id: osd_spec_ssd
749 This would create the desired layout by using all HDDs as data_devices with two SSD assigned as dedicated db/wal devices.
750 The remaining SSDs(8) will be data_devices that have the 'VendorC' NVMEs assigned as dedicated db/wal devices.
752 The advanced case (with non-uniform nodes)
753 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
755 The examples above assumed that all nodes have the same drives. That's however not always the case.
783 You can use the 'host_pattern' key in the layout to target certain nodes. Salt target notation helps to keep things easy.
789 service_id: osd_spec_node_one_to_five
791 host_pattern: 'node[1-5]'
798 service_id: osd_spec_six_to_ten
800 host_pattern: 'node[6-10]'
806 This applies different OSD specs to different hosts depending on the `host_pattern` key.
811 All previous cases co-located the WALs with the DBs.
812 It's however possible to deploy the WAL on a dedicated device as well, if it makes sense.
832 The OSD spec for this case would look like the following (using the `model` filter):
837 service_id: osd_spec_default
848 It is also possible to specify directly device paths in specific hosts like the following:
853 service_id: osd_using_paths
869 This can easily be done with other filters, like `size` or `vendor` as well.
871 Activate existing OSDs
872 ======================
874 In case the OS of a host was reinstalled, existing OSDs need to be activated
875 again. For this use case, cephadm provides a wrapper for :ref:`ceph-volume-lvm-activate` that
876 activates all existing OSDs on a host.
880 ceph cephadm osd activate <host>...
882 This will scan all existing disks for OSDs and deploy corresponding daemons.