[RFC] btrfs: a new tool to manage a btrfs filesystem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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: signature.asc
Description: This is a digitally signed message part.


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux