It really depends on your requirements...
But a few useful points:
- Use GPT partition table and not MBR. Everything will be simpler, no need for extended/logical partitions.
- If you need to be able to do online (mounted) partition resizing, pick btrfs. Ext4 can only grow them online but not shrink.
- Make sure your partition boundaries are 1 MiB aligned.
- If you need more advanced setups, consider using LVM.
i usually have efi boot partition (512mb), / (linux root), /home (i usually make this pretty big) , and swap partition.
Same, except I also keep /var on a separate partition (old FreeBSD habit), as the I/O characteristics of /var are usually very different from rest of /
Not saying my practice is the best one, but here's what I do:
- EFI system partition is mounted on /boot
- kernel is held here. In case of distros like NixOS etc that keep around old kernels, a small ESP might run out of space. I make mine at least 1GB.
- the rest of the disk is one luks2 volume
- inside the encrypted volume, there's a BTRFS volume
- there's a subvolume for /home
- and a subvolume for every distro I have (which is usually 1, but sometimes I tinker or switch)
- Kernel command line parameters specify the btrfs subvol with the right distro to boot.
- for NixOS, you need a bootloader (to choose the right kernel). Systemd-boot works well, and its configuration is easily readable. I never figured out how to work with GRUB2, its configuration is just too confusing.
- or if you like Arch, dispense with bootloaders and just use EFISTUB. You can put kernel cmdline params into EFI bootloader options with
efibootmgr
.
Simple yet complete. Efficient, and extensible - for example, now that everything is a subvolume, I can easily snapshot it, then create backups with rsync off the snapshot, to avoid inconsistent state between backed-up files.
- EFI system partition is mounted on /boot
I think you're going to get a wide variety of responses here. It comes down to a lot of factors.
For me personally, I've been shifting everything I have to Btrfs, so I can tell you what I've done recently and why.
A big caveat is that many of my systems have multiple physical drives. This means I'm often setting things up based on the speed and capacity of those disks.
But, I do have one system with a single drive shared for booting, root, and home. It's set up like this:
-
A FAT32 partition for /boot. 512 MB.
-
A single Btrfs partition across the rest of the drive.
-
Btrfs subvolumes: @ mounted at /, @home mounted at /home. @snapshots mounted at /.snapshots.
I could go crazy with other subvols (e.g. for /var/log), but ultimately it is sufficient for me to be able to snapshot / and /home separately.
For some of my other systems, I'll have / and /home on different drives. In that case, each has their own @snapshots with their own mount point. I tend still to throw the EFI boot partition mounted at /boot on the same drive as /.
It's very easy to simply change /etc/fstab as needed and point to another snapshot, effectively rolling back the drive to some former point as necessary.
I've had some wild issues that I can't even begin to explain with btrfs. I landed on using xfs for / partition and btrfs on /home
Fair, I've not had any issues but I'm sure they exist. One or the other is faster based on workload, too, so it's not really that one is objectively better all the time.
tbh I'm pretty sure the issue I ran into was user error anyways, but once I finally figured out what I was doing, I decided to land on xfs for root and btrfs for home for the following reasons.
- xfs is supposedly more performant and common in data centers
- having a separate partition mounted at /home allows for os reinstalls or even distro swaps while retaining my home directory contents (assuming my user is the same)
- most of the contents I want backed up are held in /home. I don't want snapshots of my entire system laying around
- I like being extra
-
Usually, I do the simplest thing: all the stuff goes on one big ext4 partition. I don't make a separate partition for /home. I'll make a swap partition if I can remember but I've forgotten to do that before and nothing bad happened. The bootloader goes on a fat32 /boot/efi on the same drive as whatever the Linux install is on. This way I can swap around the drive to different pcs if I have to or easily change/upgrade drives without having to reinstall all my stuff.
This strategy works for dual booting Windows also. I'll put the windows install all on its own separate drive so it won't try to erase grub during a disk check or something. That happened one time. Also, by putting Windows and Linux on separate drives you can use the bios to boot between Windows or Linux if you mess up one of the bootloaders.
Use zram instead of a SWAP partititon. Zram compresses and keeps in RAM. It's default on Fedora and a few others iirc.
Depends on your system. Desktop have different requirements than servers.
On both at minimum, I'd keep /home and /var/log separate. Those usually see the most writes, are least controlled, and so long as they're separate partitions they can fill up accidentally and your system should still remain functional. /tmp and /var/tmp should usually be mounted separately, for similar reasons.
/boot usually keep separate because bootloaders don't always understand the every weird filesystem you might use elsewhere. It would also be the one unencrypted partition you need to boot off of.
On a server, /opt and /srv would usually be separate, usually separate volumes for each directory within those as well, depending how you want to isolate each application/data store location. You could just use quotas; but mounting separately would also allow you to specify different flags, i.e. noexec, nosuid for volumes that should only ever contain data.
/var/lib/docker and other stuff in /var/lib I usually like to keep on separate mounts. i.e. put /var/lib/mysql or other databases on a separate faster disk, use a different file system maybe, and again different mount options. In distant past, you'd mount /var/spool on a different filesystem with more inodes than usual.
Highly secure systems usually require /var/log/audit to be separate, and needs to have enough space guaranteed that it won't ever run out of space and lock the system out due to inability to audit log.
Bottom line is its differnet depending on your requiremtns, but splitting unnecessarily is a good way to waste space and nothing else. Separate only if you need it on a different type of device, different mount options, different size guarantees etc, don't do it for no reason.
Regarding /boot, it can be encrypted as long as your bootloader can decrypt it, for example GRUB can decrypt LUKS encrypted partitions (albeit somewhat slowly). And the only partition that really has to be unencrypted is UEFI system partition (ESP), where bootloaders are located.