---
arch-wiki: https://wiki.archlinux.org/title/Btrfs
obj: filesystem
---
# Btrfs
Btrfs is a modern copy on write (CoW) filesystem for [Linux](../Linux.md) aimed at implementing advanced features while also focusing on fault tolerance, repair and easy administration. Btrfs is licensed under the GPL and open for contribution from anyone.

## Create the filesystem
**Single Device**:
``` shell
mkfs.btrfs -L _mylabel_ /dev/partition
```
**Multiple Devices (similiar to [RAID](RAID.md))**:
```shell
mkfs.btrfs -d single -m raid1 /dev/part1 /dev/part2 ...
```

## Subvolumes
Subvolumes are their own seperated namespaces and work like [ZFS](ZFS.md) Datasets. They can be mounted seperately. Each Btrfs file system has a top-level subvolume with ID 5.

**Create a subvolume**:
```shell
btrfs subvolume create /path/to/subvolume
```

**List suvolumes**:
```shell
btrfs subvolume list -p path
```

**Delete subvolume**:
```shell
btrfs subvolume delete /path/to/subvolume
```

## Using Swapfiles
Swapfiles can be used by disabling CoW:
```shell
chattr +C /path/to/swapsubvolume
```

**Use swapfile:**
```shell
touch /swapfile
chattr +C /swapfile
fallocate -l 8G /swapfile
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile
```

## Filesystem Usage
**See Usage**:
```shell
btrfs filesystem usage /
```

**Available Space:**
```shell
btrfs filesystem df /
```

## Scrub
Btrfs can self heal itself or check for errors with scrubbing.
**Start:**
```shell
btrfs scrub start /
```

**See Status:**
```shell
btrfs scrub status /
```

## Balance
Rebalance the filesystem.
```shell
btrfs balance start --bg /
btrfs balance status /
```

## Snapshots
Btrfs can use snapshots
```shell
btrfs subvolume snapshot source [dest/]name
````

## Resizing
Btrfs can be resized.

**To extend the file system size to the maximum available size of the device:**
```shell
btrfs filesystem resize max /
```

**To extend the file system to a specific size:**
```shell
btrfs filesystem resize size /
```

**Add or remove size**
```shell
btrfs filesystem resize +size /
btrfs filesystem resize -size /
```
