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