16. Storage Management

16. Storage Management

Learning Objectives

  • LVM (Logical Volume Manager) configuration and management
  • Understanding and configuring RAID levels
  • Filesystem selection and optimization
  • Disk encryption with LUKS

Table of Contents

  1. Storage Fundamentals
  2. LVM
  3. RAID
  4. Filesystems
  5. Disk Encryption
  6. Monitoring and Maintenance
  7. Practice Exercises

1. Storage Fundamentals

1.1 Storage Layers

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Storage Layer Structure                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚  Application                                                β”‚
β”‚       β”‚                                                     β”‚
β”‚       β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚  β”‚           VFS (Virtual File System)     β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚       β”‚                                                     β”‚
β”‚       β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚  β”‚    Filesystem (ext4, XFS, Btrfs)        β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚       β”‚                                                     β”‚
β”‚       β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚  β”‚    Block Device (LVM, RAID, LUKS)       β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚       β”‚                                                     β”‚
β”‚       β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚  β”‚    Disk Driver                           β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚       β”‚                                                     β”‚
β”‚       β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚  β”‚    Physical Disk (HDD, SSD, NVMe)       β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1.2 Checking Disk Information

# Block device list
lsblk
lsblk -f  # Include filesystem

# Detailed disk information
fdisk -l
parted -l

# SMART information (disk health)
smartctl -a /dev/sda

# Disk UUIDs
blkid

# Disk usage
df -h
df -i  # inode usage

1.3 Partition Management

# fdisk (MBR)
fdisk /dev/sdb
# n - new partition
# d - delete partition
# p - print partition table
# w - write and exit

# parted (GPT recommended)
parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary ext4 0% 50%
(parted) mkpart primary ext4 50% 100%
(parted) print
(parted) quit

# gdisk (GPT)
gdisk /dev/sdb

2. LVM

2.1 LVM Concept

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       LVM Structure                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚  Logical Volume (LV)                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚  β”‚   lv1   β”‚ β”‚   lv2   β”‚ β”‚   lv3   β”‚  ← Create filesystem  β”‚
β”‚  β”‚  (root) β”‚ β”‚  (home) β”‚ β”‚  (data) β”‚                       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚           β”‚                                                 β”‚
β”‚           β–Ό                                                 β”‚
β”‚  Volume Group (VG)                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                       vg0                            β”‚   β”‚
β”‚  β”‚   ← Combine multiple PVs                             β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚           β”‚                                                 β”‚
β”‚           β–Ό                                                 β”‚
β”‚  Physical Volume (PV)                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚  β”‚  /dev/  β”‚ β”‚  /dev/  β”‚ β”‚  /dev/  β”‚  ← Physical disks     β”‚
β”‚  β”‚  sda1   β”‚ β”‚  sdb1   β”‚ β”‚  sdc1   β”‚                       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”‚                                                             β”‚
β”‚  Advantages:                                                β”‚
β”‚  β€’ Dynamic volume resizing                                  β”‚
β”‚  β€’ Combine multiple disks                                   β”‚
β”‚  β€’ Snapshot support                                         β”‚
β”‚  β€’ Online expansion                                         β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.2 Creating LVM

# 1. Create Physical Volume (PV)
pvcreate /dev/sdb1
pvcreate /dev/sdc1

# Check PV
pvs
pvdisplay /dev/sdb1

# 2. Create Volume Group (VG)
vgcreate vg_data /dev/sdb1 /dev/sdc1

# Check VG
vgs
vgdisplay vg_data

# 3. Create Logical Volume (LV)
lvcreate -L 10G -n lv_home vg_data
lvcreate -l 100%FREE -n lv_data vg_data  # Use all remaining space

# Check LV
lvs
lvdisplay /dev/vg_data/lv_home

# 4. Create filesystem and mount
mkfs.ext4 /dev/vg_data/lv_home
mkdir /mnt/home
mount /dev/vg_data/lv_home /mnt/home

# Add to /etc/fstab
echo '/dev/vg_data/lv_home /home ext4 defaults 0 2' >> /etc/fstab

2.3 Extending LVM

# Add new disk to VG
pvcreate /dev/sdd1
vgextend vg_data /dev/sdd1

# Extend LV
lvextend -L +5G /dev/vg_data/lv_home
# Or use all free space
lvextend -l +100%FREE /dev/vg_data/lv_home

