
BTRFS
=====

Btrfs is a copy on write filesystem for Linux aimed at
implementing advanced features while focusing on fault tolerance,
repair and easy administration. Initially developed by Oracle, Btrfs
is licensed under the GPL and open for contribution from anyone.

Linux has a wealth of filesystems to choose from, but we are facing a
number of challenges with scaling to the large storage subsystems that
are becoming common in today's data centers. Filesystems need to scale
in their ability to address and manage large storage, and also in
their ability to detect, repair and tolerate errors in the data stored
on disk.  Btrfs is under heavy development, and is not suitable for
any uses other than benchmarking and review. The Btrfs disk format is
not yet finalized.

The main Btrfs features include:

    * Extent based file storage (2^64 max file size)
    * Space efficient packing of small files
    * Space efficient indexed directories
    * Dynamic inode allocation
    * Writable snapshots
    * Subvolumes (separate internal filesystem roots)
    * Object level mirroring and striping
    * Checksums on data and metadata (multiple algorithms available)
    * Compression
    * Integrated multiple device support, with several raid algorithms
    * Online filesystem check (not yet implemented)
    * Very fast offline filesystem check
    * Efficient incremental backup and FS mirroring (not yet implemented)
    * Online filesystem defragmentation


Mount Options
=============

When mounting a btrfs filesystem, the following option are accepted.
Options with (*) are default options and will not show in the mount options.

  alloc_start=<bytes>
	Debugging option to force all block allocations above a certain
	byte threshold on each block device.  The value is specified in
	bytes, optionally with a K, M, or G suffix, case insensitive.
	Default is 1MB.

  noautodefrag(*)
  autodefrag
	Disable/enable auto defragmentation.
	Auto defragmentation detects small random writes into files and queue
	them up for the defrag process.  Works best for small files;
	Not well suited for large database workloads.

  check_int
  check_int_data
  check_int_print_mask=<value>
	These debugging options control the behavior of the integrity checking
	module (the BTRFS_FS_CHECK_INTEGRITY config option required).

	check_int enables the integrity checker module, which examines all
	block write requests to ensure on-disk consistency, at a large
	memory and CPU cost.

	check_int_data includes extent data in the integrity checks, and
	implies the check_int option.

	check_int_print_mask takes a bitmask of BTRFSIC_PRINT_MASK_* values
	as defined in fs/btrfs/check-integrity.c, to control the integrity
	checker module behavior.

	See comments at the top of fs/btrfs/check-integrity.c for more info.

  commit=<seconds>
	Set the interval of periodic commit, 30 seconds by default. Higher
	values defer data being synced to permanent storage with obvious
	consequences when the system crashes. The upper bound is not forced,
	but a warning is printed if it's more than 300 seconds (5 minutes).

  compress
  compress=<type>
  compress-force
  compress-force=<type>
	Control BTRFS file data compression.  Type may be specified as "zlib"
	"lzo" or "no" (for no compression, used for remounting).  If no type
	is specified, zlib is used.  If compress-force is specified,
	all files will be compressed, whether or not they compress well.
	If compression is enabled, nodatacow and nodatasum are disabled.

  degraded
	Allow mounts to continue with missing devices.  A read-write mount may
	fail with too many devices missing, for example if a stripe member
	is completely missing.

  device=<devicepath>
	Specify a device during mount so that ioctls on the control device
	can be avoided.  Especially useful when trying to mount a multi-device
	setup as root.  May be specified multiple times for multiple devices.

  nodiscard(*)
  discard
	Disable/enable discard mount option.
	Discard issues frequent commands to let the block device reclaim space
	freed by the filesystem.
	This is useful for SSD devices, thinly provisioned
	LUNs and virtual machine images, but may have a significant
	performance impact.  (The fstrim command is also available to
	initiate batch trims from userspace).

  noenospc_debug(*)
  enospc_debug
	Disable/enable debugging option to be more verbose in some ENOSPC conditions.

  fatal_errors=<action>
	Action to take when encountering a fatal error:
	  "bug" - BUG() on a fatal error.  This is the default.
	  "panic" - panic() on a fatal error.

  noflushoncommit(*)
  flushoncommit
	The 'flushoncommit' mount option forces any data dirtied by a write in a
	prior transaction to commit as part of the current commit.  This makes
	the committed state a fully consistent view of the file system from the
	application's perspective (i.e., it includes all completed file system
	operations).  This was previously the behavior only when a snapshot is
	created.

  inode_cache
	Enable free inode number caching.   Defaults to off due to an overflow
	problem when the free space crcs don't fit inside a single page.

  max_inline=<bytes>
	Specify the maximum amount of space, in bytes, that can be inlined in
	a metadata B-tree leaf.  The value is specified in bytes, optionally
	with a K, M, or G suffix, case insensitive.  In practice, this value
	is limited by the root sector size, with some space unavailable due
	to leaf headers.  For a 4k sector size, max inline data is ~3900 bytes.

  metadata_ratio=<value>
	Specify that 1 metadata chunk should be allocated after every <value>
	data chunks.  Off by default.

  acl(*)
  noacl
	Enable/disable support for Posix Access Control Lists (ACLs).  See the
	acl(5) manual page for more information about ACLs.

  barrier(*)
  nobarrier
        Enable/disable the use of block layer write barriers.  Write barriers
	ensure that certain IOs make it through the device cache and are on
	persistent storage. If disabled on a device with a volatile
	(non-battery-backed) write-back cache, nobarrier option will lead to
	filesystem corruption on a system crash or power loss.

  datacow(*)
  nodatacow
	Enable/disable data copy-on-write for newly created files.
	Nodatacow implies nodatasum, and disables all compression.

  datasum(*)
  nodatasum
	Enable/disable data checksumming for newly created files.
	Datasum implies datacow.

  treelog(*)
  notreelog
	Enable/disable the tree logging used for fsync and O_SYNC writes.

  recovery
	Enable autorecovery attempts if a bad tree root is found at mount time.
	Currently this scans a list of several previous tree roots and tries to
	use the first readable.

  rescan_uuid_tree
	Force check and rebuild procedure of the UUID tree. This should not
	normally be needed.

  skip_balance
	Skip automatic resume of interrupted balance operation after mount.
	May be resumed with "btrfs balance resume."

  space_cache (*)
	Enable the on-disk freespace cache.
  nospace_cache
	Disable freespace cache loading without clearing the cache.
  clear_cache
	Force clearing and rebuilding of the disk space cache if something
	has gone wrong.

  ssd
  nossd
  ssd_spread
	Options to control ssd allocation schemes.  By default, BTRFS will
	enable or disable ssd allocation heuristics depending on whether a
	rotational or non-rotational disk is in use.  The ssd and nossd options
	can override this autodetection.

	The ssd_spread mount option attempts to allocate into big chunks
	of unused space, and may perform better on low-end ssds.  ssd_spread
	implies ssd, enabling all other ssd heuristics as well.

  subvol=<path>
	Mount subvolume at <path> rather than the root subvolume.  <path> is
	relative to the top level subvolume.

  subvolid=<ID>
	Mount subvolume specified by an ID number rather than the root subvolume.
	This allows mounting of subvolumes which are not in the root of the mounted
	filesystem.
	You can use "btrfs subvolume list" to see subvolume ID numbers.

  subvolrootid=<objectid> (deprecated)
	Mount subvolume specified by <objectid> rather than the root subvolume.
	This allows mounting of subvolumes which are not in the root of the mounted
	filesystem.
	You can use "btrfs subvolume show " to see the object ID for a subvolume.

  thread_pool=<number>
	The number of worker threads to allocate.  The default number is equal
	to the number of CPUs + 2, or 8, whichever is smaller.

  user_subvol_rm_allowed
	Allow subvolumes to be deleted by a non-root user. Use with caution.

MAILING LIST
============

There is a Btrfs mailing list hosted on vger.kernel.org. You can
find details on how to subscribe here:

http://vger.kernel.org/vger-lists.html#linux-btrfs

Mailing list archives are available from gmane:

http://dir.gmane.org/gmane.comp.file-systems.btrfs



IRC
===

Discussion of Btrfs also occurs on the #btrfs channel of the Freenode
IRC network.



	UTILITIES
	=========

Userspace tools for creating and manipulating Btrfs file systems are
available from the git repository at the following location:

 http://git.kernel.org/?p=linux/kernel/git/mason/btrfs-progs.git
 git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs.git

These include the following tools:

* mkfs.btrfs: create a filesystem

* btrfs: a single tool to manage the filesystems, refer to the manpage for more details

* 'btrfsck' or 'btrfs check': do a consistency check of the filesystem

Other tools for specific tasks:

* btrfs-convert: in-place conversion from ext2/3/4 filesystems

* btrfs-image: dump filesystem metadata for debugging
