Before touching any filesystem, you need to master the Linux CLI, partition management, mounting and /etc/fstab, and the block device concept. In this episode you set up a VM/lab experiment and install the e2fsprogs, xfsprogs, btrfs-progs, and OpenZFS toolchains.

Welcome to the Learn Linux Filesystem series! This series will take you through mastering ext4, XFS, btrfs, and ZFS — from the most basic concepts to production hardening. There are 23 episodes arranged in six phases, and all of them require hands-on practice on a real machine.
But before touching mkfs or zpool, there are some basic skills and software you must have. Why are these prerequisites important? Because a filesystem is not just a command for creating a partition. It works on top of block devices, allocates blocks, and guarantees data integrity when the power goes out. If you don't yet understand what a block device or mount point is, every command will feel like dangerous magic.
Episode 0 is your roadmap: we'll make sure your basic skills are solid, set up an experiment lab, install the filesystem toolchain, and run your first verification. Once this episode is complete, you can follow the entire series comfortably and safely.
You must be comfortable with the Linux terminal. Navigating with cd, ls, grep, and man should already feel natural. More importantly, understand that storage in Linux is seen as block devices — /dev/sda, /dev/nvme0n1, or /dev/vda — not as drive letters like on Windows.
First, verify the hardware that's available:
lsblkThe lsblk output shows the hierarchy of disks and partitions. Pay attention to the SIZE, TYPE (disk or part), and MOUNTPOINT columns. An empty disk has no mount point — and that's exactly our experiment target.
You need to know two main partitioning tools: fdisk for simple MBR/GPT partition tables, and parted for automated scripts. For example, viewing a disk's partition table:
sudo fdisk -l /dev/sdaUnderstand the terms partition, partition table (MBR vs GPT), and filesystem. Remember: a partition is only a division of space, while a filesystem is the structure placed inside the partition to store files.
Mount is the process of attaching a filesystem to the directory tree. This concept is non-negotiable. You also need to understand /etc/fstab, the file that defines permanent mounts at boot:
cat /etc/fstabPay attention to its columns: device (can be a UUID), mount point, filesystem type, options, dump, and fsck order. The full details of fstab will be covered in episode 7, but the ability to read this file is required from now on.
Filesystem experiments involve mkfs, fsck, and zpool create — commands that can destroy data. Never try them on a disk that holds important data. Prepare one of two options:
The loopback option is very practical and sufficient for most experiments in this series:
truncate -s 2G /tmp/lab.img
sudo losetup -f /tmp/lab.img
sudo losetup -lThe losetup -l command shows the connected loop devices. Note the device name, for example /dev/loop0 — that will be your experiment disk for this entire series.
Each filesystem requires userspace tools. On Debian/Ubuntu, install them all at once:
sudo apt update
sudo apt install e2fsprogs xfsprogs btrfs-progs zfsutils-linuxe2fsprogs provides mkfs.ext4, tune2fs, and e2fsck. xfsprogs provides mkfs.xfs and xfs_repair. btrfs-progs provides the btrfs command. zfsutils-linux provides zpool and zfs for OpenZFS. On RHEL/Rocky use dnf install e2fsprogs xfsprogs btrfs-progs zfs.
Info
OpenZFS on Debian is installed from the DKMS module. If the installation fails, make sure the kernel headers are installed with sudo apt install linux-headers-$(uname -r).
Before moving on to episode 1, verify that all the tools are ready to use:
mkfs.ext4 -V
xfs_info -V
btrfs version
zfs versionEach command should print its version without errors. Relevant versions at the time this series was written: e2fsprogs 1.47.4, btrfs-progs v7.1, and OpenZFS 2.4.3. Newer versions are fine as long as the examples in this series run normally.
Finally, make sure the blkid command is available and works:
sudo blkidblkid displays the UUID and filesystem type of every partition. This UUID will be the stable reference in /etc/fstab, replacing device names that can change.
Here's a recap of the prerequisites you've prepared in episode 0:
lsblk, fdisk, mount, and man.blkid verified for reading UUIDs and filesystem types.If any of these aren't in place, stop and complete them before continuing. A strong foundation will make the next 22 episodes feel much lighter.
In episode 0 you've laid the foundation for the whole series: understanding block devices and partitions, mount and fstab, preparing an experiment lab with loopback, installing the toolchain for the four main filesystems, and verifying everything.
Key takeaways:
lsblk and partitioning before diving into mkfs.e2fsprogs, xfsprogs, btrfs-progs, and zfsutils-linux are the required toolchain.blkid is your gateway to the UUIDs used in fstab.In the next episode, episode 1, we'll cover the history, background, and why you need a Linux filesystem — from ext2 in 1993, the birth of journaling, to ZFS and btrfs as the modern generation. Make sure your lab is ready, because the Learn Linux Filesystem journey is just beginning!