[linux-lvm] [RFC][PATCH 00/35] fsadm update

Lukas Czerner lczerner at redhat.com
Wed Sep 21 16:45:19 UTC 2011

Hello everyone,

as I mentioned before I started a project to extend existing fsadm
script to provide user friendly tool to build the storage all the way up
the stack from dm, md to file systems. Basically the tool with the ease
of use of btrfs-progs. This is my first attempt to merge my changes of
fsadm into upstream.

I am not going to (once again) describe all the changes I have made. The
best way to see the new fsadm feature is to look at updated manual
page (patch 31), fo your convenience I am going to put some parts into the
mail as well.

Not only I have made quite a lot of changes, but I have also added tests to
validate the new features so we will be able to catch regressions. One thing
might be a bit confusing though. It is the fact that there are so many
patches with some functionality scattered between more of them. The reason
is, that while I was adding more features the fsadm infrastructure needed
to change as well. It was not possible for me to simply add one functionality,
polish it and the go to the other. However I have tried to clean the commits
as much as I cold. If you have any troubles with that, please let me know!

Note that fsadm update is not quite complete yet. It is just the first
attempt to push the changes I have upstream to be able to continue to make
more changes without the painful rebase at the end and also to collect some
very much needed feedback. Note that features like support for mirrors,
snapshots and raids will follow.

So here is description of some features ripped of the manual page.

Comments are welcomed.




fsadm [ OPTIONS ] check [ --help ] device

fsadm  [  OPTIONS  ]  resize [ --help ] [ size=Size | size=+Size | size=-Size ] [ device...  ]

fsadm [ OPTIONS ] create [ --help ] [ stripesize=StripeSize  ]  [  name=Name  ]  [  fs=Type  |
fstyp=Type ] [ size=Size ] [ stripesStripes ] [ device...  ] [ pool ]

fsadm [ OPTIONS ] list [ --help ] [ filesystems | fs ] [ device | dev ] [ pool ]

fsadm [ OPTIONS ] add [ --help ] device [ device...  ] [ pool ]

fsadm [ OPTIONS ] remove [ --help ] [ --all ] item [ item...  ]


Check the file system on device using fsck.

Change the size of the logical volume and file system on it. You can specify  size=Size
to  resize  to  given  Size,  or  size=+Size to extend the volume by the given Size, or
size=-Size to shrink the volume by the given Size.  If no Size is provided  the  volume
will  be  resized to its maximum size.  You can also specify one or more devices to use
for extending the volume.  If the device is not in any pool, it will be added the  vol‐
ume's  pool  prior the resize. Note that some file system (namely xfs) does not support
shrinking. Also some file system does not support online resize, it means that it  will
be  unmounted  before  the resize and then mounted back afterwards. It will also happen
when you specify -e, --ext-offline for extN file systems, or if you're trying to shrink
the  file  system  since  none  of supported file system supports online shrinking. And
finally, some file systems (namely xfs) does not support offline resize, it means, that
the file system will be mounted prior to resize and then unmounted afterwards.

Create a new logical volume from the pool, optionally with the defined file system. You
can specify Type of the file system which will be automatically created on the new log‐
ical volume. Currently only ext3, ext4 and xfs file systems are supported. You can cre‐
ate striped volume by defining the  StripeSize.   In  that  case,  if  Stripes  is  not
defined, then number of provided devices will be used. Either devices or Stripes has to
be defined if StripeSize is provided, otherwise fsadm does not have enough  information
to  proceed  in  creating  new  logical  volume.  Note that if no pool is specified the
default pool will be used.

List devices, file systems and pools in your system. You can select to list all logical
volumes  by  specifying filesystems, or fs.  Or you can select to list all pools in the
system by specifying pool.  Or you can also select to list all devices in the system by
specifying  devices,  or  dev,  however  note  that  this  will not list any DM device.
Optionally you can specify any combination of the above options to  list  whatever  you
desire,  or  you can simply omit the option. In that case it will list everything as if
all options has been specified.

Add one, or more devices into the pool.  If no pool is specified, provided devices will
be  added  into the default pool. Note that, if any device is already part of the same,
or different pool, it will be skipped.

