Make btrfs the default file system for Workstation and KDE
Summary
LVM+ext4 has served us well, and it will remain available and supported for custom installs. The default file system for Workstation and KDE installs shall be btrfs.
Owners
- Names: Chris Murphy, Neal Gompa, Josef Bacik, Michel Alexandre Salim, Davide Cavalca, Erich Eickmeyer, Igor Raits
- Emails: chrismurphy@fedoraproject.org, ngompa13@gmail.com, josef@toxicpanda.com, michel@michel-slm.name, dcavalca@fb.com, erich@ericheickmeyer.com,ignatenkobrain@fedoraproject.org
- Product: Workstation, KDE, Fedora Jam
- Responsible WG: Workstation working group, and KDE SIG
Current status
- Targeted release: Fedora 33
- Last updated: 2020-06-20
- FESCo issue: <will be assigned by the Wrangler>
- Tracker bug: <will be assigned by the Wrangler>
- Release notes tracker: <will be assigned by the Wrangler>
Detailed Description
The change is based on the installer's custom partitioning btrfs preset. It's been well tested for 7 years.
Current partitioning
vg/root
LV mounted at /
and a vg/home
LV mounted at /home
. These are separate file system volumes, with separate free/used space.
Proposed partitioning
root
subvolume mounted at /
and home
subvolume mounted at /home
. Subvolumes don't have size, they act mostly like directories, space is shared.
Unchanged
/boot
will be a small ext4 volume. A separate boot is needed to boot dm-crypt sysroot installations; it's less complicated to keep the layout the same, regardless of whether sysroot is encrypted. There will be no automatic snapshots/rollbacks.
Optimizations (Optional)
The detailed description above is the proposal. It's intended to be a minimalist and transparent switch. It's also the same as was proposed (and accepted) for Fedora 16. The following optimizations improve on the proposal, but are not critical. They are also transparent to most users. The general idea is agree to the base proposal first, and then consider these as enhancements.
Boot on btrfs
- Instead of a 1G ext4 boot, create a 1G btrfs boot.
- Advantage: Makes it possible to include in a snapshot and rollback regime. GRUB has stable support for btrfs for 10+ years.
- Scope: Contingent on bootloader and installer team review and approval. blivet should use
mkfs.btrfs --mixed
.
Compression
- Enable transparent compression using zstd on select directories:
/usr
/var/lib/flatpak
~/.local/share/flatpak
- Advantage: Saves space and significantly reduces write amplification. May improve performance in some instances.
- Scope: Contingent on installer team review and approval to enhance anaconda to perform the installation using
mount -o compress=zstd
, then set the proper XATTR for each directory. The XATRR can't be set until after the directories are created via: rsync, rpm, or unsquashfs based installation.
Additional subvolumes
/var/log/
/var/lib/libvirt/images
and~/.local/share/gnome-boxes/images/
will use separate subvolumes.- Advantage: Makes it easier to excluded them from snapshots, rollbacks, and send/receive. (btrfs snapshotting is not recursive, it stops at a nested subvolume.)
- Scope: Anaconda knows how to do this already, just change the kickstart to add additional subvolumes. GNOME Boxes will need enhancement.
Feedback
Red Hat doesn't support btrfs? Can Fedora do this?
Red Hat supports Fedora well, in many ways. But Fedora already works closely with, and depends on, upstreams. And this will be one of them. That's an important consideration for this proposal. The community has a stake in ensuring it is supported. Red Hat will never support btrfs if Fedora rejects it. Fedora necessarily needs to be first, and make the persuasive case that it solve more problems than alternatives. Feature owners believe it does, hands down.
What about UI/UX and integration in the desktop?
If btrfs isn't the default file system, there's no commitment, nor reason to work on any UI/UX integration. There are ideas to make certain features discoverable. None are planned for Fedora 33. Anaconda already has sophisticated btrfs integration. Ideas abound for Fedora 34 including: systemd-homed which may take advantage of either btrfs online resize, or near-term planned native encryption which could make it possible to live convert non-encrypted homes to encrypted; and system snapshot and rollbacks.
What btrfs features are recommended and supported?
This is the upstream btrfs feature status page
Fedora is a community project. What is supported within Fedora depends on what the community decides to put forward in terms of resources.
When in doubt, use defaults. Be patient with yourself, and each other. There are few things you must learn about btrfs, but the toy box is full. It can be overwhelming. Features that sound familiar, like raid1, don't work the same as other implementations you're familiar with. There is lots of jargon. Take your time. No one needs to go from 0 kph to 100 kph overnight.
What is possible but not supported?
No btrfs features will be disabled. The full box of toys is available. It is possible to get into trouble. You might also have more fun.
Benefit to Fedora
- problem
- btrfs helps solve
- Users running out of free space on either
/
or/home
Workstation issue #152- "one big file system": no hard barriers like partitions or logical volumes
- transparent compression: significantly reduces write amplification, improves lifespan of storage hardware
- reflinks and snapshots are more efficient for use cases like containers (Podman supports both)
- Poor desktop responsiveness when under pressure Workstation issue #154
- Currently only btrfs has proper IO isolation capability via cgroups2
- Completes the resource control picture: memory, cpu, IO isolation
- Storage devices betray users, resulting in data corruption
- Everything is checksummed and verified on every read
- Corrupt data results in EIO, instead of resulting in application confusion, and isn't replicated into backups and archives
- File system resize
- Online shrink and grow are fundamental to the design
- Complex storage setups are... complicated
- Simple and comprehensive command interface. One master command
- Simpler to boot, all code is in the kernel, no initramfs complexities
Scope
- Proposal owners:
- Submit PR's for Anaconda to change
default_scheme = BTRFS
to the proper product files: Workstation, KDE. - Multiple test days: build community support network
- Aid with documentation
- Submit PR's for Anaconda to change
- Other developers:
- Anaconda, review PRs and merge
- Bootloader team, review PRs and merge
- Recommended optimization
chattr +C
set on the containing directory for virt-manager and GNOME Boxes.
- Release engineering: #Releng issue number
- Policies and guidelines: N/A
- Trademark approval: N/A
Upgrade/compatibility impact
Change will not affect upgrades.
Documentation will be provided for existing btrfs users to "retrofit" their setups to that of a default btrfs installations (base plus any approved options).
How To Test
Today
Do a custom partitioning installation; change the scheme drop-down menu to btrfs; click the blue "automatically create partitions"; and install.
Fedora 31, 32, Rawhide, on x86_64 and ARM.
Once change lands
It should be simple enough to test, just do a normal install.
User Experience
Pros
- Mostly transparent
- Space savings from compression
- Longer lifespan of hardware, also from compression.
- Utilities for used and free space, CLI and GUI, are expected to behave the same. No special commands are required.
- More detailed information can be revealed by
btrfs
specific commands.
Enhancement opportunities
updatedb does not index /home when /home is a bind mount Also can affected rpm-ostree installations, including Silverblue.
GNOME Usage: Incorrect numbers when using multiple btrfs subvolumes This isn't btrfs specific, happens with "one big ext4" volume as well.
GNOME Boxes, RFE: create qcow2 with 'nocow' option when on btrfs /home This is btrfs specific, and is a recommended optimization for both GNOME Boxes and virt-manager.
containers/libpod: automatically use btrfs driver if on btrfs
Dependencies
None.
Contingency Plan
- Contingency mechanism: Owner will revert changes back to LVM+ext4
- Contingency deadline: Beta freeze
- Blocks release? Yes
- Blocks product? Workstation and KDE
Documentation
Strictly speaking no documentation is required reading. But there will be some Fedora documentation to help get the ball rolling.
For those who want to know more:
btrfs wiki main page and full feature list.
man 5 btrfs
contains: mount options, features, swapfile support, checksum algorithms, and more
man btrfs
contains an overview of the btrfs subcommands
man btrfs <subcommand>
will show the man page for that subcommand
NOTE: The btrfs command will accept partial subcommands, as long as it's not ambiguous. These are equivalent commands:
btrfs subvolume snapshot
btrfs sub snap
btrfs su sn
You'll discover your own convention. It might be preferable to write out the full command on forums and lists, but then maybe some folks don't learn about this useful shortcut?
Release Notes
The default file system is btrfs.