| 类型 | 接口 | 设备名 | 特点 |
|---|---|---|---|
| HDD | SATA/SAS | /dev/sda | 大容量、便宜、慢 |
| SATA SSD | SATA | /dev/sda | 中等速度、中价 |
| NVMe SSD | PCIe | /dev/nvme0n1 | 极快、贵 |
| 虚拟磁盘 | Virtio/SCSI | /dev/vda或/dev/sda | 云服务器常见 |
# SATA/SAS磁盘
/dev/sda # 第一块SCSI/SATA磁盘
/dev/sda1 # 第一块磁盘的第一个分区
/dev/sdb # 第二块磁盘
# NVMe磁盘
/dev/nvme0n1 # 第一块NVMe磁盘(控制器0,命名空间1)
/dev/nvme0n1p1 # 第一块NVMe的第一个分区
# 虚拟化磁盘
/dev/vda # Virtio磁盘(KVM虚拟机)
/dev/xvda # Xen虚拟磁盘
| 特性 | MBR (MS-DOS) | GPT (GUID) |
|---|---|---|
| 最大磁盘 | 2TB | 18EB (9.4ZB实际) |
| 最大分区数 | 4主分区或3主+1扩展 | 128个(默认) |
| 分区ID | 1字节类型码 | GUID |
| 备份 | 仅一份,在磁盘头 | 头部+尾部各一份 |
| 启动方式 | BIOS/Legacy | UEFI |
| 工具 | fdisk | gdisk/parted |
| 校验 | CRC32 | CRC32 + 签名 |
$ lsblk
${OUT_LSBLK}
$ blkid
${OUT_BLKID}
$ df -hT
${OUT_DF}
# 交互式分区(MBR磁盘)
sudo fdisk /dev/sdb
# fdisk交互命令:
# m - 帮助
# p - 打印分区表
# n - 新建分区
# d - 删除分区
# t - 修改分区类型
# w - 写入并退出
# q - 不保存退出
# 查看分区信息(非交互)
sudo fdisk -l /dev/sda
${OUT_FDISK}
# GPT分区工具,操作与fdisk类似
sudo gdisk /dev/nvme0n1
# gdisk交互命令:
# p - 打印分区表
# n - 新建分区
# d - 删除分区
# t - 修改分区类型码(L查看类型列表)
# w - 写入并退出
# GPT分区类型码:
# EF00 - EFI System Partition
# 8300 - Linux filesystem
# 8200 - Linux swap
# 8E00 - Linux LVM
# 查看所有磁盘分区表
sudo parted -l
# 交互式操作
sudo parted /dev/sdb
# parted命令:
# (parted) print # 显示分区表
# (parted) mklabel gpt # 创建GPT分区表
# (parted) mkpart primary 0% 50% # 创建分区(0%-50%空间)
# (parted) mkpart primary 50% 100% # 创建分区(50%-100%空间)
# (parted) rm 1 # 删除1号分区
# (parted) set 1 boot on # 设置启动标志
${OUT_PARTED}
| 文件系统 | 最大卷 | 最大文件 | 日志 | 适用场景 |
|---|---|---|---|---|
| ext4 | 1EB | 16TB | 有 | 通用,Ubuntu默认 |
| xfs | 16EB | 9EB | 有 | RHEL默认,大文件 |
| btrfs | 16EB | 16EB | 有(CoW) | 快照、压缩、校验 |
| zfs | 256万亿ZB | 16EB | 有(CoW) | 数据完整性优先 |
| vfat | 2TB | 4GB | 无 | EFI分区、U盘兼容 |
# 格式化为ext4
sudo mkfs.ext4 /dev/sdb1
# 或指定标签
sudo mkfs.ext4 -L data /dev/sdb1
# 格式化为xfs
sudo mkfs.xfs /dev/sdb1
# 格式化EFI分区
sudo mkfs.vfat -F 32 /dev/sda1
# 查看文件系统信息
sudo tune2fs -l /dev/sdb1 # ext4
sudo xfs_info /dev/sdb1 # xfs
# 创建swap分区
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2
# 验证
swapon --show
free -h
# 关闭swap
sudo swapoff /dev/sdb2
# 永久生效(写入fstab)
echo "/dev/sdb2 none swap sw 0 0" | sudo tee -a /etc/fstab
# 创建swap文件(更灵活,无需分区)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
# 调整swappiness(0-100,越低越少用swap)
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10 # 临时
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf # 永久
$ du -sh /var /usr /home /tmp
${OUT_DU}
# 查看大文件
find / -type f -size +100M 2>/dev/null | head -20
# 查看inode使用
df -i
# ncdu交互式磁盘分析工具
sudo apt install ncdu
sudo ncdu /var
# 安装smartmontools
sudo apt install smartmontools
# 查看SMART信息
sudo smartctl -a /dev/sda
# 快速健康检查
sudo smartctl -H /dev/sda
# 短时间自检(约2分钟)
sudo smartctl -t short /dev/sda
# 查看自检结果
sudo smartctl -l selftest /dev/sda
${OUT_SMART}
原因:文件系统损坏,内核自动切换为只读保护数据
# 查看dmesg中的错误
dmesg | grep -i "read-only\|error\|remount"
# 修复文件系统(先卸载)
sudo umount /dev/sdb1
sudo fsck -y /dev/sdb1
# 重新挂载为读写
sudo mount -o remount,rw /
# 使用testdisk恢复分区表
sudo apt install testdisk
sudo testdisk /dev/sda
# 选择 [Proceed] -> [Intel/EFI GPT] -> [Analyse] -> [Quick Search]
收集以下信息并整理报告:
# 创建1G swap文件
sudo fallocate -l 1G /tmp/swap-test
sudo chmod 600 /tmp/swap-test
sudo mkswap /tmp/swap-test
sudo swapon /tmp/swap-test
free -h
# 验证swap大小增加
sudo swapoff /tmp/swap-test
✅ 理解MBR/GPT分区表
✅ 掌握fdisk/gdisk/parted工具
✅ 学会创建文件系统和swap
✅ 了解SMART健康监控
# 步骤1:确认新磁盘已被识别
lsblk
sudo fdisk -l | grep "Disk /dev"
# 步骤2:创建分区表和分区
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 0% 100%
# 步骤3:创建文件系统
sudo mkfs.ext4 -L data /dev/sdb1
# 步骤4:创建挂载点
sudo mkdir -p /mnt/data
# 步骤5:获取UUID
blkid /dev/sdb1
# 步骤6:写入fstab实现开机自动挂载
echo 'UUID=你的UUID /mnt/data ext4 defaults,noatime 0 2' | sudo tee -a /etc/fstab
# 步骤7:测试fstab配置
sudo mount -a # 如果报错说明fstab有误,不会导致无法开机
# 步骤8:验证
df -hT /mnt/data
0 = 不需要dump备份,1 = 需要dump备份。现代系统通常全部设0。
# 顺序读取测试
sudo hdparm -Tt /dev/sda
# 使用dd测试写入速度(注意:仅粗略测试)
sudo dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct
sudo rm /tmp/test
# 使用fio精确测试(推荐)
sudo apt install fio
# 随机读测试
sudo fio --name=randread --ioengine=libaio --iodepth=16 \
--rw=randread --bs=4k --direct=1 --size=512M --numjobs=4 \
--runtime=30 --group_reporting
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 输出示例:[mq-deadline] kyber bfq none
# SSD推荐:none或mq-deadline
# HDD推荐:bfq或mq-deadline
# 修改调度器
echo 'none' | sudo tee /sys/block/sda/queue/scheduler
# 检查是否支持TRIM
sudo hdparm -I /dev/sda | grep TRIM
# 手动TRIM
sudo fstrim -v /
# 启用定期自动TRIM
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer
| 调优项 | ext4 | xfs | 说明 |
|---|---|---|---|
| 禁用访问时间 | noatime | noatime | 减少写操作 |
| 日志模式 | data=writeback | 默认 | 性能优先(安全性略降) |
| 预留空间 | -m 1 | N/A | 默认5%预留,大磁盘可降低 |
| inode大小 | -I 256 | 默认 | 大inode存扩展属性 |
| 块大小 | -b 4096 | -b size=4096 | 大文件用大块 |
RAID (Redundant Array of Independent Disks) 将多个物理磁盘组合为逻辑单元,提供性能和/或冗余。
| 级别 | 最少磁盘 | 冗余 | 可用容量 | 特点 |
|---|---|---|---|---|
| RAID 0 | 2 | 无 | 100% | 条带化,最快,最危险 |
| RAID 1 | 2 | 1块盘 | 50% | 镜像,读快 |
| RAID 5 | 3 | 1块盘 | (n-1)/n | 平衡性能与冗余 |
| RAID 6 | 4 | 2块盘 | (n-2)/n | 双冗余,更安全 |
| RAID 10 | 4 | 每组1块 | 50% | 性能+冗余最佳 |
# Linux软件RAID (mdadm)
sudo apt install mdadm
# 创建RAID 1
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
# 查看RAID状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# 停止RAID
sudo mdadm --stop /dev/md0