diff --git a/notes/btrfs.md b/notes/btrfs.md new file mode 100644 index 0000000..bcdf0f8 --- /dev/null +++ b/notes/btrfs.md @@ -0,0 +1,449 @@ +# BTRFS + +## Table of Contents + +- [BTRFS](#btrfs) + - [Table of Contents](#table-of-contents) + - [Information on Drives](#information-on-drives) + - [Information on Filesystem](#information-on-filesystem) + - [Backup Procedures](#backup-procedures) + - [Recovery](#recovery) + - [Drive Manipulation](#drive-manipulation) + - [Replace Drives](#replace-drives) + - [Balances](#balances) + - [Scrub](#scrub) + - [Snapshots](#snapshots) + +## Information on Drives + +**List of Drives and Mountpoints** + +To check all attached drives: + +```bash +ls /dev/sd* +ls /dev/nv* +``` + +To view mountpoints and drive details such as names, sizes, and mountpoints: + +```bash +lsblk +df -h +cat /etc/fstab +``` + +**Drive Information** + +To get detailed information and serial number of a specific drive: + +```bash +smartctl -i /dev/sdc +``` + +## Information on Filesystem + +**Show Basic Filesystem Information** + +To display basic information (size, IDs, paths, etc.) for the specified mountpoint: + +```bash +btrfs fi show /mnt/media/ +``` + +**Display Detailed Usage Information** + +To show detailed usage information (allocated, unallocated, etc.) for the specified mountpoint: + +```bash +btrfs fi usage /mnt/media +``` + +**Display Detailed Allocation Information** + +To view detailed allocation information (block groups, used space) for the specified mountpoint: + +```bash +btrfs fi df /mnt/media +``` + +**Get Detailed Device Usage Statistics** + +To get detailed device usage statistics (physical size, unallocated space, RAID levels, etc.) for a BTRFS filesystem: + +```bash +btrfs device usage /mnt/media +``` + +**Scan and Display BTRFS Information** + +To scan and display BTRFS information for all devices or a specific drive: + +```bash +btrfs device scan /dev/sda/ +``` + +**Retrieve Statistics and Error Information** + +To get statistics and error information (read errors, write errors, flush errors, etc.) for the specified mountpoint: + +```bash +btrfs device stats /mnt/media +``` + +**List BTRFS Subvolumes** + +To list BTRFS subvolumes: + +```bash +btrfs subvolume list / +btrfs subvolume list /home/fabrice +btrfs subvolume list /mnt/workbench +``` + +**Default Subvolume** + +To check if a non-standard subvolume is set as the default: + +```bash +btrfs subvol get-default /mnt/tmp/ +btrfs subvol list /mnt/tmp/ +``` + +To change the default subvolume if a non-standard one is set: + +```bash +btrfs subvol set-default 257 /mnt/tmp/ +``` + +## Backup Procedures + +**Desktop Backup: Root and Home** + +1. Mount snapshot location: + + ```bash + mount UUID=394decca-4780-47c9-9ae3-e4d03681a791 -o subvol=snapshots /mnt/snapshots + ``` + +2. Create snapshots for root and home: + + ```bash + btrfs subvolume snapshot / "/mnt/snapshots/root/2021-05-23 - Fedora 34 upgrade" + btrfs subvolume snapshot /home "/mnt/snapshots/home/2021-05-23 - Fedora 34 upgrade" + ``` + +3. Unmount after creating snapshots: + + ```bash + umount /mnt/snapshots + ``` + +**Data Backup: Workbench, Documents, Education** + +1. Mount snapshot location: + + ```bash + mount UUID=72e1770a-9fc0-461e-88d3-db640ff53dd9 -o subvol=snapshots /mnt/snapshots + ``` + +2. Create snapshots for multiple directories: + + ```bash + btrfs subvolume snapshot /mnt/workbench "/mnt/snapshots/workbench/2021-05-23 - Fedora 34 upgrade" + btrfs subvolume snapshot /home/fabrice/Documents "/mnt/snapshots/Documents/2021-05-23 - Fedora 34 upgrade" + btrfs subvolume snapshot /home/fabrice/Education "/mnt/snapshots/Education/2021-05-23 - Fedora 34 upgrade" + ``` + +3. Unmount after creating snapshots: + + ```bash + umount /mnt/snapshots + ``` + +**STOR1 Fedora Backup** + +1. Mount snapshot location: + + ```bash + mount UUID=e4fd608e-cfe8-4c10-b6d0-03b05bae8aa6 -o subvol=snapshots /mnt/snapshots + ``` + +2. Create snapshot: + + ```bash + btrfs subvolume snapshot / "/mnt/snapshots/root/2021-06-06" + ``` + +3. Unmount after creating snapshot: + + ```bash + umount /mnt/snapshots + ``` + +**STOR1 Debian Backup** + +1. Mount snapshot location: + + ```bash + mount UUID=c9a77f3c-626f-47bd-b4e3-9a094bea287f -o subvol=snapshots /mnt/snapshots + ``` + +2. Create snapshot: + + ```bash + btrfs subvolume snapshot / "/mnt/snapshots/root/2021-07-12 - post mostly setup" + ``` + +3. Unmount after creating snapshot: + + ```bash + umount /mnt/snapshots + ``` + +**STOR2 Backup** + +1. Mount snapshot location: + + ```bash + mount UUID=30bd5e0e-e781-4e87-8fb8-ea5606403b15 -o subvol=snapshots /mnt/snapshots + ``` + +2. Create snapshot: + + ```bash + btrfs subvolume snapshot / "/mnt/snapshots/root/2021-06-06 - Fedora 34" + ``` + +3. Unmount after creating snapshot: + + ```bash + umount /mnt/snapshots + ``` + +## Recovery + +**Mount a Subvolume with Recovery Options** + +```bash +mount -o recovery,subvol=backups UUID=aa5c1d34-ecba-42a9-9339-8f7879d47536 /mnt/tmp +``` + +**Clear Cache During Mount** + +```bash +mount -o clear_cache,subvol=backups UUID=aa5c1d34-ecba-42a9-9339-8f7879d47536 /mnt/tmp +``` + +**Data Restoration** + +To restore data using `btrfs restore`: + +```bash +btrfs restore -D /dev/sdb +``` + +## Drive Manipulation + +**Mount Whole Drive** + +```bash +mount UUID=c9a77f3c-626f-47bd-b4e3-9a094bea287f /mnt/tmp +``` + +**Mount Subvolume by ID** + +```bash +btrfs subvol list / +mount -o subvolid=5 /dev/disk/by-uuid/7a22514b-594a-43a3-8fdd-4df1530b5465 /mnt +``` + +**Add a New Drive** + +To add a new drive to an existing BTRFS setup: + +```bash +btrfs device add /dev/sdf /mnt/media/ +``` + +**Resize Filesystem** + +```bash +btrfs filesystem resize 1:max /mnt/media/ +``` + +**Create Subvolumes** + +```bash +btrfs subvol create /mnt/tmp/root +btrfs subvol create /mnt/tmp/snapshots +``` + +### Replace Drives + +**Replace the source drive with the target drive:** + +This command will start the replacement process where the data from the old drive (`/dev/sdb`) is copied over to the new drive (`/dev/sdj`). + +```bash +btrfs replace start /dev/sdb /dev/sdj /mnt/media +``` + +- `/dev/sdb`: Source drive to be replaced. +- `/dev/sdj`: Target drive to replace the source drive. +- `/mnt/media`: Mount point of the BTRFS filesystem. + +**Monitor the progress of the replacement:** + +Once the replacement process has started, you can monitor its progress with the following command: + +```bash +btrfs replace status /mnt/media +``` + +- This will print the current status of the drive replacement operation, showing how much data has been migrated. + +**Monitor progress interactively:** + +For a more detailed, interactive status view of the replacement process, use the `-i` option: + +```bash +btrfs replace status -i /mnt/media +``` + +- `-i`: This flag provides an interactive mode where the progress is updated in real time. + +**Notes:** + +- The `btrfs replace` command allows you to replace a faulty or underperforming drive without unmounting the filesystem, making it ideal for live systems. +- It can be used for upgrading storage by replacing smaller drives with larger ones, or for replacing failing drives. +- Ensure that the target drive has enough space to accommodate the data from the source drive. + +## Balances + +**Perform a Full Balance with Minimal Usage** + +```bash +btrfs balance start --full-balance -dusage=0 -musage=0 /mnt/media/ +``` + +- `--full-balance` is default but with a warning if not specified. +- `-dusage=0` means only data block groups that are nearly empty (0% full) will be balanced. +- `-musage=0` means only metadata block groups that are nearly empty (0% full) will be balanced. + +**Perform a Full Balance on Partially Used Blocks** + +```bash +btrfs balance start --full-balance -dusage=50 -musage=50 /mnt/media/ +``` + +- `-dusage=50` means data block groups that are less than 50% full will be included in the balance process. +- `-musage=50` means metadata block groups that are less than 50% full will also be balanced. + +**Balance data in the background** + +```bash +btrfs balance start --bg -d /mnt/media +``` + +**Balance metadata in the background** + +```bash +btrfs balance start --bg -m /mnt/media +``` + +**Balance data and metadata in the background** + +```bash +btrfs balance start --bg --full-balance -dusage=0 -musage=0 /mnt/media/ +``` + +**To balance 100 chunks of data** + +```bash +btrfs balance start --bg -dlimit=100 /mnt/media/ +``` + +**Cancel Balance Operation** + +```bash +btrfs balance cancel /mnt/media/ +``` + +**Monitor Balance Status** + +```bash +btrfs balance status /mnt/media/ +``` + +## Scrub + +**Start a Scrub Operation** + +To start a scrub operation to verify data integrity: + +```bash +btrfs scrub start /mnt/media/ +``` + +**Check Scrub Status** + +To check the progress and status of the ongoing scrub: + +```bash +btrfs scrub status /mnt/media/ +``` + +**Cancel a Scrub Operation** + +```bash +btrfs scrub cancel /mnt/media/ +``` + +## Snapshots + +**Create Snapshots** + +1. **Mount snapshot subvolume** + +```bash +mount UUID=c9a77f3c-626f-47bd-b4e3-9a094bea287f -o subvol=snapshots /mnt/snapshots +``` + +2. **Create a new snapshot** + +```bash +btrfs subvolume snapshot / "/mnt/snapshots/root/2021-06-26 - Debian install" +``` + +3. **Unmount after creating snapshots** + +```bash +umount /mnt/snapshots +``` + +**Delete Snapshots** + +1. **Mount subvolume containing snapshots** + + ```bash + mount -o subvol=snapshots /dev/disk/by-uuid/7a22514b-594a-43a3-8fdd-4df1530b5465 /mnt/snapshots/ + ``` + +2. **List available snapshots** + + ```bash + btrfs subvol list /mnt/snapshots/ + ``` + +3. **Delete the desired snapshot** + + ```bash + btrfs subvolume delete /mnt/snapshots/@rootfs/2024-09-15 + ``` + +4. **Unmount after deleting snapshots** + + ```bash + umount /mnt/snapshots/ + ```