---
name: "ceph-dencoder"
section: "8"
platform: "linux"
package: "ceph-common"
version: "18.2.7+ds-1+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ceph-dencoder"
---

# ceph-dencoder(8)

ceph encoder/decoder utility

## NAME

ceph-dencoder - ceph encoder/decoder utility

## SYNOPSIS

```
ceph-dencoder [commands...]
```

## DESCRIPTION

**ceph-dencoder** is a utility to encode, decode, and dump ceph data structures.  It is used for debugging and for testing inter-version compatibility.

**ceph-dencoder** takes a simple list of commands and performs them in order.

## COMMANDS

- **version**

  Print the version string for the **ceph-dencoder** binary.

- **import \<file\>**

  Read a binary blob of encoded data from the given file.  It will be placed in an in-memory buffer.

- **export \<file\>**

  Write the contents of the current in-memory buffer to the given file.

- **list\_types**

  List the data types known to this build of **ceph-dencoder**.

- **type \<name\>**

  Select the given type for future **encode** or **decode** operations.

- **skip \<bytes\>**

  Seek \<bytes\> into the imported file before reading data structure, use this with objects that have a preamble/header before the object of interest.

- **decode**

  Decode the contents of the in-memory buffer into an instance of the previously selected type.  If there is an error, report it.

- **encode**

  Encode the contents of the in-memory instance of the previously selected type to the in-memory buffer.

- **dump\_json**

  Print a JSON-formatted description of the in-memory object.

- **count\_tests**

  Print the number of built-in test instances of the previously selected type that **ceph-dencoder** is able to generate.

- **select\_test \<n\>**

  Select the given built-in test instance as the in-memory instance of the type.

- **get\_features**

  Print the decimal value of the feature set supported by this version of **ceph-dencoder**.  Each bit represents a feature.  These correspond to CEPH\_FEATURE\_\* defines in src/include/ceph\_features.h.

- **set\_features \<f\>**

  Set the feature bits provided to **encode** to *f*.  This allows you to encode objects such that they can be understood by old versions of the software (for those types that support it).

## EXAMPLE

Say you want to examine an attribute on an object stored by **ceph-osd**.  You can do this:

```
$ cd /mnt/osd.12/current/2.b_head
$ attr -l foo_bar_head_EFE6384B
Attribute "ceph.snapset" has a 31 byte value for foo_bar_head_EFE6384B
Attribute "ceph._" has a 195 byte value for foo_bar_head_EFE6384B
$ attr foo_bar_head_EFE6384B -g ceph._ -q > /tmp/a
$ ceph-dencoder type object_info_t import /tmp/a decode dump_json
{ "oid": { "oid": "foo",
      "key": "bar",
      "snapid": -2,
      "hash": 4024842315,
      "max": 0},
  "locator": { "pool": 2,
      "preferred": -1,
      "key": "bar"},
  "category": "",
  "version": "9'1",
  "prior_version": "0'0",
  "last_reqid": "client.4116.0:1",
  "size": 1681,
  "mtime": "2012-02-21 08:58:23.666639",
  "lost": 0,
  "wrlock_by": "unknown.0.0:0",
  "snaps": [],
  "truncate_seq": 0,
  "truncate_size": 0,
  "watchers": {}}
```

Alternatively, perhaps you wish to dump an internal CephFS metadata object, you might do that like this:

```
$ rados -p metadata get mds_snaptable mds_snaptable.bin
$ ceph-dencoder type SnapServer skip 8 import mds_snaptable.bin decode dump_json
{ "snapserver": { "last_snap": 1,
   "pending_noop": [],
   "snaps": [],
   "need_to_purge": {},
   "pending_create": [],
   "pending_destroy": []}}
```

## AVAILABILITY

**ceph-dencoder** is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to the Ceph documentation at *https://docs.ceph.com* for more information.

## SEE ALSO

[*ceph*(8)](/ceph/8.md)

## COPYRIGHT

2010-2014, Inktank Storage, Inc. and contributors. Licensed under Creative Commons Attribution Share Alike 3.0 (CC-BY-SA-3.0)
