►
Description
David Zafman walks us through ceph-objectstore-tool.
A
A
So
yeah,
actually
I
was
going
to
talk
about
the
options
which
is
going
to
also
make
it
clear
what
different
kinds
of
things
that
you
can
do
with
it.
That's
good.
This
is
using
the
boost,
option,
libraries
or
whatever
you
call
it,
and
if
you,
you
may
need
to
look
at
the
docs
on
that
I'm
not
going
to
go
into
the
details
there,
but
it
is
using
a
feature
where
it
has
positional
arguments
as
well
as
regular
arguments.
B
A
A
A
A
A
So
I
definitely
wanted
to
go
over
that
option
stuff
because
yeah
we
had
a
case
where
somebody
added
an
OP
and
then
they
try
to
use
the
positional
arguments
as
the
extra
arguments
and
it
got
confusing,
but
it
it
makes
the
code
confusing
because
it
had
to
to
provide
that
semantics.
It
had
to
actually
use
this
object
argument
as
the
as
like
one
positional
argument,
the
first
positional
argument
for
one
of
the
ops
and
that's
not
consistent
with
the
rest
of
the
the
rest
of
the
features,
but
it
worked
out.
A
A
A
A
A
So,
let's
look
at
actually,
let's
look
at
lists
because,
in
order
for
you
to
operate
on
objects,
you
sometimes
want
to
list
out
the
JSON
of
all
your
objects
so
that
you
can
pick
the
one
that
you
want
to
operate
on
and
we
we
do
have
a
feature
where
you
can
just
name
the
object
and
as
long
as
there's
no
ambiguity,
that'll
work,
but
it's
not.
But
if
you
use,
if
you're
writing
a
script
or
something
you
should
use
the
JSON
and.
A
A
A
So,
by
the
time
we're
in
here
actually
we've
already
mounted
the
object
store
internally.
We
kind
of
skipped
over
that
in
main,
but
it's
doing
a
lot
of
the
things
that
an
OSD
does
when
it
starts
up.
So
it's
mounting
up
the
object
store
and
that
it
can
actually
operate
on
the
whether
it's
file,
store
or
blue
store.
It
can
modify,
it
can
modify
objects,
but
here
were
we've,
got
the
object,
store,
open
and
we're
using
object,
store,
commands.
B
A
A
A
A
A
A
A
The
info
to
examine
why
something's
going
wrong
with
the
with
the
with
the
PG
or
an
OSD
right.
So
if
you
look
here
just
a
lot
of
these
things
are
calling
in
to
everybody
should
realize
that
these
things
are
calling
in
to
the
OSD
code,
like
we
looked
at
the
creating
an
object
store
mounting
mounting
it
here,
we're
reading
the
info.
This
is
calling
into
OSD
code.
The
the
object
store
tool
is
linked
with
the
same
libraries
and
functions
that
are
available
to
the
to
the
OSD.
A
They
are
the
same
functions,
so
you
are
looking
at
the
you
know
we're
looking
examining
these
data
structures.
It's
not
separate
code.
There
shouldn't
be
code
here
that
that
duplicates
the
OSD
code
unless
absolutely
necessary
for
some
reason,
but
I
I,
don't
know
why
that
would
ever
be.
Oh
well,
yeah.
Actually
we
did
some
passed.
Some
weird
passed
interval
stuff
at
one
point
that
got
pulled
out
on
import.
A
Oh
so
I
mean
one
of
the
important
things
that
the
object
store
tool
does
that
you
want
to
do
usually
when
you're
goofing
around
with
a
PG.
Is
you
want
to
export
the
PG
first
just
for
safety,
so
export
and
import
our
object,
store
tool,
features
and
most
people?
The
first
thing
you
might
do
if
you're
gonna
start
mucking
about
and
modifying
anything,
is
to
do
an
export,
so
export.
A
A
That's
also
in
encode
it
encodes,
you
know
binary
structures
like
the
info
and
the
log,
and
it
has
these
sections
that
are
delineated
in
the
in
the
export
file.
So
there's
the
metadata
section.
So
that's
where
it
has
all
the
miscellaneous
items
about
the
PG
and
it
write.
It
writes
one
OSD
map
the
current
map,
but
that
may
be
not
really
necessary
anymore
and
then
it
goes
through
every
file.
A
A
Purview
to
set
it
and
read
it
back,
it's
the
only
one
that
well.
Actually
some
of
this
code
is
shared
with
the
Rados
command
so
that
you
can
import
into
a
pool
instead
of
re-importing
the
objects
as
the
same
PG.
Again
the
object,
store
tool
itself,
exports,
a
PG
and
imports
a
PG.
The
Rados
command
can
import.
It
can
look
at
an
imported
PG
file
and
just
bring
those
objects
into
a
different
pool.
A
It
could
even
be
a
different
cluster
I
think,
but
if
you're
importing
a
PG,
it
must
be
the
same
cluster
and
it
resurrects
the
PG.
So
so,
if
you're
gonna
start
modifying
objects,
the
first
thing
you're
gonna
want
to
do
just
for
safety
sake
is
export.
The
PG
make
your
changes.
If
anything
goes
wrong,
then
you
can
remove
the
the
one
that
you
broke
and
then
just
re
re
import
it
from
your
saved
your
saved
export.
A
C
C
A
If
you
were
operating
on
a
file,
the
convenient
way
to
do
it
is,
as
we
talked
about
the
parsing,
if
I
just
say
you
know,
object
name.
If
there
was
an
object,
called
object.
Name
then
I
could
do
like
set
bytes
and
then
give
it
a
file,
so
basically
read
at
C
password
and
write
it
into
object,
name
so
set
the
bytes.
A
In
this
case,
object
name
would
have
to
already
exist
because
it's
going
to
look
it
up
in
order
to
get
the
JSON
of
to
create
a
gh
object
or
it.
But
that's
just
a
quirk
of
this-
is
like
really
convenient.
It's
just
a
little
quirky
when
you're
just
naming
the
name
cuz,
you
might
get
output
like
like
there's
more
than
one
object
name.
So
sorry,
you
know
can't
do
it
I,
don't
know
what
you
mean.
You
know
it's
not
specific
enough.
A
A
A
A
We
made
the
remove
PG,
require
you
to
specify
the
force
option
because
we
don't
want
somebody
like
removing
you
know
you
don't
want
to
remove
a
PG
by
mistake,
so
there's
export
and
remove
as
an
option
so
for
safety
sake.
You
should
do
export
and
remove
in
case
you
remove
the
wrong
one.
You
could
reinforce
it
and
if
you
really
know
what
you're
doing
and
you're
absolutely
sure
you
could
do
a
remove
and
use
the
force
option.
A
Yeah
so
most
cases,
if
you're
doing
repairs,
if
you're
just
examining
stuff,
you
could
examine,
like
the
PG
log,
I
mean
that
gets
into
some.
In
order
for
you
to
understand
it,
it's
gonna
be
more
involved
in
terms
of
you
kind
of
have
to
know
the
code
if
you're
getting
to
that
level
of
looking
through
a
PG
log.
A
And
then
you
know
you
might
have
to
add
in
here
whether
it's
like
Rico
does
it
require
a
PG
ID?
You
should
look
at
that
if
it
only
applied
to
like
blue
store,
for
example,
then
you
might
say:
oh
hey.
This
command
only
applies
to
blue
store
if
they're
trying
to
do
it
with
file
store.
So
you're
gonna
do
all
your
like
error.
A
B
Guess
a
lot
of
use
case
I've
seen,
is
kind
of
manually
moving
data
away
from
OS
DS
that
maybe
can't
start
up
for
some
reason,
because
they've
encountered
some
kind
of
crazy
bug
or
may
have
suffered
a
power
failure
and
their
power
loss.
Detection
wasn't
placed
correctly.
So
maybe
that
whiskey
itself
can't
start
up,
but
you
can
still
access
the
Opera
data
to
kind
of
export
from
when
I
was
vegan
import
into
a
different
noise.
D.
A
Okay,
that's
I,
don't
have
anything
else
to
say
about
that:
I
mean
that
that's
more
of
like
how
we're
yeah
I
mean
we
could
talk
about
how
we're
gonna,
how
we
might
use
the
object,
store
tool,
but
yeah
I
thought.
We
were
gonna
talk
more
about
just
the
code
here
and
if
you
had
to
modify
it
or
add
to
it.
B
A
A
D
A
D
D
A
D
D
A
Is
just
conjecture
and
if
you
flipped
something
to
say
FreeBSD
I
want
to
just
store
it
in
the
ohm
apps
then,
and
you
didn't
change
that
compilation
or.
However,
you
did
that
I'm,
not
sure
where
that
is.
You
didn't
do
that
for
the
object
store
tool,
then
it
could
be.
Do
it
trying
to
do
the
wrong
thing
so
make
sure
that
your
compilation
options
for
the
OSD
are
reflected
in
the
compilation
options
for
the
object
store
tool
because,
like
I
said
it's
like
an
OSD,
it's
like
an
OSD
so
makes
me
double-check
that.
D
A
I'm,
looking
for
my
presentation,
oh
I
just
had
it
as
a
PT.
Where
is
that.