On Fri, Feb 19, 2010 at 12:12 PM, Goffredo Baroncelli <kreij...@gmail.com> wrote: > Hi all, > > on the basis of the suggestion received, I update my btrfs tool. > > The main changes are: > - removed the short form of the command (like '-C') > - deployed the "multi level" command (i.e.: btrfs snapshot create) > - split the source in three files. This because the new parses are quite big > (about 295 lines; for example btrfsctl.c are only 239 lines). > > The "multi level" command parser is quite flexible. They accept the full- > length command (btrfs subvolume create) and a contract form (btrfs subvol cr). > The commands may be arbitrary shortly (even 1 chars) but they have to be un- > ambiguous. For example > - btrfs s s -> OK (matches 'btrfs subvolume snapshot' only) > - btrfs dev s -> FAIL (matches both 'btrfs dev show' and > 'btrfs dev scan') > > The parser highlights which part of the command are ambiguous. > > This is a RFC because there is no agreement about the name of the command. > I am proposing the following structure: > > btrfs <object> <action> > > where <object> are: > - subvolume (valid action: create, delete, snapshot, list [not implemented]) > - filesystem (valid action: defrag, sync, resize [not implemented]) > - device (valid action: add, delete, scan, show, balance) > > You can find the source at > > http://cassiopea.homelinux.net/git/btrfs-command.git > > (commit 3deec45d18879d60b4032dc1f8895d7b7e1211ec, remember to switch to the > "remotes/origin/multi-level-command" branch (I hate git!!!) > > > BR > G.Baroncelli > ---- > > $ git diff remotes/origin/orig | diffstat > Makefile | 6 > btrfs.c | 73 ++++++ > btrfs_cmds.c | 587 +++++++++++++++++++++++++++++++++++++++++++[...] > btrfs_cmds.h | 30 ++ > btrfs_cmds_parse.c | 296 +++++++++++++++++++++++++ > man/Makefile | 5 > man/btrfs.8.in | 148 ++++++++++++ > 13 files changed, 1291 insertions(+), 2 deletions(-) > > ---- > $ ./btrfs > Usage: > btrfs subvolume snapshot [<dest>/]<name> > Create a writeble snapshot of the subvolume <source> with > the name <name> in the <dest> directory. > btrfs subvolume delete <subvolume> > Delete the subvolume <subvolume>. > btrfs subvolume create [<dest>/]<name> > Create a subvolume in <dest> (or the current directory if > not passed). > btrfs filesystem defrag <file>|<dir> [<file>|<dir>...] > Defragment a file or a directory. > btrfs device scan [<device> [<device>..] > Scan all device for or the passed device for a btrfs > filesystem. > btrfs filesystem sync <path> > Force a fs sync on the filesystem <path> > btrfs filesystem resize [+/-]<newsize>[gkm]|max <filesystem> > Resize the file system. If 'max' is passed, the filesystem > will occupe all available space on the device. > btrfs device show [<dev>|<label>...] > Show the btrfs devices > btrfs device balance <path> > Balance the chunk across the device > btrfs device add <dev> [<dev>..] <path> > Add a device to a filesystem > btrfs device delete <dev> [<dev>..] <path> > Remove a device from a filesystem > > btrfs help|--help|-h > Show the help. > > Btrfs v0.19-22-g07a97f0-dirty > > ---- > > $ man man/btrfs.8.in | cat > BTRFS(8) btrfs BTRFS(8) > > > > NAME > btrfs - control a btrfs filesystem > > SYNOPSIS > btrfs subvolume snapshot <source> [<dest>/]<name> > > btrfs subvolume delete <subvolume> > > btrfs subvolume create [<dest>/]<name> > > btrfs filesystem defrag <file>|<dir> [<file>|<dir>...] > > btrfs filesystem fssync <path> > > btrfs filesystem resize [+/-]<size>[gkm]|max <filesystem> > > btrfs device scan [<device> [<device>..]] > > btrfs device show <dev>|<label> [<dev>|<label>...] > > btrfs device balance <path> > > btrfs device add <dev> [<dev>..] <path> > > btrfs device delete <dev> [<dev>..] <path> ] > > > btrfs help|--help|-h > > DESCRIPTION > btrfs is used to control the filesystem and the files and directo‐ > ries stored. It is the tool to create or destroy a new snapshot or a
-create or destroy a new snapshot +create or destroy a snapshot > new subvolume for the filesystem, to defrag a file or a directory, -new subvolume for the filesystem, to defrag a file or a directory +subvolume for the filesystem, defrag a file or a directory > to flush the dato to the disk, to resize the filesystem, to scan the > device. -to flush the dato to the disk, to resize the filesystem, to scan the +flush the data to the disk, resize the filesystem, scan the > > It is possible to abbreviate the commands unless the commands are > ambiguous. For example: it is possible to run btrfs sub snaps > instead of btrfs subvolume snapshot. But btrfs dev s is not > allowed, because dev s may be interpreted both as device show and as > device scan. In this case btrfs returns an error. > > If a command is terminated by --help , the relevant help is showed. > If the passed command matches more commands, the help of all the > matched commands are showed. For example btrfs dev --help shows the > help of all device* command. > Several parts above have more than one space between words, and less than two spaces between sentences. > > COMMANDS > subvolume snapshot <source> [<dest>/]<name> > Create a writeble snapshot of the subvolume <source> with the > name <name> in the <dest> directory. If <source> is not a > subvolume, btrfs returns an error. > -Create a writeble snapshot of the subvolume <source> with the +Create a writeable snapshot of the subvolume <source> with the > > subvolume delete <subvolume> > Delete the subvolume <subvolume>. If <subvolume> is not a > subvolume, btrfs returns an error. > > > subvolume create [<dest>/]<name> > Create a subvolume in <dest> (or in the current directory if > <dest> is not passed). > > > filesystem defrag <file>|<dir> [<file>|<dir>...] > Defragment files and/or directories. > -filesystem defrag <file>|<dir> [<file>|<dir>...] +filesystem defragment <file>|<dir> [<file>|<dir>...] Since the commands can be arbitrarily shortened, might as well spell the full command out. > > device scan [<device> [<device>..]] > Scan devices for a btrfs filesystem. If no devices are > passed, btrfs scans all the block devices. > > > filesystem fssync <path> > Force a sync for the filesystem identified by <path>. > -filesystem fssync <path> +filesystem sync <path> You have done away with specifying what it is working on. I think that's best, it just needs good error messages to handle the unimplemented cases at the moment. I would also rename "fssync" to "sync". > > > filesystem resize [+/-]<size>[gkm]|max <filesystem> -filesystem resize [+/-]<size>[gkm]|max <filesystem> +filesystem resize [+/-]<size>[gkm]|max <dev> > Resize a file system identified by <path>. The <size> param‐ -Resize a file system identified +Resize a filesystem identified > eter specifies the new size of the filesystem. If the prefix > + or - is present the size is increased or decreased by the > quantity <size>. If no units are specified, the unit of the > <size> parameter is the byte. Optionally, the size parameter -<size> parameter is the byte. +<size> parameter defaults to bytes. > may be suffixed by one of the following the units designa‐ > tors: 'K', 'M', or 'G', kilobytes, megabytes, or gigabytes, > respectively. > > If 'max' is passed, the filesystem will occupy all available > space on the volume(s). -space on the volume(s). +space on the block device specified. > > The resize command does not manipulate the size of underlying > partitions. If you wish to enlarge/reduce a filesystem, you > must make sure you can expand/reduce the size of the parti‐ > tion also. > There are multiple ways to resize a btrfs filesystem. You can add add or remove devices or shrink or enlarge the devices the filesystem is already on. This operation only works on one block device at a time so I think it should be under device instead of filesystem. > > device show [<dev>|<label>...] > Show the btrfs devices with some additional info. If no > devices or labels are passed, btrfs scans all the block > devices. > > > device balance|-b <path> > Balance the chunk of the filesystem identified by <path> > across the devices. > I think this is a bit ambiguous. While true, it is "balancing the filesystem across devices" and "btrfs device balance" is quite descriptive, it is working against a path and not a block device for its argument. I think that just tips the scales enough to put it under filesystem instead of device. > > device add <dev> [<dev>..] <path> > Add device(s) to the filesystem identified by <path>. > > > device delete <dev> [<dev>..] <path> > Remove device(s) from a filesystem identified by <path>. > > EXIT STATUS > btrfs returns a zero exist status if it succeeds. Non zero is > returned in case of failure. > > > AVAILABILITY > btrfs is part of btrfs-progs. Btrfs filesystem is currently under > heavy development, and not suitable for any uses other than bench‐ > marking and review. Please refer to the btrfs wiki > http://btrfs.wiki.kernel.org for further details. > > SEE ALSO > mkfs.btrfs(8) > > > > btrfs BTRFS(8) > > > -- > gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo) <kreijackATinwind.it> > Key fingerprint = 4769 7E51 5293 D36C 814E C054 BF04 F161 3DC5 0512 > -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html