Skip to content

Linux Disk and File Systems Management Guide

Disk and filesystem management is crucial for Linux system administration. This guide covers partitioning, formatting, mounting, and managing storage devices.


Overview: Disk Management Tools

Tool Purpose Example
fdisk Partition disks (MBR/GPT) fdisk /dev/sda
parted Advanced partitioning parted /dev/sda
mkfs Create filesystems mkfs.ext4 /dev/sda1
mount Mount filesystems mount /dev/sda1 /mnt
umount Unmount filesystems umount /mnt
df Disk space usage df -h
du Directory space usage du -sh /var
lsblk List block devices lsblk
blkid Block device attributes blkid /dev/sda1

Viewing Disk Information

List Block Devices

# List all block devices
lsblk

# Show filesystem info
lsblk -f

# Show size in bytes
lsblk -b

# Show specific device
lsblk /dev/sda

# Tree view with detailed info
lsblk -a

Device Information

# Show UUID and filesystem
sudo blkid

# Specific device
sudo blkid /dev/sda1

# Show disk details
sudo fdisk -l

# Specific disk
sudo fdisk -l /dev/sda

# Detailed SMART info
sudo smartctl -a /dev/sda  # Requires smartmontools

Disk Partitioning

fdisk - MBR/GPT Partitioning

# Start fdisk
sudo fdisk /dev/sda

# Interactive commands:
# m - Show help
# p - Print partition table
# n - Create new partition
# d - Delete partition
# t - Change partition type
# w - Write changes and exit
# q - Quit without saving

Creating Partitions with fdisk

sudo fdisk /dev/sdb

# Example session:
Welcome to fdisk (util-linux 2.36.1).
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-..., default 2048): [Enter]
Last sector, +sectors or +size{K,M,G,T,P} ...: +10G

Command (m for help): w
The partition table has been altered.

parted - Advanced Partitioning

# Interactive mode
sudo parted /dev/sda

# Create GPT partition table
sudo parted /dev/sda mklabel gpt

# Create partition
sudo parted /dev/sda mkpart primary ext4 0% 100%

# Delete partition
sudo parted /dev/sda rm 1

# Print partition table
sudo parted /dev/sda print

# Resize partition
sudo parted /dev/sda resizepart 1 50GB

# Set boot flag
sudo parted /dev/sda set 1 boot on

Creating Filesystems

mkfs - Make Filesystem

# ext4 filesystem
sudo mkfs.ext4 /dev/sdb1

# ext4 with label
sudo mkfs.ext4 -L "MyData" /dev/sdb1

# XFS filesystem
sudo mkfs.xfs /dev/sdb1

# Btrfs filesystem
sudo mkfs.btrfs /dev/sdb1

# FAT32 filesystem
sudo mkfs.vfat -F 32 /dev/sdb1

# NTFS filesystem
sudo mkfs.ntfs /dev/sdb1

# Swap partition
sudo mkswap /dev/sdb2

Filesystem Options

# ext4 with custom options
sudo mkfs.ext4 -b 4096 -L DataDisk /dev/sdb1

# XFS with specific sector size
sudo mkfs.xfs -f -s size=4096 /dev/sdb1

# Create with reserved blocks
sudo mkfs.ext4 -m 1 /dev/sdb1  # 1% reserved for root

Mounting Filesystems

Basic Mounting

# Mount filesystem
sudo mount /dev/sdb1 /mnt/data

# Mount with specific filesystem type
sudo mount -t ext4 /dev/sdb1 /mnt/data

# Mount read-only
sudo mount -o ro /dev/sdb1 /mnt/data

# Remount with different options
sudo mount -o remount,rw /mnt/data

# Unmount filesystem
sudo umount /mnt/data

# Force unmount
sudo umount -f /mnt/data

# Lazy unmount
sudo umount -l /mnt/data

Mount Options

# Common options
sudo mount -o rw,nosuid,nodev /dev/sdb1 /mnt/data

# Options:
# rw - Read-write
# ro - Read-only
# noexec - Prevent execution
# nosuid - Ignore SUID bits
# nodev - Ignore device files
# defaults - rw,suid,dev,exec,auto,nouser,async

Permanent Mounts - /etc/fstab

# Edit fstab
sudo nano /etc/fstab

# Format: device mountpoint filesystem options dump pass
/dev/sdb1  /mnt/data  ext4  defaults  0  2

# Using UUID (recommended)
UUID=xxxx-xxxx  /mnt/data  ext4  defaults  0  2

# Test fstab without rebooting
sudo mount -a

# Find UUID
sudo blkid /dev/sdb1

Auto-mounting USB Drives

# Mount using UUID
UUID=1234-5678  /media/usb  vfat  defaults,nofail,x-systemd.device-timeout=1  0  0

# Create mount point
sudo mkdir -p /media/usb

# Test mount
sudo mount /media/usb

Disk Space Management

df - Disk Free Space

# Show disk usage
df -h

# Show inodes
df -i

# Specific filesystem type
df -t ext4

# Exclude type
df -x tmpfs

# Show all filesystems
df -a

# Show total
df -h --total

