Skip to content

Instantly share code, notes, and snippets.

@trehn
Created April 9, 2012 16:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trehn/2344589 to your computer and use it in GitHub Desktop.
Save trehn/2344589 to your computer and use it in GitHub Desktop.
btrfs intro
### Setup
uname -r # should be 3.2.x or later
aptitude install btrfs-tools
mkfs.btrfs /dev/sdb
mkdir /mnt/btrfs
mount /dev/sdb /mnt/btrfs
mount -t btrfs
df -h -t btrfs
btrfs filesystem df /mnt/btrfs
### Compression
dd if=/dev/zero of=/mnt/btrfs/file1 bs=256M count=1
df -h -t btrfs
btrfs fi df /mnt/btrfs # fi is shorthand for filesystem
btrfs filesystem defragment -c /mnt/btrfs/file1
btrfs fi df /mnt/btrfs # file has been compressed, additional space available
mount -o remount,compress /mnt/btrfs
dd if=/dev/zero of=/mnt/btrfs/file2 bs=256M count=1
btrfs fi df /mnt/btrfs # new file has been automatically compressed
df -h -t btrfs # actual file size is not reflected
du -sh /mnt/btrfs # slow :(
### Multiple devices
btrfs fi df /mnt/btrfs # go back to slides, explain RAID levels
umount /mnt/btrfs
mkfs.btrfs --data raid1 --metadata raid1 /dev/sdb /dev/sdc /dev/sdd
df -h -t btrfs # see 3G available
dd if=/dev/zero of=/mnt/btrfs/file1 bs=512M count=1
df -h -t btrfs # see 1G used
dd if=/dev/zero of=/mnt/btrfs/file2 bs=512M count=1
df -h -t btrfs # see 2G used
dd if=/dev/zero of=/mnt/btrfs/file3 bs=512M count=1 # ENOSPC
df -h -t btrfs
du -h /mnt/btrfs/file3
btrfs device add /dev/sde /mnt/btrfs
df -h -t btrfs # see total size increased, but not available
dd if=/dev/zero of=/mnt/btrfs/file3 bs=512M count=1 # ENOSPC again
btrfs filesystem balance /mnt/btrfs
df -h -t btrfs # yay, space now available
dd if=/dev/zero of=/mnt/btrfs/file3 bs=512M count=1 # now works
### Disk failure
dd if=/dev/zero of=/dev/sdb bs=512M count=1 # simulate SHTF
rm /dev/sdb
btrfs fi show /dev/sdc # device missing
btrfs device delete missing /mnt/btrfs # fails
btrfs device add /dev/sdf /mnt/btrfs
df -h -t btrfs # 1G additional space available
btrfs fi show /dev/sdc # new disk not used yet
btrfs fi balance /mnt/btrfs # rebuild data to new disk
btrfs fi show /dev/sdc # new disk is in use
btrfs device delete missing /mnt/btrfs # now succeeds
df -h -t btrfs # total space back at 4G
rm /mnt/btrfs/* # cleanup
### Subvolumes and snapshots
btrfs subvolume create /mnt/btrfs/sv1
ls -al /mnt/btrfs/sv1/ # just an empty dir
mkdir /mnt/btrfs_sv1
mount -o subvol=sv1 /dev/sdc /mnt/btrfs_sv1
mount -t btrfs
dd if=/dev/zero of=/mnt/btrfs_sv1/file1 bs=512M count=1
df -h -t btrfs # space is the same for both mounts
btrfs subvolume snapshot /mnt/btrfs/sv1 /mnt/btrfs/ss1
mkdir /mnt/btrfs_ss1
mount -o subvol=ss1 /dev/sdc /mnt/btrfs_ss1
dd if=/dev/zero of=/mnt/btrfs_ss1/file2 bs=512M count=1 # writable snapshot
btrfs fi df /mnt/btrfs # 1G data used
du -sh /mnt/btrfs_* # 1.5G visible
umount /mnt/btrfs_ss1
btrfs sub del /mnt/btrfs/ss1 # snapshot handles like a subvol
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment