一、磁盘信息查看命令

  1. df - 查看磁盘使用情况

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 查看所有磁盘使用(人类可读格式)
    df -h

    # 查看特定文件系统类型
    df -h -t xfs

    # 查看inode使用情况
    df -i

    # 显示完整的文件系统类型
    df -Th

    # 示例输出:
    # Filesystem Type Size Used Avail Use% Mounted on
    # /dev/sda1 ext4 50G 30G 20G 60% /
  2. du - 查看文件和目录大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 查看当前目录总大小
    du -sh

    # 查看指定目录大小
    du -sh /var/log

    # 查看目录下各文件/目录大小并排序
    du -h /home | sort -rh | head -10

    # 只显示一级子目录大小
    du -h --max-depth=1 /etc

    # 排除某些目录
    du -sh --exclude="*.log" /var
  3. lsblk - 列出块设备

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 列出所有块设备
    lsblk

    # 显示详细信息(包括文件系统)
    lsblk -f

    # 显示所有信息(包括主次设备号)
    lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,LABEL,UUID

    # 树状显示
    lsblk -t

    # 示例:
    # NAME SIZE TYPE FSTYPE MOUNTPOINT
    # sda 100G disk
    # ├─sda1 500M part ext4 /boot
    # └─sda2 99.5G part LVM2_member
  4. blkid - 查看块设备属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 查看所有块设备的UUID和文件系统
    blkid

    # 查看特定设备
    blkid /dev/sda1

    # 只显示UUID
    blkid -s UUID /dev/sda1

    # 示例输出:
    # /dev/sda1: UUID="xxxx-xxxx" TYPE="ext4"

二、磁盘分区命令

  1. fdisk - MBR分区工具(<2TB)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 查看磁盘分区表
    sudo fdisk -l

    # 对/dev/sdb进行分区(交互式)
    sudo fdisk /dev/sdb
    # 常用命令:
    # n - 新建分区
    # p - 显示分区表
    # d - 删除分区
    # t - 更改分区类型
    # w - 保存并退出
    # q - 不保存退出

    # 非交互式创建分区示例
    echo -e "n\np\n1\n\n+10G\nw" | sudo fdisk /dev/sdb
  2. gdisk - GPT分区工具(>2TB)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 查看GPT分区
    sudo gdisk -l /dev/sdb

    # 进入交互模式
    sudo gdisk /dev/sdb
    # 常用命令:
    # n - 新建分区
    # p - 打印分区表
    # d - 删除分区
    # w - 保存并退出
    # ? - 查看帮助

    # 示例:创建GPT分区表并分区
    sudo gdisk /dev/sdb
    # 输入: o (创建新的GPT分区表)
    # 输入: n (新建分区)
    # 输入: 1 (分区号)
    # 输入: (起始扇区,回车默认)
    # 输入: +20G (分区大小)
    # 输入: 8300 (Linux文件系统类型)
    # 输入: w (保存)
  3. parted - 高级分区工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 查看分区信息
    sudo parted /dev/sdb print

    # 创建GPT分区表
    sudo parted /dev/sdb mklabel gpt

    # 创建主分区(从0到10G)
    sudo parted /dev/sdb mkpart primary 0% 10GB

    # 创建第二个分区(从10G到100%)
    sudo parted /dev/sdb mkpart primary 10GB 100%

    # 设置分区标志
    sudo parted /dev/sdb set 1 boot on
  4. partprobe - 刷新分区表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 刷新所有磁盘分区表
    sudo partprobe

    # 刷新指定磁盘
    sudo partprobe /dev/sdb

    # 强制刷新
    sudo partprobe -s

    # 示例:分区后立即刷新
    sudo fdisk /dev/sdb # 创建分区
    sudo partprobe /dev/sdb # 刷新分区表
    lsblk # 验证新分区

三、文件系统命令

  1. mkfs - 创建文件系统

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 格式化为ext4
    sudo mkfs.ext4 /dev/sdb1

    # 格式化为xfs
    sudo mkfs.xfs /dev/sdb1

    # 格式化为ext4并指定标签
    sudo mkfs.ext4 -L DATA_DISK /dev/sdb1

    # 快速格式化(跳过坏块检查)
    sudo mkfs.ext4 -q /dev/sdb1

    # 指定块大小
    sudo mkfs.xfs -b size=4096 /dev/sdb1
  2. mount/umount - 挂载/卸载

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 临时挂载
    sudo mount /dev/sdb1 /mnt/data

    # 挂载时指定选项
    sudo mount -o rw,noatime /dev/sdb1 /mnt/data

    # 挂载ISO文件
    sudo mount -o loop ubuntu.iso /mnt/iso

    # 永久挂载(编辑/etc/fstab)
    echo '/dev/sdb1 /data ext4 defaults 0 0' | sudo tee -a /etc/fstab

    # 测试fstab配置
    sudo mount -a

    # 卸载
    sudo umount /mnt/data

    # 强制卸载(当设备忙时)
    sudo umount -l /mnt/data