Remove one, or more logical volumes, devices, or pools defined by items.  You can  also
specify --all to remove all pools corresponding volumes from your system.


To add device /dev/sdb into the default pool run this command:

    fsadm add /dev/sdb

You can also add mode devices into another pool called mypool

    fsadm add /dev/sdc /dev/sdd /dev/sde mypool

To create a 300GB linear logical volume with ext4  file  system  using  devices  /dev/sda  and
/dev/sdb you can use the following command:

    fsadm create fs=ext4 size=300G /dev/sda /dev/sdb

Of  course,  we are assuming that /dev/sda and /dev/sdb does have at least 300GB of space when
combined, otherwise the volume creation would fail.

Now let's create 500GB striped volume with stripe size of 16KB and xfs file system using  four
devices.  It means that Stripes will be equal to 4, however note that we do not need to define
Stripes manually if we are listing devices as follows:

    fsadm create fs=xfs size=500G stripesize=16 /dev/sda /dev/sdb /dev/sdc /dev/sdd

Now, if we assume that we already have at least four devices  in  the  default  pool,  we  can
achieve the same result by calling:

    fsadm create fs=xfs size=500G stripesize=16 stripes=4

To shrink the default_pool/lvol001 logical volume by 10G we can simply call

    fsadm resize size=-10G default_pool/lvol001

Or we can extend it by 1T using more devices which are not in the pool just yet:

    fsadm resize size=+1T default_pool/lvol001 /dev/sde /dev/sdf

To remove the above logical volume we can use the following command:

    fsadm remove default_pool/lvol001

or we can simply remove the whole pool, wiping all logical volumes in it:

    fsadm remove default_pool

Alternatively we can remove all pools in the system by calling:

    fsadm remove --all


[PATCH 01/35] fsadm: Add "create" command
[PATCH 02/35] fsadm: Add "destroy" command
[PATCH 03/35] fsadm: Add "list" command
[PATCH 04/35] fsadm: Make "create" command more vg aware
[PATCH 05/35] fsadm: Teach "destroy" command to take more arguments
[PATCH 06/35] fsadm: Simple cleanup and comment update
[PATCH 07/35] fsadm: Create "add" command
[PATCH 08/35] fsadm: Update "list" command for better alignment
[PATCH 09/35] fsadm: Specify number of stripes when no device is
[PATCH 10/35] fsadm: Print type of the volume in filesystem listing
[PATCH 11/35] fsadm: Add "remove" command
[PATCH 12/35] fsadm: Try to avoid calling LVM in the loops
[PATCH 13/35] fsadm: Merge "destroy" and "remove" into one command
[PATCH 14/35] fsadm: Allow to remove all volume groups
[PATCH 15/35] fsadm: Make all internal math in kilobytes
[PATCH 16/35] fsadm: Use warn for warnings in list command
[PATCH 17/35] fsadm: Handle resize if there is no file system
[PATCH 18/35] fsadm: Fsck extN before resize only if it is not
[PATCH 19/35] fsadm: Align numbers to the decimal point
[PATCH 20/35] fsadm: Add simple configuration file
[PATCH 21/35] fsadm: Use DEFAULT_POOL when creating volume group
[PATCH 22/35] fsadm: Add LVOL_PREFIX configuration option
[PATCH 23/35] fsadm: Only use readlink if link is provided
[PATCH 24/35] fsadm: Remove unnecessary modification of PATH
[PATCH 25/35] fsadm: Allow to specify size without "size=" prefix in
[PATCH 26/35] fsadm: Allow to specify lv in vg/lv format
[PATCH 27/35] fsadm: error out when no size is provided in resize
[PATCH 28/35] fsadm: Umount ext2 file system prior resize
[PATCH 29/35] lvresize: Specify --resize-fs-only when going to use
[PATCH 30/35] test: add helper to compute aligned lv size
[PATCH 31/35] fsadm: Add help for new commands and update man page
[PATCH 32/35] fsadm: Update authorship of the fsadm
[PATCH 33/35] test: Add test for fsadm add command
[PATCH 34/35] test: Add test for fsadm create command
[PATCH 35/35] test: Add test for fsadm resize command

More information about the linux-lvm mailing list