See archlinux for more…
Create btrfs filesystem using raid6 for data and and raid 10 for metadata
mkfs.btrfs -d raid6 -m raid10 -L alexandria_btrfs /dev/vd[bcdefghijk]
Mount newly created partition with
mount /dev/sdb /mnt/md0
Check file system usage with:
btrfs filesystem df /mnt/md0
Remove a drive from the file system. This should rebalance the data across the other devices.
btrfs device delete is used to remove devices online. It redistributes the any extents in use on the device being removed to the other devices in the filesystem.
# mount fs first
btrfs device delete /dev/vdX /mnt/md0
btrfs device add is used to add new devices to a mounted filesystem.
btrfs filesystem balance can balance (restripe) the allocated extents across all of the existing devices. For example, with an existing filesystem mounted at /mnt/md0, you can add the device /dev/vdX to it with:
btrfs device add /dev/vdX /mnt/md0
This should commence a resync.
At this point we have a filesystem with two devices, but all of the metadata and data are still stored on the original device(s). The filesystem must be balanced to spread the files across all of the devices.
btrfs filesystem balance /mnt/md0
List of all the btrfs filesystems
btrfs filesystem show gives you a list of all the btrfs filesystems on the systems and which devices they include.
btrfs filesystem show
Label: 'alexandria_btrfs' uuid: abdef71f-d813-4128-bc39-de3df7e6c673 Total devices 10 FS bytes used 217.73GiB devid 1 size 1.82TiB used 29.42GiB path /dev/sdb devid 2 size 1.82TiB used 29.40GiB path /dev/sdc devid 3 size 1.82TiB used 29.40GiB path /dev/sdd devid 4 size 1.82TiB used 29.40GiB path /dev/sde devid 5 size 1.82TiB used 29.40GiB path /dev/sdf devid 6 size 1.82TiB used 29.40GiB path /dev/sdg devid 7 size 1.82TiB used 29.40GiB path /dev/sdh devid 8 size 1.82TiB used 29.40GiB path /dev/sdi devid 9 size 1.82TiB used 29.40GiB path /dev/sdj devid 10 size 1.82TiB used 29.40GiB path /dev/sdk btrfs-progs v4.0.1
Replacing failed devices
The 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:
btrfs filesystem show
Label: 'alexandria_btrfs' uuid: abdef71f-d813-4128-bc39-de3df7e6c673 Total devices 10 FS bytes used 14.50TiB devid 1 size 1.82TiB used 1.82TiB path /dev/sdb devid 2 size 1.82TiB used 1.82TiB path /dev/sdc devid 3 size 1.82TiB used 1.82TiB path /dev/sdd devid 4 size 1.82TiB used 1.82TiB path /dev/sde devid 5 size 1.82TiB used 1.82TiB path /dev/sdf devid 6 size 1.82TiB used 1.82TiB path /dev/sdg devid 7 size 1.82TiB used 1.82TiB path /dev/sdh devid 8 size 1.82TiB used 1.82TiB path /dev/sdi devid 10 size 1.82TiB used 1.82TiB path /dev/sdk *** Some devices missing
# sdd is destroyed or removed, use -o degraded to force the mount
# to ignore missing devices#
mount -o degraded /dev/sdX /mnt/md0
btrfs device delete missing /mnt/md0
btrfs replace start 9 /dev/sdX_new_disk /mnt/md0
btrfs replace status /mnt/md0
# cancel replacement with
# btrfs replace cancel /dev/md0
A non-raid filesystem is converted to raid by adding a device and running a balance filter that will change the chunk allocation profile.
For example, to convert an existing single device system (/dev/sdX1) into a 2 device raid1 (to protect against a single disk failure):
mount /dev/sdX1 /mnt/md0
btrfs device add /dev/sdY1 /mnt/md0
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/md0
If the metadata is not converted from the single-device default, it remains as DUP, which does not guarantee that copies of block are on separate devices. If data is not converted it does not have any redundant copies at all.
Scrub is an online file system checking tool. Reads all the data and metadata on the file system, and uses checksums and the duplicate copies from RAID storage to identify and repair any corrupt data.
btrfs scrub start /
btrfs scrub status /
Warning: The running scrub process will prevent the system from suspending, see this thread for details.
If running the scrub as a systemd service, use Type=forking. Alternatively, you can pass the -B flag to btrfs scrub start to run it in the foreground and use the default Type value.
Balance passes all data in the filesystem through the allocator again. It is primarily intended to rebalance the data in the filesystem across the devices when a device is added or removed. A balance will regenerate missing copies for the redundant RAID levels, if a device has failed. As of linux kernel 3.3, a balance operation can be made selective about which parts of the filesystem are rewritten.
btrfs balance start /
btrfs balance status /
Btrfs supports transparent compression, meaning every file on the partition is automatically compressed. This not only reduces the size of files, but also improves performance, in particular if using the lzo algorithm, in some specific use cases (e.g. single thread with heavy file IO), while obviously harming performance on other cases (e.g. multithreaded and/or cpu intensive tasks with large file IO).
Compression is enabled using the compress=zlib or compress=lzo mount options. Only files created or modified after the mount option is added will be compressed. However, it can be applied quite easily to existing files (e.g. after a conversion from ext3/4) using the btrfs filesystem defragment -calg command, where alg is either zlib or lzo. In order to re-compress the whole file system with lzo, run the following command:
btrfs filesystem defragment -r -v -clzo /
Tip: Compression can also be enabled per-file without using the compress mount option; simply apply chattr +c to the file. When applied to directories, it will cause new files to be automatically compressed as they come.
When installing Arch to an empty Btrfs partition, set the compress option after preparing the storage drive. Simply switch to another terminal (Ctrl+Alt+number), and run the following command:
mount -o remount,compress=lzo /mnt/target
After the installation is finished, add compress=lzo to the mount options of the root file system in fstab.