meta data for this page
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| linux:fs:btrfs [2017/06/19 08:50] – [periodic scrub] niziak | linux:fs:btrfs [2021/05/02 11:34] (current) – niziak | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== BTRFS ====== | ||
| + | |||
| ===== References ===== | ===== References ===== | ||
| [[https:// | [[https:// | ||
| Line 26: | Line 28: | ||
| or | or | ||
| < | < | ||
| + | |||
| + | ===== Swap support ===== | ||
| + | |||
| + | **Current state:** Do not create SWAP files on BTRFS! | ||
| + | |||
| + | Swap support was restored with Kernel 4.21 | ||
| + | |||
| ===== Add/remove block devices ===== | ===== Add/remove block devices ===== | ||
| Line 36: | Line 45: | ||
| !!! It is possible to remove any device if there is free space to which data can be moved during removal. | !!! It is possible to remove any device if there is free space to which data can be moved during removal. | ||
| - | ===== Compression ===== | ||
| - | |||
| - | [[https:// | ||
| - | |||
| - | Compression: | ||
| - | * ZLIB -- slower, higher compression ratio (uses zlib level 3 setting) | ||
| - | * LZO -- faster compression and decompression than zlib, worse compression ratio, designed to be fast | ||
| - | |||
| - | Default compression for kernels up to 3.6 it's ZLIB. For compatibility with old kernel ZLIB is default. | ||
| - | LZO is fast and new algo, but can be buggy. | ||
| - | |||
| - | |||
| - | [[https:// | ||
| - | >No. Balance moves entire file extents and does not change their contents. If you want to recompress files, use btrfs filesystem defrag with the -c option. | ||
| - | >Balance does a defragmentation, | ||
| - | |||
| - | NOTE: Defragmentation with recompression destroys deduplication. | ||
| - | * Size changed from 6,94 GB to 7,39 GB | ||
| - | * After deduplication with 1024k block drops to 7.17 GB (net change in shared extents of: 490.0M) | ||
| - | * After deduplication with 4k block drops from 7.17 GB to 6,94 GB(a net change in shared extents of: 306.6M) | ||
| - | |||
| - | ==== mount options ==== | ||
| - | Can be enabled during mount time: | ||
| - | <code bash> | ||
| - | mount BTRFS -o remount, | ||
| - | mount BTRFS -o remount, | ||
| - | </ | ||
| - | > if the first portion of data being compressed is not smaller than the original, the compression of the file is disabled -- unless the filesystem is mounted with compress-force | ||
| - | |||
| - | **compress-force=< | ||
| - | |||
| - | Test data of size 651MB takes 371MB after compression. | ||
| - | |||
| - | ==== chattr +c ==== | ||
| - | Also single file compression possible using '' | ||
| - | |||
| - | To recompress exisitng files, start defragmentation with -c param: | ||
| - | < | ||
| - | < | ||
| - | |||
| - | It is not possible to get compression ratio of file. | ||
| - | |||
| - | Internals: | ||
| - | * In compressed extents, individual blocks are not compressed separately; rather, the compression stream spans the entire extent. | ||
| - | * BTRFS: There is a simple decision logic: if the first portion of data being compressed is not smaller than the original, the compression of the file is disabled -- unless the filesystem is mounted with compress-force | ||
| - | |||
| - | ==== btrfs property ==== | ||
| - | <code bash> | ||
| - | btrfs property set < | ||
| - | </ | ||
| - | ===== Deduplication ===== | ||
| - | External tool to find duplicated extens available | ||
| - | [[https:// | ||
| - | |||
| - | Simply do ' | ||
| - | Following binaries will be installed: | ||
| - | * btrfs-extent-same | ||
| - | * csum-test | ||
| - | * duperemove | ||
| - | * hashstats | ||
| - | * show-shared-extents | ||
| - | |||
| - | Recursively find duplicates in <dir> | ||
| - | < | ||
| - | |||
| - | The same as above, but make real deduplication (on BTRFS only) | ||
| - | < | ||
| - | |||
| - | Increase deduplication chance by reducing block size to 4k: | ||
| - | < | ||
| - | |||
| - | This deduplication works nice, it can find some shared parts inside Maildir. | ||
| - | |||
| - | |||
| - | ===== Subvolumes ===== | ||
| - | |||
| - | < | ||
| - | btrfs subvolume create /BTRFS/sub1 | ||
| - | btrfs subvolume create /BTRFS/sub2 | ||
| - | btrfs subvolume create /BTRFS/sub3 | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | btrfs subvolume list /BTRFS | ||
| - | ID 256 gen 234 top level 5 path sub1 | ||
| - | ID 257 gen 227 top level 5 path sub2 | ||
| - | ID 258 gen 228 top level 5 path sub3 | ||
| - | </ | ||
| - | |||
| - | Mount subvolume | ||
| - | < | ||
| - | |||
| - | Getting data size on each subcvolume: | ||
| - | * Enable quota on btrfs '' | ||
| - | * Install script [[https:// | ||
| - | |||
| - | |||
| - | ==== Different mount options ==== | ||
| - | NOT SUPPORTED YET: | ||
| - | In general, btrfs doesn' | ||
| - | per-subvolume mount options. | ||
| - | in the kernel was designed to allow it, and it's on the roadmap, it just | ||
| - | hasn't been done... yet. | ||
| - | |||
| - | To make workaround it is possible to use attributes on files or directories: | ||
| - | * C disable COW feature (for newly created directories or zero sized files). New files in directores with C attributes will be created with C attrib. But not subdirectories. | ||
| - | * c enable compression | ||
| - | |||
| - | ==== Move data between subvolumes ==== | ||
| - | See `cp` command arg: | ||
| - | When --reflink[=always] is specified, perform a lightweight copy, where the data blocks are copied | ||
| - | | ||
| - | |||
| - | <code bash> | ||
| - | cp -pr --reflink=always srcDirectory dstDirectory/ | ||
| - | rm -r srcDirectory | ||
| - | </ | ||
| ====== Scrub ====== | ====== Scrub ====== | ||
| Line 172: | Line 64: | ||
| <code bash> | <code bash> | ||
| - | ===== periodic scrub ===== | ||
| - | From arch linux '' | + | ====== migration to BTRFS ====== |
| - | <file | / | + | <code bash> |
| - | [Unit] | + | |
| - | Description=Btrfs scrub on %f | + | |
| - | [Service] | + | ====== Issues ====== |
| - | Nice=19 | + | |
| - | IOSchedulingClass=idle | + | |
| - | ExecStart=/bin/btrfs scrub start -B %f | + | |
| - | </ | + | |
| - | <file | / | + | ===== Compression type 0x3 not supported ===== |
| - | [Unit] | + | |
| - | Description=Monthly Btrfs scrub on %f | + | |
| - | + | ||
| - | [Timer] | + | |
| - | OnCalendar=monthly | + | |
| - | AccuracySec=1d | + | |
| - | Persistent=true | + | |
| - | + | ||
| - | [Install] | + | |
| - | WantedBy=multi-user.target | + | |
| - | </ | + | |
| + | GRUB 2.02 doesn' | ||
| + | Solution is to exlude ''/ | ||
| <code bash> | <code bash> | ||
| - | systemctl daemon-reload | + | sudo btrfs filesystem defragment |
| - | systemctl enable | + | sudo btrfs property set /boot compression zlib |
| - | systemctl start btrfs-scrub@-.timer | + | # disable compression for newly created files |
| + | chattr | ||
| </ | </ | ||
| - | |||
| - | |||
| - | ====== migration to BTRFS ====== | ||
| - | |||
| - | <code bash> | ||
| - | |||
| - | ====== Issues ====== | ||
| ===== error inheriting props for ino 3336468 (root 264): -28 ===== | ===== error inheriting props for ino 3336468 (root 264): -28 ===== | ||