Zero‑to‑Hero Linux Installation: Mastering Partition Strategies
This guide walks you through why proper Linux partitioning matters, presents production‑grade and scenario‑specific layouts, covers hardware checks, BIOS/UEFI settings, step‑by‑step partitioning with fdisk/GPT and LVM, filesystem choices, security hardening, automation scripts, monitoring, and best‑practice tips for a flawless system install.
Why Partition Strategy Matters
Incorrect partitioning is likened to a faulty house wiring plan; fixing it later is costly. A well‑designed layout prevents log overflows, data loss, and performance bottlenecks.
Recommended Partition Layouts
Production Server
# Standard server layout (500 GB example)
/boot - 1GB (boot partition)
/ - 50GB (root)
/home - 100GB (user data)
/var - 150GB (logs & cache)
/tmp - 20GB (temporary files)
/opt - 100GB (third‑party software)
swap - 16GB (swap, 1‑2× RAM)
/data - remaining (application data)Desktop Users
/ - 100GB (system + software)
/home - remaining (personal files)
swap - 8GB (if RAM < 16GB)Development Environments
/ - 80GB (system core)
/home - 200GB (projects)
/var - 50GB (build cache)
/opt - 100GB (tools)
swap - 16GB
/workspace - remaining (code)Cloud Servers
/ - 40GB (minimal system)
/var - 60GB (logs & monitoring)
/data - remaining (application data)
swap - file‑based (flexible)Pre‑Installation Hardware Checks
BIOS/UEFI Settings
# Detect boot mode
[ -d /sys/firmware/efi ] && echo "UEFI mode" || echo "Legacy mode"
# Recommended BIOS options
Secure Boot: off
SATA Mode: AHCI
Virtualization: enabled
UEFI Boot: enabledDisk Health
# SMART health check
smartctl -a /dev/sda
# Bad block scan
badblocks -v /dev/sda
# Performance test
hdparm -tT /dev/sda
# Key SMART attributes
Reallocated_Sector_Ct > 0 → replace disk
Current_Pending_Sector > 0 → replace immediately
UDMA_CRC_Error_Count > 1000 → check cablesPartitioning Walkthrough
Method 1: Manual fdisk (recommended)
# View disks
lsblk
fdisk -l
# Start fdisk on /dev/sda
fdisk /dev/sda
# Create GPT table
g
# EFI partition (512 MiB)
n
1
+512M
t
1
# EFI System
# /boot partition (1 GiB)
n
2
+1G
t
2
20 # Linux filesystem
# LVM partition (rest of disk)
n
3
t
3
30 # Linux LVM
w # write changesMethod 2: LVM‑based dynamic layout (enterprise)
# Physical volume
pvcreate /dev/sda3
# Volume group
vgcreate vg_system /dev/sda3
# Logical volumes
lvcreate -L 50G -n lv_root vg_system # / (root)
lvcreate -L 150G -n lv_var vg_system # /var
lvcreate -L 100G -n lv_home vg_system # /home
lvcreate -L 20G -n lv_tmp vg_system # /tmp
lvcreate -L 16G -n lv_swap vg_system # swap
# Resize later
lvextend -L +50G /dev/vg_system/lv_var
resize2fs /dev/vg_system/lv_varFilesystem Selection
Common choices and trade‑offs:
ext4 – stable, good compatibility; moderate performance.
xfs – high‑performance, large‑file friendly; cannot shrink.
btrfs – snapshots, compression, checksums; still maturing.
zfs – enterprise storage, data integrity, compression; high RAM usage.
Creating Filesystems
# ext4 (general purpose)
mkfs.ext4 -L "root" /dev/vg_system/lv_root
mkfs.ext4 -L "home" /dev/vg_system/lv_home
# xfs (high‑IO)
mkfs.xfs -L "var" /dev/vg_system/lv_var
mkfs.xfs -L "data" /dev/vg_system/lv_data
# Swap
mkswap /dev/vg_system/lv_swap
# Mount with optimized options
mount -o defaults,noatime,discard /dev/vg_system/lv_root /mntCore Installation Tips
Network Source Configuration (recommended)
# CentOS/RHEL – Tsinghua mirror
sed -i 's|^#baseurl=.*|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' /etc/yum.repos.d/CentOS-Base.repo
# Ubuntu – Alibaba mirror
cat > /etc/apt/sources.list <<'EOF'
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted
deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb https://mirrors.aliyun.com/ubuntu/ focal universe
deb https://mirrors.aliyun.com/ubuntu/ focal-updates universe
EOFAutomation Script (auto_install.sh)
#!/bin/bash
DISK="/dev/sda"
VG_NAME="vg_system"
# Partition with GPT and EFI
parted -s $DISK mklabel gpt
parted -s $DISK mkpart ESP fat32 1MiB 513MiB
parted -s $DISK set 1 esp on
parted -s $DISK mkpart primary 513MiB 1537MiB
parted -s $DISK mkpart primary 1537MiB 100%
parted -s $DISK set 3 lvm on
# LVM setup
pvcreate ${DISK}3
vgcreate $VG_NAME ${DISK}3
lvcreate -L 50G -n lv_root $VG_NAME
lvcreate -L 16G -n lv_swap $VG_NAME
lvcreate -l 100%FREE -n lv_home $VG_NAME
# Filesystem creation
mkfs.fat -F32 ${DISK}1
mkfs.ext4 ${DISK}2
mkfs.ext4 /dev/$VG_NAME/lv_root
mkfs.ext4 /dev/$VG_NAME/lv_home
mkswap /dev/$VG_NAME/lv_swap
echo "Partitioning complete, ready to install the system..."Performance Optimizations
fstab Tweaks
# Example /etc/fstab entries
UUID=xxx / ext4 defaults,noatime,discard 0 1
UUID=xxx /boot ext4 defaults,noatime 0 2
UUID=xxx /home ext4 defaults,noatime,discard 0 2
UUID=xxx /var xfs defaults,noatime,discard 0 2
UUID=xxx /tmp ext4 defaults,noatime,discard,nodev,nosuid,noexec 0 2
UUID=xxx none swap defaults 0 0
# Key options:
# noatime – skip access‑time updates
# discard – enable SSD TRIM
# nodev,nosuid,noexec – harden /tmpKernel Parameter Tuning
# /etc/sysctl.conf examples
vm.swappiness = 10 # reduce swap usage
vm.dirty_ratio = 15 # limit dirty pages
vm.dirty_background_ratio = 5
fs.file-max = 2097152 # max file handles
net.core.rmem_max = 16777216 # increase receive buffer
net.core.wmem_max = 16777216Security Hardening
Partition‑Level Protections
# Secure /tmp
mount -o remount,nodev,nosuid,noexec /tmp
# Link /var/tmp to /tmp
rm -rf /var/tmp
ln -s /tmp /var/tmp
# Blacklist unnecessary filesystems
echo "install cramfs /bin/true" >> /etc/modprobe.d/blacklist.conf
echo "install freevxfs /bin/true" >> /etc/modprobe.d/blacklist.conf
echo "install jffs2 /bin/true" >> /etc/modprobe.d/blacklist.confFull‑Disk Encryption (LUKS)
# Encrypt /dev/sda3
cryptsetup luksFormat /dev/sda3
cryptsetup luksOpen /dev/sda3 encrypted_lvm
pvcreate /dev/mapper/encrypted_lvm
# Continue with LVM as usual
# Recommendation: encrypt data partitions, keep system partition unencryptedCommon Troubleshooting
Boot Failures
# Regenerate GRUB config
grub2-mkconfig -o /boot/grub2/grub.cfg
# Reinstall GRUB
grub2-install /dev/sdaPartition Recognition Issues
# Refresh partition table
partprobe /dev/sda
# Verify UUIDs
blkid /dev/sda1LVM Activation Problems
vgchange -ay # activate all volume groups
vgscan
pvscanRescue Mode
# Boot into rescue, activate LVM, mount root
vgchange -ay
mount /dev/vg_system/lv_root /mnt/sysimage
chroot /mnt/sysimage
# Fix issues, then rebootMonitoring & Maintenance
Disk Usage Alert Script
#!/bin/bash
THRESHOLD=80
df -h | awk 'NR>1 {usage=$5; gsub(/%/,"",usage); if (usage>THRESHOLD) {print "Warning: " $6 " usage at " $5; print "Free: " $4}}' | mail -s "Disk Space Warning" [email protected]LVM Expansion
# Add new disk
pvcreate /dev/sdb
vgextend vg_system /dev/sdb
# Extend logical volume
lvextend -L +100G /dev/vg_system/lv_var
# Resize filesystem
resize2fs /dev/vg_system/lv_var # ext4
xfs_growfs /var # xfsAdvanced Tips
Kickstart Automation (CentOS/RHEL)
# Sample ks.cfg
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
clearpart --all --initlabel --drives=sda
part /boot --fstype="xfs" --ondisk=sda --size=1024
part pv.01 --fstype="lvmpv" --ondisk=sda --grow
volgroup vg_system --pesize=4096 pv.01
logvol / --fstype="xfs" --size=51200 --name=lv_root --vgname=vg_system
logvol /var --fstype="xfs" --size=153600 --name=lv_var --vgname=vg_system
logvol swap --fstype="swap" --size=16384 --name=lv_swap --vgname=vg_systemContainer‑Node Partitioning
/ - 50GB (system core)
/var/lib/docker - 200GB (container storage)
/var/lib/kubelet - 100GB (pod storage)
/data - remaining (persistent data)
# Use XFS with ftype=1 for Docker compatibility
mkfs.xfs -n ftype=1 /dev/vg_system/lv_dockerPost‑Installation Checklist
# System health verification script
#!/bin/bash
echo "=== Installation Verification Report ==="
echo "Installation time: $(date)"
echo "1. Partition info:"
df -h
echo "2. LVM status:"
vgs
lvs
echo "3. Mount points:"
mount | column -t
echo "4. System load:"
uptime
free -h
echo "5. Disk I/O performance:"
dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
rm -f /tmp/testfile
echo "6. Network connectivity:"
ping -c 3 8.8.8.8
echo "=== Verification Complete ==="Golden Rules
Plan first : sketch a partition diagram before touching disks.
Reserve space : keep at least 20 % free in LVM for future growth.
Separate critical directories : /var, /tmp, /home should be on independent partitions.
Backup data : always back up important files before repartitioning.
Test before production : validate the chosen scheme on a test machine.
Final Advice from an Ops Veteran
Choose the right scheme : no single layout fits all; select based on workload.
Embrace automation : manual partitioning is error‑prone; use scripts or kickstart.
Continuous monitoring : partition health degrades over time; set up alerts.
Keep learning : storage technologies evolve; stay updated with new filesystems and cloud‑native storage solutions.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Raymond Ops
Linux ops automation, cloud-native, Kubernetes, SRE, DevOps, Python, Golang and related tech discussions.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
