Storage management is one of the most critical responsibilities of a Linux system administrator. From partitioning new disks and creating filesystems to managing LVM volumes and configuring RAID arrays, this guide covers every aspect of Linux storage management with practical, production-ready examples.
📥 Free Cheat Sheet
Download our Linux Disk & Storage Cheat Sheet PDF — all disk commands, LVM operations, and RAID management on one page.
Viewing Disk Information
# List all block devices
lsblk
lsblk -f # Show filesystem info
# Show disk space usage
df -h
df -hT # Include filesystem type
# Show directory sizes
du -sh /var/log/
du -sh /* 2>/dev/null | sort -rh | head -10
# Detailed disk info
sudo fdisk -l
sudo parted -l
# Show disk hardware info
sudo hdparm -I /dev/sda
lshw -class disk
Disk Partitioning
fdisk — MBR Partitioning
# Interactive partitioning
sudo fdisk /dev/sdb
# fdisk commands:
# n = new partition
# d = delete partition
# p = print partition table
# t = change partition type
# w = write changes and exit
# q = quit without saving
gdisk — GPT Partitioning
# For disks > 2TB or UEFI systems
sudo gdisk /dev/sdb
# Non-interactive partitioning with sgdisk
sudo sgdisk -n 1:0:+500M -t 1:ef00 /dev/sdb # EFI partition
sudo sgdisk -n 2:0:0 -t 2:8300 /dev/sdb # Linux partition
parted — Modern Partitioning
# Create GPT label and partitions
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 0% 100%
# Resize partition
sudo parted /dev/sdb resizepart 1 50GB
Filesystem Creation and Management
# Create ext4 filesystem
sudo mkfs.ext4 /dev/sdb1
# Create XFS filesystem
sudo mkfs.xfs /dev/sdb1
# Create Btrfs filesystem
sudo mkfs.btrfs /dev/sdb1
# Check and repair filesystem
sudo fsck /dev/sdb1 # Generic
sudo e2fsck -f /dev/sdb1 # ext4
sudo xfs_repair /dev/sdb1 # XFS
# View filesystem info
sudo tune2fs -l /dev/sdb1 # ext4
sudo xfs_info /dev/sdb1 # XFS
# Resize filesystem
sudo resize2fs /dev/sdb1 # ext4 (grow)
sudo xfs_growfs /mount/point # XFS (grow only)
Mounting and fstab
# Mount a partition
sudo mount /dev/sdb1 /mnt/data
# Mount with specific options
sudo mount -o noatime,nodiratime /dev/sdb1 /mnt/data
# Mount read-only
sudo mount -o ro /dev/sdb1 /mnt/data
# Mount by UUID (preferred)
sudo mount UUID=abc-123 /mnt/data
# Unmount
sudo umount /mnt/data
# Force unmount if busy
sudo umount -l /mnt/data # Lazy unmount
sudo fuser -km /mnt/data # Kill processes using mount point
# Find UUID of a partition
blkid /dev/sdb1
Persistent Mounting with /etc/fstab
# /etc/fstab format:
#
# Example entries:
UUID=abc-123-def /mnt/data ext4 defaults,noatime 0 2
UUID=xyz-789-uvw /mnt/backup xfs defaults 0 2
/dev/sdb1 /mnt/storage ext4 rw,nosuid,nodev 0 2
# Test fstab without rebooting
sudo mount -a
# If fstab has errors and system won't boot:
# Boot to recovery, then:
mount -o remount,rw /
# Fix /etc/fstab, then reboot
Logical Volume Management (LVM)
LVM provides flexible disk management with the ability to resize volumes, create snapshots, and span multiple physical disks:
LVM Architecture
- Physical Volumes (PV) — raw disks or partitions
- Volume Groups (VG) — pool of physical volumes
- Logical Volumes (LV) — virtual partitions carved from VGs
# Step 1: Create Physical Volumes
sudo pvcreate /dev/sdb /dev/sdc
sudo pvs # List PVs
# Step 2: Create Volume Group
sudo vgcreate data-vg /dev/sdb /dev/sdc
sudo vgs # List VGs
# Step 3: Create Logical Volumes
sudo lvcreate -L 50G -n app-data data-vg
sudo lvcreate -L 20G -n db-data data-vg
sudo lvcreate -l 100%FREE -n logs data-vg
sudo lvs # List LVs
# Step 4: Create filesystem and mount
sudo mkfs.ext4 /dev/data-vg/app-data
sudo mount /dev/data-vg/app-data /mnt/app
Resizing LVM Volumes
# Extend logical volume + filesystem
sudo lvextend -L +10G /dev/data-vg/app-data
sudo resize2fs /dev/data-vg/app-data # ext4
# Or combine both:
sudo lvextend -L +10G -r /dev/data-vg/app-data
# Add new disk to volume group
sudo pvcreate /dev/sdd
sudo vgextend data-vg /dev/sdd
# Reduce (ext4 only — BACKUP FIRST!)
sudo umount /mnt/app
sudo e2fsck -f /dev/data-vg/app-data
sudo resize2fs /dev/data-vg/app-data 30G
sudo lvreduce -L 30G /dev/data-vg/app-data
LVM Snapshots
# Create snapshot
sudo lvcreate -L 5G -s -n app-data-snap /dev/data-vg/app-data
# Mount snapshot (read-only)
sudo mount -o ro /dev/data-vg/app-data-snap /mnt/snapshot
# Restore from snapshot
sudo lvconvert --merge /dev/data-vg/app-data-snap
RAID Configuration with mdadm
# Create RAID 1 (mirror)
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# Create RAID 5 (striping with parity)
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
# Check RAID status
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# Save RAID configuration
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# Replace failed disk
sudo mdadm --manage /dev/md0 --remove /dev/sdc
sudo mdadm --manage /dev/md0 --add /dev/sde
Disk Monitoring
# Monitor disk I/O
iostat -xz 1
iotop
# Check disk health with SMART
sudo smartctl -a /dev/sda
sudo smartctl -H /dev/sda # Quick health check
sudo smartctl -t short /dev/sda # Run test
# Monitor in real-time
watch -n 1 'df -h'
dstat -cdngy
Disk Quotas
# Enable quotas (add usrquota,grpquota to fstab options)
sudo mount -o remount,usrquota,grpquota /mnt/data
# Initialize quota database
sudo quotacheck -ugm /mnt/data
sudo quotaon /mnt/data
# Set user quota (soft 5GB, hard 6GB)
sudo edquota -u alice
# Or non-interactive:
sudo setquota -u alice 5G 6G 0 0 /mnt/data
# View quota usage
sudo repquota -a
quota -u alice
📚 Master Linux Storage
Deep dive into storage management:
- Linux Disk Management & RAID Configuration — Complete storage administration guide
- Linux Backup Strategies — Protect your data professionally
- Linux File Server with Samba — Build shared storage solutions