Using Btrfs with Multiple Devices

From btrfs Wiki
Revision as of 17:06, 11 December 2008 by Mason (Talk | contribs)

Jump to: navigation, search

Contents

Multiple Devices

A Btrfs filesystem can be created on top of many devices, and more devices can be added after the FS has been created. By default, metadata will be mirrored across two devices and data will be striped across all of the devices present.

If only one device is present, metadata will be duplicated on that one device.

Current Status

Btrfs can add and remove devices online. Adding devices at mkfs time gives the most control over the raid levels used.

Btrfs can do raid0, raid1, raid10 and it can duplicate metadata on a single spindle. When blocks are read in, checksums are verified and if there are any errors, Btrfs tries to read from an alternate copy.

Hardware read and write errors have not been heavily tested, you can expect to hit some problems in that area.

Creating a Multi-device FS

mkfs.btrfs will accept more than one device on the command line. It has options to control the raid configuration for data and metadata. Valid choices are raid0, raid1, raid10 and single. Single means that no duplication of metadata is done, which may be desired when using hardware raid.

Raid10 requires at least 4 devices.

# Create a filesystem across four drives
mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
# Stripe the metadata without mirroring
mkfs.btrfs -m raid0 /dev/sdb /dev/sdc
# Use raid10 for both data and metadata
mkfs.btrfs -m raid10 -d raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# Don't duplicate metadata on a single drive
mkfs.btrfs -m single /dev/sdb

Once you create a multi-device filesystem, you can use any device in the FS for the mount command:

mkfs.btrfs /dev/sdb /dev/sdc /dev/sde
mount /dev/sde /mnt

After a reboot or reloading the btrfs module, you'll need to use btrfsctl -a to discover all multi-device filesystems on the machine (see below)

Finding and Listing Multi-device Filesystems

btrfsctl -a is used to scan all of the block devices under /dev and probe for Btrfs volumes. This is required after loading the btrfs module if you're running with more than one device in a filesystem.

# Scan all devices
btrfsctl -a
# Scan a single device
btrfsctl -A /dev/sdb

btrfs-show will print information about all of the Btrfs filesystems on the machine.

Adding New Devices

btrfs-show gives you a list of all the btrfs filesystems on the systems and which devices they include.

btrfs-vol can be used to add new devices to a mounted filesystem and can balance (restripe) the allocated extents across all of the existing devices. For example:

mkfs.btrfs /dev/sdb
mount /dev/sdb /mnt
# Create some files
btrfs-vol -a /dev/sdc /mnt

At this point we have a filesystem with two devices, but all of the metadata and data are still stored on /dev/sdb. The filesystem must be balanced to spread the files across all of the devices.

btrfs-vol -b /mnt

The balance operation will take some time. It reads in all of the FS data and metadata and rewrites it across the new device.

Removing Devices

btrfs-vol can also be used to remove devices online. It redistributes the any extents in use on the device being removed to the other devices in the filesystem. Example:

mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
mount /dev/sdb /mnt
# Put some data on the filesystem here
btrfs-vol -r /dev/sdc /mnt

Replacing Failed Devices

The btrfs-vol example above can be used to remove a failed device if the super block can still be read. But, if a device is missing or the super block has been corrupted, the filesystem will need to be mounted in degraded mode:

mkfs.btrfs -m raid1 /dev/sdb /dev/sdc /dev/sdd /sde
#
# sdd is destroyed or removed, use -o degraded to force the mount
# to ignore missing devices
#
mount -o degraded /dev/sdb /mnt
#
# 'missing' is a special device name
#
btrfs-vol -r missing /mnt

btrfs-vol -r missing tells btrfs to remove the first device that is described by the filesystem metadata but not present when the FS was mounted.

Personal tools