# Extend filesystem
# ext4
resize2fs /dev/vg_data/lv_home

# XFS (grow only)
xfs_growfs /mnt/home

# Extend LV + filesystem together
lvextend -r -L +5G /dev/vg_data/lv_home

2.4 Shrinking LVM

# ⚠️ Warning: Backup data first!

# Shrink ext4 (unmount required)
umount /mnt/home
e2fsck -f /dev/vg_data/lv_home
resize2fs /dev/vg_data/lv_home 8G
lvreduce -L 8G /dev/vg_data/lv_home
mount /dev/vg_data/lv_home /mnt/home

# XFS cannot be shrunk!

2.5 LVM Snapshots

# Create snapshot
lvcreate -L 1G -s -n snap_home /dev/vg_data/lv_home

# Check snapshot
lvs
lvdisplay /dev/vg_data/snap_home

# Mount snapshot (verify before restore)
mount -o ro /dev/vg_data/snap_home /mnt/snapshot

# Restore from snapshot
lvconvert --merge /dev/vg_data/snap_home
# May require reboot

# Remove snapshot
lvremove /dev/vg_data/snap_home

3. RAID

3.1 RAID Levels

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      RAID Level Comparison                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚  RAID 0 (Striping)                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”                                 β”‚
β”‚  β”‚ A1  β”‚ A2  β”‚ A3  β”‚ A4  β”‚  Pros: Best performance         β”‚
β”‚  β”‚ B1  β”‚ B2  β”‚ B3  β”‚ B4  β”‚  Cons: No fault tolerance       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜  Capacity: 100%                β”‚
β”‚  Disk1 Disk2 Disk3 Disk4                                   β”‚
β”‚                                                             β”‚
β”‚  RAID 1 (Mirroring)                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”                                              β”‚
β”‚  β”‚ A1  β”‚ A1  β”‚  Pros: Perfect replication                  β”‚
β”‚  β”‚ B1  β”‚ B1  β”‚  Cons: 50% capacity                         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜  Capacity: 50%                              β”‚
β”‚  Disk1 Disk2                                                β”‚
β”‚                                                             β”‚
β”‚  RAID 5 (Striping + Parity)                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”                                        β”‚
β”‚  β”‚ A1  β”‚ A2  β”‚ Ap  β”‚  Pros: Performance + fault (1 disk)   β”‚
β”‚  β”‚ B1  β”‚ Bp  β”‚ B2  β”‚  Cons: Parity calculation on write    β”‚
β”‚  β”‚ Cp  β”‚ C1  β”‚ C2  β”‚  Capacity: (n-1)/n                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜  Minimum 3 disks                      β”‚
β”‚  Disk1 Disk2 Disk3                                          β”‚
β”‚                                                             β”‚
β”‚  RAID 6 (Double Parity)                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”                                 β”‚
β”‚  β”‚ A1  β”‚ A2  β”‚ Ap  β”‚ Aq  β”‚  Pros: 2 disk fault tolerance   β”‚
β”‚  β”‚ B1  β”‚ Bp  β”‚ Bq  β”‚ B2  β”‚  Cons: Slower writes            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜  Capacity: (n-2)/n              β”‚
β”‚                                                             β”‚
β”‚  RAID 10 (1+0, Striped Mirrors)                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”                               β”‚
β”‚  β”‚ A1  β”‚ A1  β”‚ β”‚ A2  β”‚ A2  β”‚  Pros: Performance + reliabilityβ”‚
β”‚  β”‚ B1  β”‚ B1  β”‚ β”‚ B2  β”‚ B2  β”‚  Cons: 50% capacity           β”‚
β”‚  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜  Minimum 4 disks             β”‚
β”‚  Mirror 1      Mirror 2                                     β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.2 Configuring RAID with mdadm

# Install mdadm
apt install mdadm

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

# Create RAID 5
mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdd1 /dev/sde1 /dev/sdf1

# Create RAID 10
mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1

# Check RAID status
cat /proc/mdstat
mdadm --detail /dev/md0

# Save configuration
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u

# Create filesystem
mkfs.ext4 /dev/md0
mount /dev/md0 /mnt/raid

3.3 RAID Management

# Simulate disk failure
mdadm --manage /dev/md0 --fail /dev/sdb1

# Remove failed disk
mdadm --manage /dev/md0 --remove /dev/sdb1

# Add new disk
mdadm --manage /dev/md0 --add /dev/sdk1

# Add spare disk
mdadm --manage /dev/md0 --add-spare /dev/sdl1

# Check rebuild status
cat /proc/mdstat
watch -n 1 cat /proc/mdstat

# Stop/start RAID
mdadm --stop /dev/md0
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1

3.4 RAID Expansion

# Add disk to RAID 5/6
mdadm --grow /dev/md1 --raid-devices=4 --add /dev/sdm1

# Expand size and filesystem
mdadm --grow /dev/md1 --size=max
resize2fs /dev/md1

4. Filesystems

4.1 Filesystem Comparison

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Filesystem Comparison                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              β”‚     ext4     β”‚     XFS      β”‚     Btrfs        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Max Volume   β”‚    1 EB      β”‚    8 EB      β”‚    16 EB         β”‚
β”‚ Max File     β”‚   16 TB      β”‚    8 EB      β”‚    16 EB         β”‚
β”‚ Journaling   β”‚     Yes      β”‚     Yes      β”‚     CoW          β”‚
β”‚ Online Grow  β”‚     Yes      β”‚     Yes      β”‚     Yes          β”‚
β”‚ Online Shrinkβ”‚     No       β”‚     No       β”‚     Yes          β”‚
β”‚ Snapshots    β”‚   (LVM)      β”‚   (LVM)      β”‚     Yes (native) β”‚
β”‚ Compression  β”‚     No       β”‚     No       β”‚     Yes          β”‚
β”‚ Checksums    β”‚  Metadata    β”‚     No       β”‚     Yes (all)    β”‚
β”‚ Best For     β”‚  General/Bootβ”‚  Large/DB    β”‚  NAS/Snapshots   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4.2 ext4 Management

# Create
mkfs.ext4 /dev/sdb1
mkfs.ext4 -L "DATA" /dev/sdb1  # With label

# Create with options
mkfs.ext4 -b 4096 -i 16384 -O ^has_journal /dev/sdb1

# Check information
tune2fs -l /dev/sdb1

# Change settings
tune2fs -L "NEW_LABEL" /dev/sdb1  # Label
tune2fs -c 30 /dev/sdb1           # fsck after 30 mounts
tune2fs -i 1m /dev/sdb1           # fsck after 1 month
tune2fs -O ^has_journal /dev/sdb1 # Disable journal

# Filesystem check
e2fsck -f /dev/sdb1
e2fsck -p /dev/sdb1  # Auto-fix

# Defragment (online)
e4defrag /dev/sdb1

4.3 XFS Management

# Create
mkfs.xfs /dev/sdb1
mkfs.xfs -L "DATA" -f /dev/sdb1

# Check information
xfs_info /dev/sdb1
xfs_info /mnt/data  # If mounted

# Change label
xfs_admin -L "NEW_LABEL" /dev/sdb1

# Grow filesystem (online)
xfs_growfs /mnt/data

# Filesystem check (unmount required)
xfs_repair /dev/sdb1
xfs_repair -n /dev/sdb1  # Check only

# Defragment (online)
xfs_fsr /mnt/data

4.4 Btrfs Management

# Create
mkfs.btrfs /dev/sdb1
mkfs.btrfs -L "DATA" -m raid1 -d raid1 /dev/sdb1 /dev/sdc1

# Check information
btrfs filesystem show
btrfs filesystem df /mnt/btrfs

# Create subvolume
btrfs subvolume create /mnt/btrfs/subvol1

# Snapshot
btrfs subvolume snapshot /mnt/btrfs/subvol1 /mnt/btrfs/snap1
btrfs subvolume snapshot -r /mnt/btrfs/subvol1 /mnt/btrfs/snap_ro  # Read-only

# List subvolumes
btrfs subvolume list /mnt/btrfs

# Delete snapshot
btrfs subvolume delete /mnt/btrfs/snap1

# Enable compression
mount -o compress=zstd /dev/sdb1 /mnt/btrfs

# Add disk
btrfs device add /dev/sdd1 /mnt/btrfs
btrfs balance start /mnt/btrfs

# Scrub (data integrity check)
btrfs scrub start /mnt/btrfs
btrfs scrub status /mnt/btrfs

5. Disk Encryption

5.1 LUKS Encryption

# Create LUKS volume
cryptsetup luksFormat /dev/sdb1
# Enter passphrase

# Open LUKS
cryptsetup open /dev/sdb1 encrypted_disk
# Creates /dev/mapper/encrypted_disk

# Create filesystem
mkfs.ext4 /dev/mapper/encrypted_disk

# Mount
mount /dev/mapper/encrypted_disk /mnt/encrypted

# Unmount and close
umount /mnt/encrypted
cryptsetup close encrypted_disk

5.2 LUKS Management

# LUKS information
cryptsetup luksDump /dev/sdb1

# Add key (max 8)
cryptsetup luksAddKey /dev/sdb1

# Remove key
cryptsetup luksRemoveKey /dev/sdb1

# Use key file
dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
chmod 400 /root/keyfile
cryptsetup luksAddKey /dev/sdb1 /root/keyfile

# Open with key file
cryptsetup open /dev/sdb1 encrypted_disk --key-file /root/keyfile

5.3 Auto-mount on Boot

# /etc/crypttab
# <name> <device> <key file> <options>
encrypted_disk /dev/sdb1 /root/keyfile luks

# /etc/fstab
/dev/mapper/encrypted_disk /mnt/encrypted ext4 defaults 0 2

5.4 LUKS + LVM

# Create encrypted PV
cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 crypt_pv

# Configure LVM
pvcreate /dev/mapper/crypt_pv
vgcreate vg_encrypted /dev/mapper/crypt_pv
lvcreate -l 100%FREE -n lv_data vg_encrypted

# Filesystem
mkfs.ext4 /dev/vg_encrypted/lv_data

6. Monitoring and Maintenance

6.1 Disk Status Monitoring

# SMART monitoring
smartctl -H /dev/sda              # Health status
smartctl -a /dev/sda              # Full information
smartctl -t short /dev/sda        # Short test
smartctl -l selftest /dev/sda     # Test results

# smartd daemon configuration
# /etc/smartd.conf
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03)
#                             Daily 2am short test | Saturday 3am long test

# I/O statistics
iostat -x 1

# Disk queue
cat /sys/block/sda/queue/nr_requests

6.2 Filesystem Maintenance

# Regular check (ext4)
tune2fs -c 30 /dev/sda1     # fsck after 30 mounts
tune2fs -i 1m /dev/sda1     # fsck every month

# Reserved blocks (ext4)
tune2fs -m 1 /dev/sda1      # Reduce to 1% (default 5%)

# TRIM (SSD)
fstrim -v /                  # Manual TRIM
systemctl enable fstrim.timer  # Periodic TRIM

# Disk usage analysis
du -sh /*
ncdu /

6.3 Backup Strategy

# Full disk backup with dd
dd if=/dev/sda of=/backup/sda.img bs=64M status=progress

# Compressed backup
dd if=/dev/sda bs=64M | gzip > /backup/sda.img.gz

# Clone partition
dd if=/dev/sda1 of=/dev/sdb1 bs=64M status=progress

# File backup with rsync
rsync -avz --delete /data/ /backup/data/

# Consistent backup with LVM snapshot
lvcreate -L 1G -s -n snap_backup /dev/vg/lv_data
mount -o ro /dev/vg/snap_backup /mnt/snap
rsync -avz /mnt/snap/ /backup/
umount /mnt/snap
lvremove -f /dev/vg/snap_backup

7. Practice Exercises

Exercise 1: LVM Configuration

# Requirements:
# 1. Create VG from 2 disks
# 2. Create 3 LVs (root 20G, home 50G, data remaining)
# 3. Format as ext4, xfs, ext4 respectively
# 4. Configure permanent mount in fstab

# Write commands:

Exercise 2: RAID 5 Configuration

# Requirements:
# 1. Configure RAID 5 with 4 disks
# 2. Set 1 as spare
# 3. Simulate failure and recovery

# Write commands:

Exercise 3: Encrypted LVM

# Requirements:
# 1. Encrypt disk with LUKS
# 2. Configure LVM on encrypted volume
# 3. Auto-mount on boot (using key file)

# Write configuration files and commands:

Exercise 4: Btrfs Snapshot Management

# Requirements:
# 1. Create Btrfs volume
# 2. Design subvolume structure
# 3. Establish snapshot policy (daily, weekly)
# 4. Test restore from snapshot

# Write script:

Next Steps

References


← Previous: Container Internals | Table of Contents

to navigate between lessons