From c96e5e685e17ae03351956e175607d38630c140a Mon Sep 17 00:00:00 2001 From: Michele Cereda Date: Tue, 17 May 2022 16:33:10 +0200 Subject: [PATCH] Added examples to btrfs' KB --- knowledge base/btrfs.md | 117 ++++++++++++++++++++++++++++++++-------- 1 file changed, 95 insertions(+), 22 deletions(-) diff --git a/knowledge base/btrfs.md b/knowledge base/btrfs.md index eb8811f..56e195e 100644 --- a/knowledge base/btrfs.md +++ b/knowledge base/btrfs.md @@ -3,41 +3,111 @@ ## TL;DR ```sh -# create a volume with single metadata and double data blocks (useless but good example) -sudo mkfs.btrfs --metadata single --data dup /dev/sdb +# Create a volume with single metadata and double data blocks +# Useless in practice but a good example. +mkfs.btrfs --metadata single --data dup /dev/sdb -# sparse a volume on multiple devices -sudo mkfs.btrfs --label data /dev/sd{a,c,d,e,f,g} --force -echo "LABEL=data /mnt/data btrfs compress=zstd 0 0" | sudo tee -a /etc/fstab +# Sparse a volume on multiple devices. +mkfs.btrfs --label data /dev/sd{a,c,d,e,f,g} --force \ +&& echo "LABEL=data /mnt/data btrfs compress=zstd 0 0" + | tee -a /etc/fstab -# create a readonly snapshot of a subvolume -sudo btrfs subvolume snapshot -r /mnt/btrfs-volume/data /mnt/btrfs-volume/snapshot +# List all btrfs file systems. +btrfs filesystem show -# delete a subvolume -sudo btrfs subvolume delete --commit-each /mnt/btrfs-volume/data +# Show detailed `df` analogue for a filesystem. +btrfs filesystem df path/to/volume -# deduplicate a volume's blocks -sudo duperemove -Adrh --hashfile=/tmp/duperemove.hash /mnt/volume1 /mnt volume2 -sudo jdupes --dedupe --recurse --softabort /mnt/btrfs-volume +# Resize online volumes. +# -2g decreases, +2g increases. +btrfs filesystem resize -2g path/to/volume +btrfs filesystem resize max path/to/volume -# send and receive snapshots -sudo btrfs send /source-dir/.snapshots/snapshot | sudo btrfs receive /dest-dir/.snapshots/ +# Add new devices to a filesystem. +btrfs device add /dev/sdf /mnt -# get the properties of a subvolume/filesystem/inode/device +# Remove devices from a filesystem. +btrfs device delete missing /mnt + +# List subvolumes. +btrfs subvolume list /mnt + +# Create subvolumes. +btrfs subvolume create /mnt/subvolume + +# Create a readonly snapshot of a subvolume. +sudo btrfs subvolume snapshot -r /mnt/volume/data /mnt/volume/snapshot + +# Mount subvolumes without mounting their main filesystem. +mount -o subvol=sv1 /dev/sdb /mnt + +# Delete a subvolume. +sudo btrfs subvolume delete --commit-each /mnt/volume/data + +# Deduplicate a volume's blocks. +sudo duperemove -Adrh --hashfile=/tmp/dr.hash /mnt/volume1 /media volume2 +sudo jdupes --dedupe -rZ /mnt/volume1 /media volume2 + +# Send and receive snapshots. +sudo btrfs send /source/.snapshots/snap \ +| sudo btrfs receive /destination/.snapshots/ + +# Show the properties of a subvolume/filesystem/inode/device. btrfs property get -ts /path/to/subvolume btrfs property get -tf /path/to/filesystem btrfs property get -ti /path/to/inode btrfs property get -td /path/to/device btrfs property get /path/to/autoselected/type/of/resource -# change a subvolume to ro on the fly +# Change a subvolume to RO on the fly. btrfs property set -ts /path/to/subvolume ro true -# get info about a path +# Show a volume's information. sudo btrfs subvolume show /path/to/subvolume -# check the compress ratio of a compressed path -sudo compsize /mnt/btrfs-volume +# Check the compress ratio of a compressed volume. +sudo compsize /mnt/volume + +# Show the status of a running or paused balance operation. +sudo btrfs balance status path/to/filesystem + +# Balance all block groups. +# Slow: rewrites all blocks in filesystem. +sudo btrfs balance start path/to/filesystem +sudo btrfs balance start path/to/filesystem --bg --enqueue + +# Balance data block groups which are less than 15% utilized. +# Run the operation in the background +sudo btrfs balance start --bg -dusage=15 path/to/filesystem + +# Balance a max of 10 metadata chunks with less than 20% utilization and at +# least 1 chunk on a given device 'devid'. +# Get the device's devid with `btrfs filesystem show`. +sudo btrfs balance start -musage=20,limit=10,devid=devid path/to/filesystem + +# Convert data blocks to the raid6 profile, and metadata to raid1c3. +sudo btrfs balance start -dconvert=raid6 -mconvert=raid1c3 path/to/filesystem + +# Convert data blocks to raid1 skipping already converted chunks. +# Useful after a previous cancelled conversion operation. +sudo btrfs balance start -dconvert=raid1,soft path/to/filesystem + +# Cancel, pause or resume a running or paused balance operation. +sudo btrfs balance cancel path/to/filesystem +sudo btrfs balance pause path/to/filesystem +sudo btrfs balance resume path/to/filesystem + +# Enable quota. +sudo btrfs quota enable path/to/subvolume + +# Show quota. +sudo btrfs qgroup show path/to/subvolume + +# Convert ext3/ext4 to btrfs. +btrfs-convert /dev/sdb1 + +# Convert btrfs to ext3/ext4. +btrfs-convert -r /dev/sdb1 ``` ## Check differences between 2 snapshots @@ -56,13 +126,16 @@ sudo snapper -c config diff 445..446 - [Gentoo wiki] - [Snapper] -[gentoo wiki]: https://wiki.gentoo.org/wiki/Btrfs -[snapper]: snapper.md - ## Sources +- [cheat.sh] - [does btrfs have an efficient way to compare snapshots?] - [determine if a btrfs subvolume is read-only] +[snapper]: snapper.md + +[cheat.sh]: https://cheat.sh/btrfs +[gentoo wiki]: https://wiki.gentoo.org/wiki/Btrfs + [determine if a btrfs subvolume is read-only]: https://unix.stackexchange.com/questions/375645/determine-if-btrfs-subvolume-is-read-only#375646 [does btrfs have an efficient way to compare snapshots?]: https://serverfault.com/questions/399894/does-btrfs-have-an-efficient-way-to-compare-snapshots#419444