找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

426

积分

1

好友

48

主题
发表于 3 天前 | 查看: 11| 回复: 0

1. 磁盘相关概念基础

(1)存储设备类型

物理磁盘类型
**HDD (机械硬盘)**
- 结构:磁头、盘片、马达
- 接口:SATA(6Gbps)、SAS(12Gbps)
- 优势:大容量、低成本、数据恢复相对容易
- 劣势:速度慢、怕震动、功耗较高

**SSD (固态硬盘)**
- 结构:NAND闪存、控制器
- 接口:SATA(6Gbps)、NVMe(PCIe通道)
- 优势:速度快、抗震、低功耗、静音
- 劣势:价格高、写入寿命有限

**NVMe SSD**
- 接口:PCIe 3.0/4.0/5.0
- 速度:最高可达7000MB/s(PCIe 4.0)
- 形态:M.2、U.2、AIC卡
接口标准对比
# 查看接口类型和速度
$ lspci | grep -i storage
$ lsblk -d -o name,rota,size,type,tran

# 接口速度理论值:
- SATA III: 600MB/s
- SAS 3.0: 1200MB/s  
- PCIe 3.0 x4: 4000MB/s
- PCIe 4.0 x4: 8000MB/s
- PCIe 5.0 x4: 16000MB/s

(2)磁盘技术参数

**关键参数解释:**
- **容量**:实际可用容量(厂商计算方式不同)
- **转速**:HDD重要指标(5400/7200/10000/15000 RPM)
- **缓存**:HDD的DRAM缓存(64MB-256MB)
- **IOPS**:每秒输入输出操作数(SSD重要指标)
- **延迟**:响应时间(SSD远低于HDD)
- **TBW**:SSD写入寿命(TB级写入总量)

(3)Linux磁盘设备命名规则

# 设备命名规则
/dev/sd[a-z]      # SATA/SAS/USB磁盘
/dev/nvme[0-9]n[0-9]  # NVMe磁盘(如:nvme0n1)
/dev/vd[a-z]      # 虚拟化环境(KVM/Xen)
/dev/hd[a-z]      # 旧IDE接口(现已少见)
/dev/mmcblk[0-9]  # SD卡/eMMC存储

# 分区命名
/dev/sda1         # 第一个分区
/dev/nvme0n1p1    # NVMe第一个分区

2. 分区表方案详解

(1)MBR(主引导记录)

MBR结构
**MBR组成(512字节):**
1. 引导代码(446字节)
2. 分区表(64字节,4个主分区)
3. 签名(2字节,0x55AA)

**MBR限制:**
- 最多4个主分区(或3主+1扩展)
- 扩展分区可再分逻辑分区
- 最大磁盘容量:2TB
- 分区信息存储单一位置
MBR分区类型
# 查看分区类型代码
$ fdisk -l /dev/sda

# 常见分区类型代码:
82  Linux swap / Solaris
83  Linux filesystem
8e  Linux LVM
fd  Linux raid auto

(2)GPT(GUID分区表)

GPT结构
**GPT优势:**
- 支持128个主分区(理论无限)
- 最大磁盘容量:9.4ZB(1ZB=1024EB)
- 分区表备份(磁盘首尾各一份)
- CRC32校验,提高数据完整性
- 使用GUID唯一标识分区

**GPT组成部分:**
1. 保护性MBR(兼容性)
2. 主GPT头
3. 主分区表
4. 实际分区区域
5. 备份分区表
6. 备份GPT头
GPT vs MBR 选择指南
**选择GPT的场景:**
- 磁盘容量 > 2TB
- UEFI启动系统
- 需要超过4个主分区
- 数据安全性要求高
- 现代服务器和工作站

**选择MBR的场景:**
- 旧系统兼容性要求
- 磁盘容量 < 2TB
- BIOS传统启动
- 嵌入式/旧设备

(3)分区方案设计

单磁盘分区方案
# 通用服务器分区方案(50GB磁盘示例)
/          20G   # 根目录
/boot     500M   # 引导分区(UEFI需要)
/home     10G    # 用户数据
/var      5G     # 日志和可变数据
/tmp      2G     # 临时文件
swap      2G     # 交换分区(物理内存1-2倍)

# 生产数据库服务器方案
/          50G
/boot     1G
/home     20G
/var/log  20G    # 日志独立分区
/data     剩余空间 # 数据库专用
swap      物理内存1~2倍
多磁盘分区方案
**RAID方案:**
- RAID 0: 条带化,性能优先
- RAID 1: 镜像,可靠性优先
- RAID 5: 分布式奇偶校验,平衡型
- RAID 10: 镜像+条带,高性能高可靠

**LVM方案:**
- 物理卷(PV) → 卷组(VG) → 逻辑卷(LV)
- 支持动态扩展、快照、条带化

3. 基础磁盘配置管理

(1)磁盘信息查看

识别和列出磁盘
# 查看所有块设备
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 465.8G  0 disk 
├─sda1        8:1    0   512M  0 part /boot/efi
├─sda2        8:2    0   732M  0 part /boot
└─sda3        8:3    0 464.6G  0 part  
  ├─vg-root 253:0    0    50G  0 lvm  /
  └─vg-home 253:1    0 414.6G  0 lvm  /home

# 查看磁盘详细信息
$ fdisk -l
$ parted -l

# 查看磁盘属性和型号
$ hdparm -I /dev/sda
$ smartctl -i /dev/sda

# 查看磁盘使用情况
$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg-root ext4   50G   20G   28G  42% /
磁盘性能测试
# 测试顺序读写速度
$ dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
$ hdparm -tT /dev/sda

# 使用fio进行专业测试
$ fio --name=randwrite --ioengine=libaio --iodepth=32 \
     --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=4 \
     --runtime=60 --group_reporting

# 查看实时IO状态
$ iostat -x 2
$ iotop

(2)磁盘分区操作

使用fdisk(MBR/GPT)
# 对新磁盘进行分区
$ fdisk /dev/sdb

# fdisk常用命令(交互模式)
n      # 新建分区
p      # 查看分区表
d      # 删除分区
t      # 更改分区类型
w      # 保存并退出
q      # 不保存退出
g      # 新建GPT分区表
o      # 新建MBR分区表

# 分区后需要通知内核
$ partprobe /dev/sdb
$ udevadm settle
使用parted(推荐GPT)
# 创建GPT分区表
$ parted /dev/sdb mklabel gpt

# 创建分区
$ parted /dev/sdb mkpart primary ext4 1MiB 10GiB
$ parted /dev/sdb mkpart primary linux-swap 10GiB 12GiB
$ parted /dev/sdb mkpart primary ext4 12GiB 100%

# 设置分区标志(UEFI启动需要)
$ parted /dev/sdb set 1 boot on

# 查看分区
$ parted /dev/sdb print

# 删除分区
$ parted /dev/sdb rm 1
使用gdisk(GPT专用)
# 交互式GPT分区
$ gdisk /dev/sdb

# 常用命令:
n    # 新建分区
p    # 查看分区表
d    # 删除分区
t    # 更改分区类型
w    # 保存
x    # 专家模式

(3)文件系统创建与管理

常见文件系统对比
**ext4**:Linux默认,稳定成熟
- 最大文件大小:16TB
- 最大文件系统:1EB
- 适合:通用用途

**XFS**:高性能,大文件
- 最大文件大小:8EB
- 最大文件系统:8EB
- 适合:大文件、高并发

**Btrfs**:高级特性
- 快照、压缩、RAID功能
- 适合:桌面、实验环境

**ZFS**:企业级特性
- 数据完整性校验、去重
- 适合:企业存储、NAS
创建文件系统
# 创建ext4文件系统
$ mkfs.ext4 /dev/sdb1
$ mkfs.ext4 -L DATA /dev/sdb1  # 添加卷标

# 创建XFS文件系统
$ mkfs.xfs /dev/sdb2
$ mkfs.xfs -f -L DATABASE /dev/sdb2

# 创建swap分区
$ mkswap /dev/sdb3
$ swapon /dev/sdb3

# 查看文件系统信息
$ blkid /dev/sdb1
$ file -s /dev/sdb1
$ dumpe2fs /dev/sdb1 | head -50  # ext4详细信息
$ xfs_info /dev/sdb2              # XFS详细信息
文件系统检查和修复
# 检查ext2/3/4文件系统
$ fsck /dev/sdb1
$ e2fsck -f /dev/sdb1  # 强制检查
$ e2fsck -y /dev/sdb1  # 自动修复

# 检查XFS文件系统
$ xfs_repair /dev/sdb2
$ xfs_repair -n /dev/sdb2  # 只检查不修复

# 检查前必须卸载
$ umount /dev/sdb1
# 或使用只读模式检查
$ fsck -n /dev/sdb1

# 查看文件系统状态
$ tune2fs -l /dev/sdb1  # ext系列
$ xfs_admin -l /dev/sdb2 # XFS

(4)挂载配置管理

手动挂载
# 创建挂载点
$ mkdir -p /mnt/data

# 临时挂载
$ mount /dev/sdb1 /mnt/data
$ mount -t ext4 /dev/sdb1 /mnt/data
$ mount -o rw,noatime /dev/sdb1 /mnt/data

# 挂载选项说明:
ro/rw        # 只读/读写
noatime      # 不更新访问时间,提升性能
nodiratime   # 不更新目录访问时间
data=ordered # ext4数据写入模式
defaults     # 默认选项
自动挂载(/etc/fstab)
# 编辑fstab文件
$ vim /etc/fstab

# fstab配置格式:
# 设备或UUID     挂载点    文件系统    挂载选项    dump fsck
UUID=xxxxxxx    /data     ext4       defaults    0 2
/dev/sdb1       /backup   xfs        defaults    0 0
//192.168.1.100/share /mnt/nfs nfs defaults,_netdev 0 0

# 获取UUID
$ blkid /dev/sdb1
$ lsblk -f /dev/sdb1

# 测试fstab配置
$ mount -a
$ systemctl daemon-reload

# 常用挂载选项:
defaults,_netdev  # 网络设备,网络就绪后挂载
noauto           # 不自动挂载
user             # 允许普通用户挂载
nofail           # 设备不存在时不报错
x-systemd.automount  # systemd自动挂载
卸载操作
# 卸载文件系统
$ umount /mnt/data

# 强制卸载(当有进程占用时)
$ umount -f /mnt/data
$ umount -l /mnt/data  # 懒卸载

# 查看挂载点占用进程
$ lsof /mnt/data
$ fuser -m /mnt/data
$ fuser -km /mnt/data  # 结束占用进程

(5)磁盘配额管理

启用磁盘配额
# 1. 启用文件系统配额支持
$ mount -o usrquota,grpquota /dev/sdb1 /home

# 2. 初始化配额数据库
$ quotacheck -cug /home
$ quotacheck -avug  # 检查所有配额分区

# 3. 启用配额
$ quotaon /home
$ quotaon -avug     # 启用所有配额

# 4. 配置自动配额检查
$ vim /etc/fstab
/dev/sdb1  /home  ext4  defaults,usrquota,grpquota  0 2
配置用户配额
# 设置用户配额
$ edquota username
# 编辑以下参数:
# blocks soft/hard: 磁盘空间限制(单位:KB)
# inodes soft/hard: 文件数量限制

# 设置配额模板
$ edquota -p template_user username

# 设置组配额
$ edquota -g groupname

# 查看配额
$ quota username
$ repquota -a          # 所有用户配额报告
$ quotastats           # 配额统计信息

# 复制配额设置
$ edquota -p user1 user2
配额限制示例
# 为用户设置10GB软限制,12GB硬限制
$ setquota -u username 10240000 12288000 0 0 /home

# 为组设置配额
$ setquota -g developers 51200000 61440000 0 0 /home

# 宽限时间设置
$ edquota -t
# 设置空间超限宽限期:7天
# 设置inode超限宽限期:7天

4. 实战案例配置

(1)新磁盘完整配置流程

#!/bin/bash
# 新磁盘配置脚本示例
DISK="/dev/sdb"
MOUNT_POINT="/data"

echo "=== 新磁盘配置开始 ==="

# 1. 查看磁盘信息
echo "1. 检查磁盘..."
fdisk -l $DISK
lsblk $DISK

# 2. 创建GPT分区表
echo "2. 创建GPT分区表..."
parted $DISK mklabel gpt

# 3. 创建分区(使用全部空间)
echo "3. 创建分区..."
parted $DISK mkpart primary xfs 1MiB 100%

# 4. 创建文件系统
echo "4. 创建XFS文件系统..."
mkfs.xfs -f -L DATA ${DISK}1

# 5. 创建挂载点
echo "5. 创建挂载点..."
mkdir -p $MOUNT_POINT

# 6. 获取UUID并配置自动挂载
echo "6. 配置自动挂载..."
UUID=$(blkid ${DISK}1 | awk -F'"' '{print $2}')
echo "UUID=$UUID $MOUNT_POINT xfs defaults 0 2" >> /etc/fstab

# 7. 挂载并验证
echo "7. 挂载并验证..."
mount -a
df -h $MOUNT_POINT

echo "=== 配置完成 ==="

这段自动化配置流程,充分利用了 运维/DevOps 中常用的 shell 脚本技术,大大提升了系统管理员的工作效率。

(2)磁盘故障排查指南

# 磁盘健康检查
$ smartctl -H /dev/sda
$ badblocks -sv /dev/sda

# I/O错误排查
$ dmesg | grep -i error
$ journalctl -k --since="1 hour ago" | grep -i disk

# 性能问题排查
$ iostat -x 1
$ iotop -o
$ vmstat 1

# 文件系统修复
# 1. 进入单用户模式或救援模式
# 2. 卸载问题磁盘
# 3. 运行fsck修复
# 4. 检查日志:/var/log/messages

(3)生产环境最佳实践

**分区设计原则:**
1. /boot单独分区(1GB,ext4)
2. /根分区足够大(至少20GB)
3. 关键目录独立分区(/var, /home, /tmp)
4. swap分区:物理内存1.5-2倍
5. 数据目录单独分区

**性能优化:**
1. SSD使用noatime,nodiratime挂载选项
2. 数据库使用XFS或ext4 with data=writeback
3. 日志目录使用独立分区防止写满
4. 定期清理/tmp和日志文件

**监控告警:**
1. 监控磁盘使用率(>80%告警)
2. 监控磁盘健康状态(SMART)
3. 监控I/O延迟和错误
4. 设置磁盘配额防止滥用

5. 常用命令速查表

(1)磁盘信息类

lsblk                      # 查看块设备树
fdisk -l                   # 列出所有磁盘分区
parted -l                  # 显示分区信息(GPT友好)
blkid                      # 显示块设备属性
df -hT                     # 查看文件系统使用情况
du -sh *                   # 查看目录大小

(2)分区管理类

fdisk /dev/sdX             # MBR分区管理
gdisk /dev/sdX             # GPT分区管理
parted /dev/sdX            # 高级分区工具
sgdisk                     # 脚本化GPT工具
cfdisk                     # 图形化分区工具

(3)文件系统类

mkfs.ext4 /dev/sdX1        # 创建ext4文件系统
mkfs.xfs /dev/sdX1         # 创建XFS文件系统
fsck /dev/sdX1             # 检查修复文件系统
tune2fs -l /dev/sdX1       # 显示ext文件系统信息
xfs_info /dev/sdX1         # 显示XFS文件系统信息

(4)挂载管理类


mount /dev/sdX1 /mnt       # 挂载文件系统
umount /mnt                # 卸载文件系统
findmnt                    # 显示已挂载文件系统
mount -a                   # 挂载fstab中所有文件系统



上一篇:Kubernetes配置管理实战:深度解析ConfigMap与Secret的最佳实践
下一篇:大模型分析与优化实战:24小时高效拆解VideoGen等复杂模型的方法论
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-6 23:53 , Processed in 0.069774 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表