du - Disk Usage

# Directory size
du -sh /var/log

# Top-level directories
du -h --max-depth=1 /var

# All subdirectories
du -ah /home/user

# Sort by size
du -h /var | sort -rh | head -10

# Exclude patterns
du -h --exclude="*.log" /var

# Summary with total
du -ch /var/log | tail -1

# Human-readable with apparent size
du -sh * | sort -rh

Finding Large Files and Directories

# Top 10 largest directories
du -h / | sort -rh | head -10

# Find files larger than 100MB
sudo find / -type f -size +100M -exec ls -lh {} \; | awk '{print $9 ": " $5}'

# Largest files in current directory
du -a | sort -n -r | head -n 10

# Using ncdu (interactive)
ncdu /

# Disk usage by file type
find /var -name "*.log" -exec du -ch {} + | tail -1

LVM - Logical Volume Management

LVM Concepts

  • Physical Volume (PV) - Physical disk or partition
  • Volume Group (VG) - Pool of PVs
  • Logical Volume (LV) - Virtual partition from VG

Creating LVM Structure

# Create physical volume
sudo pvcreate /dev/sdb1

# Create volume group
sudo vgcreate myvg /dev/sdb1

# Create logical volume
sudo lvcreate -L 10G -n mylv myvg

# Format logical volume
sudo mkfs.ext4 /dev/myvg/mylv

# Mount logical volume
sudo mount /dev/myvg/mylv /mnt/data

Managing LVM

# Display information
sudo pvdisplay
sudo vgdisplay
sudo lvdisplay

# Extend volume group
sudo vgextend myvg /dev/sdc1

# Extend logical volume
sudo lvextend -L +5G /dev/myvg/mylv
sudo resize2fs /dev/myvg/mylv  # Resize filesystem

# Reduce logical volume (careful!)
sudo umount /dev/myvg/mylv
sudo e2fsck -f /dev/myvg/mylv
sudo resize2fs /dev/myvg/mylv 5G
sudo lvreduce -L 5G /dev/myvg/mylv

Swap Management

Creating Swap

# Create swap partition
sudo mkswap /dev/sdb2

# Enable swap
sudo swapon /dev/sdb2

# Create swap file
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Make permanent in /etc/fstab
/swapfile  none  swap  sw  0  0

Managing Swap

# Show swap usage
swapon --show
free -h

# Disable swap
sudo swapoff /dev/sdb2
sudo swapoff /swapfile

# Set swap priority
sudo swapon --priority 10 /swapfile

# Swappiness (how aggressively to use swap)
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10  # Lower = less swap usage

Filesystem Maintenance

Checking Filesystems

# Check ext4 filesystem (unmounted!)
sudo umount /dev/sdb1
sudo fsck /dev/sdb1

# Force check
sudo fsck -f /dev/sdb1

# Check and repair automatically
sudo fsck -y /dev/sdb1

# Check without fixing
sudo fsck -n /dev/sdb1

# XFS check
sudo umount /dev/sdb1
sudo xfs_repair /dev/sdb1

Tuning Filesystems

# ext4 tuning
sudo tune2fs -l /dev/sdb1  # Show parameters

# Set reserved blocks to 1%
sudo tune2fs -m 1 /dev/sdb1

# Set label
sudo tune2fs -L "MyLabel" /dev/sdb1

# Set max mount count before check
sudo tune2fs -c 30 /dev/sdb1

# Disable journaling (not recommended)
sudo tune2fs -O ^has_journal /dev/sdb1

RAID Management

Software RAID with mdadm

# Create RAID 1 (mirror)
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# Create RAID 5
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

# Check RAID status
sudo mdadm --detail /dev/md0

# Add spare drive
sudo mdadm --add /dev/md0 /dev/sde1

# Remove failed drive
sudo mdadm --fail /dev/md0 /dev/sdc1
sudo mdadm --remove /dev/md0 /dev/sdc1

# Save RAID configuration
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

Disk Performance Monitoring

I/O Statistics

# Install sysstat
sudo apt install sysstat

# Monitor disk I/O
iostat -x 2

# Per-device statistics
iostat -dx sda 2

# I/O per process
sudo iotop

Quick Reference

# View disks
lsblk                     # List block devices
sudo fdisk -l             # List partitions
sudo blkid                # Show UUIDs

# Partition
sudo fdisk /dev/sda       # Partition disk
sudo parted /dev/sda      # Advanced partitioning

# Format
sudo mkfs.ext4 /dev/sda1  # Create ext4
sudo mkswap /dev/sda2     # Create swap

# Mount
sudo mount /dev/sda1 /mnt # Mount filesystem
sudo umount /mnt          # Unmount

# Space usage
df -h                     # Disk free space
du -sh /path              # Directory size

# LVM
sudo pvcreate /dev/sdb1   # Create PV
sudo vgcreate vg /dev/sdb1 # Create VG
sudo lvcreate -L 10G -n lv vg # Create LV

# Maintenance
sudo fsck /dev/sda1       # Check filesystem
sudo e2fsck -f /dev/sda1  # Force check ext4