diff options
Diffstat (limited to 'c_src')
-rw-r--r-- | c_src/cmd_fs.c | 97 |
1 files changed, 64 insertions, 33 deletions
diff --git a/c_src/cmd_fs.c b/c_src/cmd_fs.c index 40d4b1cb..28bf704e 100644 --- a/c_src/cmd_fs.c +++ b/c_src/cmd_fs.c @@ -56,46 +56,43 @@ static void dev_usage_to_text(struct printbuf *out, if (type != BCH_DATA_unstriped) used += u->d[type].sectors; - /* Include sizes in short summary */ prt_printf(out, "%s (device %u):\t%s\r%s\r %02u%%\n", d->label ?: "(no label)", d->idx, d->dev ?: "(device not found)", bch2_member_states[u->state], (unsigned) (used * 100 / capacity)); - if (full) { - printbuf_indent_add(out, 2); - prt_printf(out, "\tdata\rbuckets\rfragmented\r\n"); + printbuf_indent_add(out, 2); + prt_printf(out, "\tdata\rbuckets\rfragmented\r\n"); - for (unsigned type = 0; type < u->nr_data_types; type++) { - bch2_prt_data_type(out, type); - prt_printf(out, ":\t"); + for (unsigned type = 0; type < u->nr_data_types; type++) { + bch2_prt_data_type(out, type); + prt_printf(out, ":\t"); - /* sectors are 0 for empty bucket data types, so calculate sectors for them */ - u64 sectors = data_type_is_empty(type) - ? u->d[type].buckets * u->bucket_size - : u->d[type].sectors; - prt_units_u64(out, sectors << 9); + /* sectors are 0 for empty bucket data types, so calculate sectors for them */ + u64 sectors = data_type_is_empty(type) + ? u->d[type].buckets * u->bucket_size + : u->d[type].sectors; + prt_units_u64(out, sectors << 9); - prt_printf(out, "\r%llu\r", u->d[type].buckets); + prt_printf(out, "\r%llu\r", u->d[type].buckets); - u64 fragmented = u->d[type].buckets * u->bucket_size - sectors; - if (fragmented) - prt_units_u64(out, fragmented << 9); - prt_printf(out, "\r\n"); - } + u64 fragmented = u->d[type].buckets * u->bucket_size - sectors; + if (fragmented) + prt_units_u64(out, fragmented << 9); + prt_printf(out, "\r\n"); + } - prt_printf(out, "capacity:\t"); - prt_units_u64(out, (u->nr_buckets * u->bucket_size) << 9); - prt_printf(out, "\r%llu\r\n", u->nr_buckets); + prt_printf(out, "capacity:\t"); + prt_units_u64(out, (u->nr_buckets * u->bucket_size) << 9); + prt_printf(out, "\r%llu\r\n", u->nr_buckets); - prt_printf(out, "bucket size:\t"); - prt_units_u64(out, u->bucket_size << 9); - prt_printf(out, "\r\n"); + prt_printf(out, "bucket size:\t"); + prt_units_u64(out, u->bucket_size << 9); + prt_printf(out, "\r\n"); - printbuf_indent_sub(out, 2); - prt_newline(out); - } + printbuf_indent_sub(out, 2); + prt_newline(out); free(u); } @@ -121,13 +118,45 @@ static void devs_usage_to_text(struct printbuf *out, printbuf_tabstops_reset(out); prt_newline(out); - printbuf_tabstop_push(out, 16); - printbuf_tabstop_push(out, 20); - printbuf_tabstop_push(out, 16); - printbuf_tabstop_push(out, 14); - darray_for_each(dev_names, dev) - dev_usage_to_text(out, fs, dev, full); + if (full) { + printbuf_tabstop_push(out, 16); + printbuf_tabstop_push(out, 20); + printbuf_tabstop_push(out, 16); + printbuf_tabstop_push(out, 14); + + darray_for_each(dev_names, dev) + dev_usage_to_text(out, fs, dev, full); + } else { + printbuf_tabstop_push(out, 32); + printbuf_tabstop_push(out, 12); + printbuf_tabstop_push(out, 8); + printbuf_tabstop_push(out, 10); + printbuf_tabstop_push(out, 10); + printbuf_tabstop_push(out, 6); + + prt_printf(out, "Device label\tDevice\tState\tSize\rUsed\rUse%%\r\n"); + + darray_for_each(dev_names, d) { + struct bch_ioctl_dev_usage_v2 *u = bchu_dev_usage(fs, d->idx); + + u64 used = 0, capacity = u->nr_buckets * u->bucket_size; + for (unsigned type = 0; type < u->nr_data_types; type++) + if (type != BCH_DATA_unstriped) + used += u->d[type].sectors; + + prt_printf(out, "%s (device %u):\t%s\t%s\t", + d->label ?: "(no label)", d->idx, + d->dev ?: "(device not found)", + bch2_member_states[u->state]); + + prt_units_u64(out, (u->nr_buckets * u->bucket_size) << 9); + prt_tab_rjust(out); + prt_units_u64(out, used << 9); + + prt_printf(out, "\r%02u%%\r\n", (unsigned) (used * 100 / capacity)); + } + } darray_for_each(dev_names, dev) { free(dev->dev); @@ -284,6 +313,8 @@ static void replicas_summary_to_text(struct printbuf *out, replicas_x_degraded.data[d.durability].data[degraded] += a->v.d[0]; } + prt_printf(out, "\nData by durability desired and amount degraded:\n"); + unsigned max_degraded = 0; darray_for_each(replicas_x_degraded, i) max_degraded = max(max_degraded, i->nr); |