* [RFC] btrfs: a new tool to manage a btrfs filesystem
@ 2010-02-19 20:12 Goffredo Baroncelli
2010-02-19 21:16 ` Mike Fedyk
0 siblings, 1 reply; 3+ messages in thread
From: Goffredo Baroncelli @ 2010-02-19 20:12 UTC (permalink / raw)
To: linux-btrfs
[-- Attachment #1: Type: Text/Plain, Size: 8891 bytes --]
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
new subvolume for the filesystem, to defrag a file or a directory,
to flush the dato to the disk, to resize the filesystem, to scan the
device.
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.
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.
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.
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 resize [+/-]<size>[gkm]|max <filesystem>
Resize a file system identified by <path>. The <size> param‐
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
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).
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.
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.
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
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [RFC] btrfs: a new tool to manage a btrfs filesystem 2010-02-19 20:12 [RFC] btrfs: a new tool to manage a btrfs filesystem Goffredo Baroncelli @ 2010-02-19 21:16 ` Mike Fedyk 2010-02-20 10:48 ` Goffredo Baroncelli 0 siblings, 1 reply; 3+ messages in thread From: Mike Fedyk @ 2010-02-19 21:16 UTC (permalink / raw) To: Goffredo Baroncelli; +Cc: linux-btrfs On Fri, Feb 19, 2010 at 12:12 PM, Goffredo Baroncelli <kreijack@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 qu= ite big > (about =C2=A0295 lines; for example btrfsctl.c are only 239 lines). > > The "multi level" command parser is quite flexible. They accept the f= ull- > length command (btrfs subvolume create) and a contract form (btrfs su= bvol cr). > The commands may be arbitrary shortly (even 1 chars) but they have to= be un- > ambiguous. For example > - btrfs s s =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 -> OK (matches = 'btrfs subvolume snapshot' only) > - btrfs dev s =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 -> FAIL (matches bot= h 'btrfs dev show' and > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'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 com= mand. > I am proposing the following structure: > > =C2=A0 btrfs <object> <action> > > where <object> are: > - subvolume (valid action: create, delete, snapshot, list [not implem= ented]) > - filesystem (valid action: defrag, sync, resize [not implemented]) > - device (valid action: add, delete, scan, show, balance) > > You can find the source at > > =C2=A0 =C2=A0 =C2=A0 =C2=A0http://cassiopea.homelinux.net/git/btrfs-c= ommand.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 > =C2=A0Makefile =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | =C2=A0 =C2= =A06 > =C2=A0btrfs.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0= 73 ++++++ > =C2=A0btrfs_cmds.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 | =C2=A0587 ++++++++++= +++++++++++++++++++++++++++++++++[...] > =C2=A0btrfs_cmds.h =C2=A0 =C2=A0 =C2=A0 =C2=A0 | =C2=A0 30 ++ > =C2=A0btrfs_cmds_parse.c =C2=A0 | =C2=A0296 +++++++++++++++++++++++++ > =C2=A0man/Makefile =C2=A0 =C2=A0 =C2=A0 =C2=A0 | =C2=A0 =C2=A05 > =C2=A0man/btrfs.8.in =C2=A0 =C2=A0 =C2=A0 | =C2=A0148 ++++++++++++ > =C2=A013 files changed, 1291 insertions(+), 2 deletions(-) > > ---- > $ ./btrfs > Usage: > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs subvolume snapshot [<dest>/]<name> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Create a write= ble snapshot of the subvolume <source> with > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0the name <name= > in the <dest> directory. > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs subvolume delete <subvolume> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Delete the sub= volume <subvolume>. > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs subvolume create [<dest>/]<name> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Create a subvo= lume in <dest> (or the current directory if > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0not passed). > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs filesystem defrag <file>|<dir> [<fil= e>|<dir>...] > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Defragment a f= ile or a directory. > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs device scan [<device> [<device>..] > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Scan all devic= e for or the passed device for a btrfs > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0filesystem. > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs filesystem sync <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Force a fs syn= c on the filesystem <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs filesystem resize [+/-]<newsize>[gkm= ]|max <filesystem> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Resize the fil= e system. If 'max' is passed, the filesystem > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0will occupe al= l available space on the device. > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs device show [<dev>|<label>...] > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Show the btrfs= devices > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs device balance <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Balance the ch= unk across the device > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs device add <dev> [<dev>..] <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Add a device t= o a filesystem > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs device delete <dev> [<dev>..] <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Remove a devic= e from a filesystem > > =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs help|--help|-h > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Show the help. > > Btrfs v0.19-22-g07a97f0-dirty > > ---- > > $ man man/btrfs.8.in | cat > BTRFS(8) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 btrfs =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 BTRFS(8) > > > > NAME > =C2=A0 =C2=A0 =C2=A0 btrfs - control a btrfs filesystem > > SYNOPSIS > =C2=A0 =C2=A0 =C2=A0 btrfs subvolume snapshot <source> [<dest>/]<name= > > > =C2=A0 =C2=A0 =C2=A0 btrfs subvolume delete <subvolume> > > =C2=A0 =C2=A0 =C2=A0 btrfs subvolume create [<dest>/]<name> > > =C2=A0 =C2=A0 =C2=A0 btrfs filesystem defrag <file>|<dir> [<file>|<di= r>...] > > =C2=A0 =C2=A0 =C2=A0 btrfs filesystem fssync <path> > > =C2=A0 =C2=A0 =C2=A0 btrfs filesystem resize [+/-]<size>[gkm]|max <fi= lesystem> > > =C2=A0 =C2=A0 =C2=A0 btrfs device scan [<device> [<device>..]] > > =C2=A0 =C2=A0 =C2=A0 btrfs device show <dev>|<label> [<dev>|<label>..= =2E] > > =C2=A0 =C2=A0 =C2=A0 btrfs device balance <path> > > =C2=A0 =C2=A0 =C2=A0 btrfs device add <dev> [<dev>..] <path> > > =C2=A0 =C2=A0 =C2=A0 btrfs device delete <dev> [<dev>..] <path> ] > > > =C2=A0 =C2=A0 =C2=A0 btrfs help|--help|-h > > DESCRIPTION > =C2=A0 =C2=A0 =C2=A0 btrfs =C2=A0is =C2=A0used to control the filesys= tem and the files and directo=E2=80=90 > =C2=A0 =C2=A0 =C2=A0 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 > =C2=A0 =C2=A0 =C2=A0 new =C2=A0subvolume =C2=A0for 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 > =C2=A0 =C2=A0 =C2=A0 to flush the dato to the disk, to resize the fil= esystem, to scan the > =C2=A0 =C2=A0 =C2=A0 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 > > =C2=A0 =C2=A0 =C2=A0 It =C2=A0is =C2=A0possible to abbreviate the com= mands unless the commands =C2=A0are > =C2=A0 =C2=A0 =C2=A0 ambiguous. =C2=A0For example: it is =C2=A0possib= le =C2=A0to =C2=A0run =C2=A0btrfs =C2=A0sub =C2=A0snaps > =C2=A0 =C2=A0 =C2=A0 instead =C2=A0of =C2=A0btrfs =C2=A0subvolume =C2= =A0snapshot. =C2=A0 But =C2=A0btrfs =C2=A0dev =C2=A0s is not > =C2=A0 =C2=A0 =C2=A0 allowed, because dev s may be interpreted both a= s device show and as > =C2=A0 =C2=A0 =C2=A0 device scan. =C2=A0In this case btrfs returns an= error. > > =C2=A0 =C2=A0 =C2=A0 If =C2=A0a command is terminated by --help , the= relevant help is showed. > =C2=A0 =C2=A0 =C2=A0 If the passed command matches more commands, the= =C2=A0help =C2=A0of =C2=A0all =C2=A0the > =C2=A0 =C2=A0 =C2=A0 matched =C2=A0commands are showed. For example b= trfs dev --help shows the > =C2=A0 =C2=A0 =C2=A0 help of all device* command. > Several parts above have more than one space between words, and less than two spaces between sentences. > > COMMANDS > =C2=A0 =C2=A0 =C2=A0 subvolume snapshot <source> [<dest>/]<name> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Create a writeble sna= pshot of the subvolume <source> with the > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0name =C2=A0<name> =C2= =A0in =C2=A0the =C2=A0<dest> directory. If <source> is not a > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0subvolume, btrfs retu= rns an error. > -Create a writeble snapshot of the subvolume <source> with the +Create a writeable snapshot of the subvolume <source> with the > > =C2=A0 =C2=A0 =C2=A0 subvolume delete <subvolume> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Delete the subvolume = <subvolume>. If =C2=A0<subvolume> =C2=A0is =C2=A0not =C2=A0a > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0subvolume, btrfs retu= rns an error. > > > =C2=A0 =C2=A0 =C2=A0 subvolume create [<dest>/]<name> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Create =C2=A0a subvol= ume in <dest> (or in the current directory if > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<dest> is not passed)= =2E > > > =C2=A0 =C2=A0 =C2=A0 filesystem defrag <file>|<dir> [<file>|<dir>...] > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Defragment 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. > > =C2=A0 =C2=A0 =C2=A0 device scan [<device> [<device>..]] > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Scan devices for =C2=A0= a =C2=A0btrfs =C2=A0filesystem. =C2=A0If =C2=A0no =C2=A0devices =C2=A0a= re > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0passed, btrfs scans a= ll the block devices. > > > =C2=A0 =C2=A0 =C2=A0 filesystem fssync <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Force 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". > > > =C2=A0 =C2=A0 =C2=A0 filesystem resize [+/-]<size>[gkm]|max <filesyst= em> -filesystem resize [+/-]<size>[gkm]|max <filesystem> +filesystem resize [+/-]<size>[gkm]|max <dev> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Resize a file system = identified by <path>. =C2=A0The <size> param=E2=80=90 -Resize a file system identified +Resize a filesystem identified > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eter specifies the ne= w size of the filesystem. =C2=A0If the prefix > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0+ =C2=A0or =C2=A0- is= present the size is increased or decreased by the > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0quantity <size>. =C2=A0= If no units are specified, the unit of =C2=A0the > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<size> parameter is t= he byte. =C2=A0Optionally, the size parameter -<size> parameter is the byte. +<size> parameter defaults to bytes. > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0may be suffixed by on= e of the following =C2=A0the =C2=A0units =C2=A0designa=E2=80=90 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0tors: =C2=A0'K', =C2=A0= 'M', or 'G', kilobytes, megabytes, or gigabytes, > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0respectively. > > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0If 'max' is passed, t= he filesystem will occupy all =C2=A0available > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0space on the volume(s= ). -space on the volume(s). +space on the block device specified. > > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The resize command do= es not manipulate the size of underlying > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0partitions. =C2=A0If = you wish to enlarge/reduce a filesystem, =C2=A0you > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0must =C2=A0make =C2=A0= sure you can expand/reduce the size of the parti=E2=80=90 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0tion 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. > > =C2=A0 =C2=A0 =C2=A0 device show [<dev>|<label>...] > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Show the btrfs device= s =C2=A0with =C2=A0some =C2=A0additional =C2=A0info. =C2=A0If =C2=A0no > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0devices =C2=A0or =C2=A0= labels =C2=A0are =C2=A0passed, =C2=A0btrfs =C2=A0scans all the block > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0devices. > > > =C2=A0 =C2=A0 =C2=A0 device balance|-b <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Balance the chunk of = =C2=A0the =C2=A0filesystem =C2=A0identified =C2=A0by =C2=A0<path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0across 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. > > =C2=A0 =C2=A0 =C2=A0 device add <dev> [<dev>..] <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Add device(s) to the = filesystem identified by <path>. > > > =C2=A0 =C2=A0 =C2=A0 device delete <dev> [<dev>..] <path> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Remove device(s) from= a filesystem identified by <path>. > > EXIT STATUS > =C2=A0 =C2=A0 =C2=A0 btrfs =C2=A0returns =C2=A0a =C2=A0zero =C2=A0exi= st =C2=A0status =C2=A0if =C2=A0it succeeds. Non zero is > =C2=A0 =C2=A0 =C2=A0 returned in case of failure. > > > AVAILABILITY > =C2=A0 =C2=A0 =C2=A0 btrfs is part of btrfs-progs. Btrfs filesystem =C2= =A0is =C2=A0currently =C2=A0under > =C2=A0 =C2=A0 =C2=A0 heavy =C2=A0development, =C2=A0and not suitable = for any uses other than bench=E2=80=90 > =C2=A0 =C2=A0 =C2=A0 marking =C2=A0 and =C2=A0 review. =C2=A0 =C2=A0P= lease =C2=A0 refer =C2=A0 to =C2=A0 the =C2=A0 btrfs =C2=A0 =C2=A0wiki > =C2=A0 =C2=A0 =C2=A0 http://btrfs.wiki.kernel.org for further details= =2E > > SEE ALSO > =C2=A0 =C2=A0 =C2=A0 mkfs.btrfs(8) > > > > btrfs =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0BTRFS(8) > > > -- > gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo) <kreijackATi= nwind.it> > Key fingerprint =3D 4769 7E51 5293 D36C 814E =C2=A0C054 BF04 F161 3DC= 5 0512 > -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" = in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC] btrfs: a new tool to manage a btrfs filesystem 2010-02-19 21:16 ` Mike Fedyk @ 2010-02-20 10:48 ` Goffredo Baroncelli 0 siblings, 0 replies; 3+ messages in thread From: Goffredo Baroncelli @ 2010-02-20 10:48 UTC (permalink / raw) To: Mike Fedyk; +Cc: linux-btrfs Hi Mike, Thanks, I implemented all your suggestion except the one related to the= resize=20 command. These patches doesn't address problems related to btrfs itself, and now= the=20 interface of the btrfs function is based on the filesystem and not on t= he=20 device. But I agree with you that today if a btrfs filesystem relies on more th= an one=20 device, is not clear how "shrink" the occupation of one specific device= =20 (remove the device, resize the partition and add the device again ?)=20 I hope to post the new patches (with the implementation of the resize i= octl=20 call) in this week end. BR Goffredo On Friday 19 February 2010, Mike Fedyk wrote: > On Fri, Feb 19, 2010 at 12:12 PM, Goffredo Baroncelli > <kreijack@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=20 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=20 cr). > > The commands may be arbitrary shortly (even 1 chars) but they have = to be=20 un- > > ambiguous. For example > > - btrfs s s -> OK (matches 'btrfs subvolume snapshot' o= nly) > > - 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 c= ommand. > > I am proposing the following structure: > > > > btrfs <object> <action> > > > > where <object> are: > > - subvolume (valid action: create, delete, snapshot, list [not=20 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 switc= h to=20 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=20 +++++++++++++++++++++++++++++++++++++++++++[...] > > 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 directo= ry 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 file= system > > 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 =20 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 d= irecto=E2=80=90 > > ries stored. It is the tool to create or destroy a new snapsh= ot or a >=20 > -create or destroy a new snapshot > +create or destroy a snapshot >=20 > > new subvolume for the filesystem, to defrag a file or a dir= ectory, >=20 > -new subvolume for the filesystem, to defrag a file or a directory > +subvolume for the filesystem, defrag a file or a directory >=20 > > to flush the dato to the disk, to resize the filesystem, to s= can the > > device. >=20 > -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 >=20 > > > > It is possible to abbreviate the commands unless the comman= ds 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 a= ll the > > matched commands are showed. For example btrfs dev --help sh= ows the > > help of all device* command. > > >=20 > Several parts above have more than one space between words, and less > than two spaces between sentences. >=20 > > > > COMMANDS > > subvolume snapshot <source> [<dest>/]<name> > > Create a writeble snapshot of the subvolume <source> w= ith the > > name <name> in the <dest> directory. If <source> i= s not a > > subvolume, btrfs returns an error. > > >=20 > -Create a writeble snapshot of the subvolume <source> with the > +Create a writeable snapshot of the subvolume <source> with the >=20 > > > > 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 direc= tory if > > <dest> is not passed). > > > > > > filesystem defrag <file>|<dir> [<file>|<dir>...] > > Defragment files and/or directories. > > >=20 > -filesystem defrag <file>|<dir> [<file>|<dir>...] > +filesystem defragment <file>|<dir> [<file>|<dir>...] >=20 > Since the commands can be arbitrarily shortened, might as well spell > the full command out. >=20 > > > > device scan [<device> [<device>..]] > > Scan devices for a btrfs filesystem. If no devic= es are > > passed, btrfs scans all the block devices. > > > > > > filesystem fssync <path> > > Force a sync for the filesystem identified by <path>. > > >=20 > -filesystem fssync <path> > +filesystem sync <path> >=20 > 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". >=20 > > > > > > filesystem resize [+/-]<size>[gkm]|max <filesystem> >=20 > -filesystem resize [+/-]<size>[gkm]|max <filesystem> > +filesystem resize [+/-]<size>[gkm]|max <dev> >=20 > > Resize a file system identified by <path>. The <size>= param=E2=80=90 >=20 > -Resize a file system identified > +Resize a filesystem identified >=20 > > 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 pa= rameter >=20 > -<size> parameter is the byte. > +<size> parameter defaults to bytes. >=20 > > may be suffixed by one of the following the units d= esigna=E2=80=90 > > tors: 'K', 'M', or 'G', kilobytes, megabytes, or gig= abytes, > > respectively. > > > > If 'max' is passed, the filesystem will occupy all av= ailable > > space on the volume(s). >=20 > -space on the volume(s). > +space on the block device specified. >=20 > > > > The resize command does not manipulate the size of und= erlying > > partitions. If you wish to enlarge/reduce a filesyste= m, you > > must make sure you can expand/reduce the size of the= parti=E2=80=90 > > tion also. > > >=20 > There are multiple ways to resize a btrfs filesystem. You can add ad= d > 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. >=20 > > > > device show [<dev>|<label>...] > > Show the btrfs devices with some additional info. = If no > > devices or labels are passed, btrfs scans all th= e block > > devices. > > > > > > device balance|-b <path> > > Balance the chunk of the filesystem identified by = <path> > > across the devices. > > >=20 > 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. >=20 > > > > 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=E2=80=90 > > marking and review. Please refer to the btrfs = wiki > > http://btrfs.wiki.kernel.org for further details. > > > > SEE ALSO > > mkfs.btrfs(8) > > > > > > > > btrfs =20 BTRFS(8) > > > > > > -- > > gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo)=20 <kreijackATinwind.it> > > Key fingerprint =3D 4769 7E51 5293 D36C 814E C054 BF04 F161 3DC5 0= 512 > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs= " in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >=20 --=20 gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo) <kreijack@inwi= nd.it> Key fingerprint =3D 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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-02-20 10:48 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-02-19 20:12 [RFC] btrfs: a new tool to manage a btrfs filesystem Goffredo Baroncelli 2010-02-19 21:16 ` Mike Fedyk 2010-02-20 10:48 ` Goffredo Baroncelli
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox