rbd help disk-usage
usage: rbd disk-usage [--pool <pool>] [--image <image>] [--snap <snap>]
[--format <format>] [--pretty-format]
- [--from-snap <from-snap>]
+ [--from-snap <from-snap>] [--exact]
<image-or-snap-spec>
Show disk usage stats for pool, image or snapshot.
--format arg output format (plain, json, or xml) [default: plain]
--pretty-format pretty formatting (json and xml)
--from-snap arg snapshot starting point
+ --exact compute exact disk usage (slow)
rbd help export
usage: rbd export [--pool <pool>] [--image <image>] [--snap <snap>]
const std::string& snap_name,
const std::string& from_snap_name,
librbd::Image &image, uint64_t size,
- TextTable& tbl, Formatter *f,
+ bool exact, TextTable& tbl, Formatter *f,
uint64_t *used_size) {
const char* from = NULL;
if (!from_snap_name.empty()) {
}
*used_size = 0;
- r = image.diff_iterate2(from, 0, size, false, true,
+ r = image.diff_iterate2(from, 0, size, false, !exact,
&disk_usage_callback, used_size);
if (r < 0) {
std::cerr << "rbd: failed to iterate diffs: " << cpp_strerror(r)
static int do_disk_usage(librbd::RBD &rbd, librados::IoCtx &io_ctx,
const char *imgname, const char *snapname,
- const char *from_snapname, Formatter *f) {
+ const char *from_snapname, bool exact, Formatter *f) {
std::vector<std::string> names;
int r = rbd.list(io_ctx, names);
if (r == -ENOENT) {
if (imgname == nullptr || found_from_snap ||
(found_from_snap && snapname != nullptr && snap->name == snapname)) {
r = compute_image_disk_usage(*name, snap->name, last_snap_name,
- snap_image, snap->size, tbl, f,
+ snap_image, snap->size, exact, tbl, f,
&used_size);
if (r < 0) {
goto out;
if (snapname == NULL) {
r = compute_image_disk_usage(*name, "", last_snap_name, image, info.size,
- tbl, f, &used_size);
+ exact, tbl, f, &used_size);
if (r < 0) {
goto out;
}
at::add_format_options(options);
options->add_options()
(at::FROM_SNAPSHOT_NAME.c_str(), po::value<std::string>(),
- "snapshot starting point");
+ "snapshot starting point")
+ ("exact", po::bool_switch(), "compute exact disk usage (slow)");
}
int execute(const po::variables_map &vm,
image_name.empty() ? nullptr: image_name.c_str(),
snap_name.empty() ? nullptr : snap_name.c_str(),
from_snap_name.empty() ? nullptr : from_snap_name.c_str(),
- formatter.get());
+ vm["exact"].as<bool>(), formatter.get());
if (r < 0) {
std::cerr << "rbd: du failed: " << cpp_strerror(r) << std::endl;
return r;