public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* [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