四、LVM逻辑卷管理

  1. 创建流程:PV → VG → LV

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 1. 创建物理卷(PV)
    sudo pvcreate /dev/sdb1
    sudo pvcreate /dev/sdc1

    # 2. 创建卷组(VG)
    sudo vgcreate vg_data /dev/sdb1

    # 3. 扩展卷组
    sudo vgextend vg_data /dev/sdc1

    # 4. 创建逻辑卷(LV)
    sudo lvcreate -L 20G -n lv_www vg_data

    # 5. 格式化逻辑卷
    sudo mkfs.xfs /dev/vg_data/lv_www

    # 6. 挂载使用
    sudo mkdir /www
    sudo mount /dev/vg_data/lv_www /www
  2. 查看命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 查看物理卷
    sudo pvdisplay
    sudo pvs

    # 查看卷组
    sudo vgdisplay
    sudo vgs

    # 查看逻辑卷
    sudo lvdisplay
    sudo lvs

    # 查看详细信息
    sudo pvscan
    sudo vgscan
    sudo lvscan
  3. 扩展操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 1. 扩展逻辑卷(先扩展LV,再扩展文件系统)
    sudo lvextend -L +10G /dev/vg_data/lv_www

    # 2. 扩展文件系统
    # 对于xfs
    sudo xfs_growfs /dev/vg_data/lv_www

    # 对于ext4
    sudo resize2fs /dev/vg_data/lv_www

    # 一步完成扩展
    sudo lvextend -L +5G -r /dev/vg_data/lv_www
  4. 删除流程:LV → VG → PV

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 1. 卸载逻辑卷
    sudo umount /www

    # 2. 删除逻辑卷
    sudo lvremove /dev/vg_data/lv_www

    # 3. 删除卷组
    sudo vgremove vg_data

    # 4. 删除物理卷
    sudo pvremove /dev/sdb1 /dev/sdc1

五、命令速查表

操作 命令示例
查看磁盘 df -h home
查看目录大小 du -sh var/log
列出块设备 lsblk -f
查看UUID blkid dev/sda1
MBR分区 fdisk dev/sdb
GPT分区 gdisk dev/sdb
高级分区 parted dev/sdb print
刷新分区 partprobe dev/sdb
格式化 mkfs.xfs dev/sdb1
挂载 mount dev/sdb1 /mnt
卸载 umount mnt
创建PV pvcreate dev/sdb1
创建VG vgcreate vg1 /dev/sdb1
创建LV lvcreate -L 10G -n lv1 vg1
扩展LV lvextend -L +5G dev/vg1/lv1

六、重点提醒

生产环境操作必须遵守:

  1. 先备份后操作:操作前备份分区表和重要数据
  2. 双重确认:每个危险操作都要确认两次
  3. 记录操作:详细记录每个操作步骤
  4. 逐步执行:不要一次性执行多个危险命令
  5. 准备回滚:提前准备好回滚方案
  6. 选择时机:在业务低峰期操作
  7. 通知相关人员:操作前通知所有相关人员
  8. 测试环境验证:先在测试环境验证操作流程

RAID 如何解决“磁盘高可用”问题?

核心思想:数据冗余。

通过在多块磁盘上存储额外的校验信息或副本,当其中一块(或多块,取决于RAID级别)磁盘发生物理故障时,数据不会丢失,系统可以继续运行或快速恢复。

典型代表:RAID 1, RAID 5, RAID 6, RAID 10

  • RAID 1(镜像): 将相同的数据同时写入两块磁盘。一块坏了,另一块有完整数据,可用性极高。
  • RAID 5(分布式奇偶校验): 将数据和奇偶校验信息交错存储在所有磁盘上。允许任意一块磁盘故障而不丢失数据。
  • RAID 6(双重分布式奇偶校验): 类似RAID 5,但有两份校验信息,可以容忍任意两块磁盘同时故障。
  • RAID 10(先镜像再条带化): 结合了RAID 1的高可靠性和RAID 0的高性能。至少允许每个镜像对中坏一块盘(最坏情况可能只坏一块,最好情况可坏多块)。

注意: RAID 0 没有冗余,它反而降低了可用性(任何一块盘损坏,全部数据丢失)。它只解决容量和性能问题。

RAID 如何解决“单块磁盘容量小”的问题?

核心思想:条带化。

将数据分割成块(条带),然后并发地写入多块磁盘。这样,逻辑上形成了一个容量更大、速度更快的“大磁盘”。

典型代表:RAID 0, RAID 5, RAID 6, RAID 10

  • RAID 0(条带化): 纯粹为了扩容和提速。N块盘组成一个逻辑盘,容量是N块盘之和,读写速度接近N倍(理想情况下)。
  • 其他级别(RAID 5/6/10): 它们在提供冗余的同时,也通过条带化来利用多块盘的容量和性能。虽然因为存储校验信息或镜像会损失一部分可用容量,但最终逻辑容量仍然远大于单盘。

容量计算示例:

  • RAID 0: 总容量 = 单盘容量 × 磁盘数量
  • RAID 1: 总容量 = 单盘容量 (镜像对容量减半)
  • RAID 5: 总容量 = 单盘容量 × (磁盘数量 - 1) (损失一块盘容量用于校验)
  • RAID 6: 总容量 = 单盘容量 × (磁盘数量 - 2) (损失两块盘容量用于双重校验)
  • RAID 10: 总容量 = 单盘容量 × (磁盘数量 / 2) (必须由偶数块盘组成)

主要RAID级别对比与选型建议

RAID级别 别名 最少磁盘数 容量利用率 可靠性 读性能 写性能 适用场景
RAID 0 条带卷 2 最高 (100%) 最低(无冗余) 极高 极高 对速度要求极高、可接受数据丢失的场景(如视频缓存、临时渲染)
RAID 1 镜像卷 2 低 (50%) 极高(可坏1块) 高(可并发读) 中等(需写两份) 对可靠性要求极高、容量需求不大的场景(如系统盘、关键小数据库)
RAID 5 分布式校验 3 较高 (n-1)/n 高(可坏1块) 中等(需计算校验) 通用平衡之选。兼顾存储效率、可靠性和性能,适用于文件服务器、中小数据库。注意:重建大容量硬盘压力大。
RAID 6 双重校验 4 中等 (n-2)/n 很高(可坏2块) 较低(需计算双重校验) 对可靠性要求极高、使用大容量SATA硬盘的场景(如归档存储、视频监控)
RAID 10 镜像+条带 4 低 (50%) 极高(可坏多块,但有限制) 极高 高性能高可靠之选。对性能和可靠性都有严苛要求的场景(如大型数据库、虚拟化主机、高负载应用服务器)

重要补充与最佳实践

1. RAID不是备份:

  • RAID主要防止硬件故障(磁盘损坏)。
  • 它无法防止逻辑错误(如误删除、病毒破坏、软件故障、火灾盗窃)。必须结合定期备份才能构成完整的数据保护策略。

2. 硬件RAID vs 软件RAID:

  • 硬件RAID: 使用专用RAID卡(带处理器和缓存),性能好,不消耗主机资源,操作系统识别为单块盘。稳定性高,但成本也高。
  • 软件RAID: 由操作系统(如Windows的“磁盘管理”,Linux的mdadm)驱动实现。成本低,配置灵活,但消耗CPU,性能稍差,且与系统耦合。

3. 热备盘:

在阵列中配置一块空闲磁盘。当阵列中某块活动磁盘故障时,系统会自动使用热备盘进行重建,无需人工干预,进一步提高了可用性。

4. 重建与监控:

  • 阵列降级(有盘损坏)后,重建过程对剩余磁盘是巨大的I/O压力。RAID 6在此场景下更具优势。
  • 必须启用监控(邮件/短信告警),以便在磁盘故障时及时获知并更换。

总结

选择RAID级别,本质是在容量利用率、性能、可靠性和成本之间做权衡。

  • 追求极致速度且不怕丢数据: 选RAID 0。
  • 追求极高可靠性且不计成本: 选RAID 1或RAID 10。
  • 寻求最佳平衡点(通用场景): 选RAID 5(盘数少或盘容量不大时)或RAID 6(盘多容量大时)。
  • 既要高性能又要高可靠: 预算充足,首选RAID 10。

最终,RAID是企业存储架构的基石,完美地解决了单盘容量小和缺乏高可用的问题,但它必须与定期备份和有效监控相结合,才能构建健壮的数据存储体系。