" info <image-name> show information about image size,\n"
" striping, etc.\n"
" create [--order <bits>] [--image-features <features>] [--image-shared]\n"
-" --size <MB> <name> create an empty image\n"
+" --size <M/G/T> <image-name> create an empty image\n"
" clone [--order <bits>] [--image-features <features>] [--image-shared]\n"
" <parentsnap> <clonename> clone a snapshot into a COW\n"
" child image\n"
" children <snap-name> display children of snapshot\n"
" flatten <image-name> fill clone with parent data\n"
" (make it independent)\n"
-" resize --size <MB> <image-name> resize (expand or contract) image\n"
+" resize --size <M/G/T> <image-name> resize (expand or contract) image\n"
" rm <image-name> delete an image\n"
" export <image-name> <path> export image to file\n"
" \"-\" for stdout\n"
" --snap <snap-name> snapshot name\n"
" --dest-pool <name> destination pool name\n"
" --path <path-name> path name for import/export\n"
-" --size <size in MB> size of image for create and resize\n"
+" -s, --size <size in M/G/T> size of image for create and resize\n"
" --order <bits> the object size in bits; object size will be\n"
" (1 << order) bytes. Default is 22 (4 MB).\n"
" --image-format <format-number> format to use when creating an image\n"
std::string val, parse_err;
std::ostringstream err;
- long long sizell = 0;
+ uint64_t sizell = 0;
std::vector<const char*>::iterator i;
for (i = args.begin(); i != args.end(); ) {
if (ceph_argparse_double_dash(args, i)) {
fromsnapname = strdup(val.c_str());
} else if (ceph_argparse_witharg(args, i, &val, "-i", "--image", (char*)NULL)) {
imgname = strdup(val.c_str());
- } else if (ceph_argparse_witharg(args, i, &sizell, err, "-s", "--size", (char*)NULL)) {
+ } else if (ceph_argparse_witharg(args, i, &val, err, "-s", "--size", (char*)NULL)) {
if (!err.str().empty()) {
- cerr << "rbd: " << err.str() << std::endl;
- return EXIT_FAILURE;
+ cerr << "rbd: " << err.str() << std::endl;
+ return EXIT_FAILURE;
}
- if (sizell < 0) {
- cerr << "rbd: size must be >= 0" << std::endl;
- return EXIT_FAILURE;
+ const char *sizeval = val.c_str();
+ size = strict_sistrtoll(sizeval, &parse_err);
+ if (!parse_err.empty()) {
+ cerr << "rbd: error parsing --size " << parse_err << std::endl;
+ return EXIT_FAILURE;
}
- size = sizell << 20; // bytes to MB
+ //NOTE: We can remove below given three lines of code once all applications,
+ //which use this CLI will adopt B/K/M/G/T/P/E with size value
+ sizell = atoll(sizeval);
+ if (size == sizell)
+ size = size << 20; // Default MB to Bytes
size_set = true;
} else if (ceph_argparse_flag(args, i, "-l", "--long", (char*)NULL)) {
lflag = true;
if (opt_cmd == OPT_CREATE || opt_cmd == OPT_RESIZE) {
if (!size_set) {
- cerr << "rbd: must specify --size <MB>" << std::endl;
+ cerr << "rbd: must specify --size <M/G/T>" << std::endl;
return EINVAL;
}
}
$ rbd create -s 512 --image-format 2 bar
$ rbd create -s 2048 --image-format 2 baz
$ rbd create -s 1 --image-format 1 quux
+ $ rbd create -s 1G --image-format 2 quuy
snapshot
========
$ rbd snap create bar@snap
$ rbd resize -s 1024 bar
+ Resizing image: 100% complete...done.
+ $ rbd resize -s 2G quuy
+
Resizing image: 100% complete...done.
$ rbd snap create bar@snap2
$ rbd snap create foo@snap
$ rbd rm foo 2> /dev/null
$ rbd rm bar 2> /dev/null
$ rbd rm quux 2> /dev/null
+ $ rbd rm quuy 2> /dev/null
$ rbd rm baz 2> /dev/null
$ ceph osd pool delete rbd_other rbd_other --yes-i-really-really-mean-it
pool 'rbd_other' removed
info <image-name> show information about image size,
striping, etc.
create [--order <bits>] [--image-features <features>] [--image-shared]
- --size <MB> <name> create an empty image
+ --size <M/G/T> <image-name> create an empty image
clone [--order <bits>] [--image-features <features>] [--image-shared]
<parentsnap> <clonename> clone a snapshot into a COW
child image
children <snap-name> display children of snapshot
flatten <image-name> fill clone with parent data
(make it independent)
- resize --size <MB> <image-name> resize (expand or contract) image
+ resize --size <M/G/T> <image-name> resize (expand or contract) image
rm <image-name> delete an image
export <image-name> <path> export image to file
"-" for stdout
--snap <snap-name> snapshot name
--dest-pool <name> destination pool name
--path <path-name> path name for import/export
- --size <size in MB> size of image for create and resize
+ -s, --size <size in M/G/T> size of image for create and resize
--order <bits> the object size in bits; object size will be
(1 << order) bytes. Default is 22 (4 MB).
--image-format <format-number> format to use when creating an image