# 系统管理篇(2)- 磁盘管理

# 一、磁盘使用监控

# 1. 查看命令

  • fdisk

    既可以查询磁盘信息,又可以进行磁盘分区;

    磁盘设备是块设备,不要去修改其权限;

    自行学习 parted 命令。

    fdisk -l
    fdisk -l /dev/sd? # 查看磁盘
    fdisk -l /dev/sd?? # 查看分区
  • df

    df -Th
  • du

    文件实际占用的空间

    # 两个查看文件大小的区别
    ls -lh /etc/passwd # 包含了空洞文件的大小
    du -h /etc/passwd # 文件实际大小
    # 实验:
    dd if=/dev/zero bs=4M count=10 of=afile
    ls -lh afile
    du -h afile
    # 都是 40M
    # 创建空洞文件
    dd if=/dev/zero bs=4M count=10 seek=10 of=bfile
    ls -lh bfile # 说明了什么?ls 测量的是包含了空洞的文件大小
    du -h bfile # 说明了什么?du 测量的是文件有数据的实际大小

# 二、文件系统

# 1. 文件系统类型

Linux ⽀持多种⽂件系统,常⻅的有

  • ext4
  • xfs
  • NTFS
    • 需要安装额外软件

# 2. 深入 Linux 文件

ext4 文件系统基本结构比较复杂

  • 超级块

    • 文件系统最前面部分 - 分区中有多少文件
  • 超级块副本

    • 超级块的副本 - 用于恢复
  • i 节点

    • 记录每个文件元数据信息 - 文件名,大小,编号,权限
    • 文件名记录在文件的父目录的 i 节点中
  • 数据块

    • 文件对应的真正数据 - 普通文件就其存放的数据;目录就是去其中存放的 i 节点信息
    • 链式存储

ext4 ⽂件系统深⼊理解

  • 执⾏ mkdir 、touch、 vi 等命令后的内部操作

  • 符号链接与硬链接

    ls -l
    ls -i # 查看到 i 节点编号
    touch afile
    ls -li afile # 大小 0 代表什么?
    du -h afile
    echo 123 > afile
    ls -li afile 
    du -h afile # 大小代表什么?
    cp afile afile2
    ls -li afile* # 观察 i 节点编号,代表什么?
    mv afile2 afile3
    ls -li afile* # 观察 i 节点编号,代表什么?
    vi afile4 # 写入内容,保存退出
    ls -li afile4
    vi afile4 # 修改
    ls -li afile4 # 观察 i 节点编号,代表什么?
    rm afile4
    # i 节点和文件名断开
    ln afile bfile
    ls -li afile bfile # 观察 i 节点编号
    # 硬链接不能跨越分区
    ln -s afile aafile 
    ls -li afile aafile # 观察 i 节点编号,文件权限
    # 软链接能跨越分区

# 三、磁盘管理

# 1. 磁盘分区

  • 常用命令

    • fdisk
    # 在虚拟机中添加磁盘
    fdisk -l # 查看新加磁盘
    fdisk /dev/sdb # 以具体磁盘为准
    # 交互式命令
    m # 帮助
    n # 新建
    p # 主分区
    1 # 分区
    回车 # 开始扇区
    +5G # 结束扇区,如果占用剩余所有,直接敲回车
    p # 查看分区
    d # 删除分区
    q # 不保存退出
    w # 保存退出
    • mkfs
    mkfs.
    mkfs.xfs /dev/sdb1 # 以具体磁盘分区为准
    • parted
      • 磁盘大于 2T

# 2. 挂载

  • 常用命令

    • mount
    mkdir /mnt/test
    mount -t xfs /dev/sdb1 /mnt/test
    mount
  • 配置文件

    • /etc/fstab
    vi /etcfstab
    /dev/sdb1 /mnt/test xfs          defaults    0    0
    分区       挂载点     文件系统类型   权限        备份  自检

# 3. 磁盘配额

xfs 文件系统的用户磁盘配额 quota

mkfs.xfs /etc/sdb1
mkdir /mnt/disk1
mount -o uquota,gquota /dev/sdb1 /mnt/disk1
chmod 1777 /mnt/disk1 # 特殊权限,1 代表粘性位,作用是只有创建者和 root 可以删除
xfs_quota -x -c 'report -ugibh' /mnt/disk1 # i-inode b-block h - 人性化显示
xfs_quota -x -c 'limit -u isoft=5 ihard=10 用户名' /mnt/disk1
  • soft 软限制:超过软限制只警告,给予一个宽限时间,宽限时间内不影响使用
  • hard 硬限制:绝对不能超过配额

# 四、RAID

# 1. RAID 基本概念

RAID 的常见级别及含义

  • RAID0 striping 条带方式,提高单盘吞吐率
  • RAID1 mirroring 镜像⽅式,提⾼可靠性
  • RAID5 有奇偶校验
  • RAID10 RAID 1 与 RAID 0 的结合

# 2. 软件 RAID 配置

yum install -y mdadm
# 事先准备好三个新磁盘分区(也可以直接针对磁盘),同样大小
# sdb1 sdc1
# RAID1
mdadm -C /dev/md0 -a yes  -l1 -n2 /dev/sd[b,c]1
# 查看
mdadm -D /dev/md0
# 追加配置信息到配置文件,下次开机才会自动创建软件 RAID 
# 实验不建议设置
# echo DEVICE /dev/sd[b,c]1 >> /etc/mdadm.conf
# mdadm -Evs >> /etc/mdadm.conf
# 格式化 也可以像普通磁盘一样划分分区后再格式化
mkfs.xfs /dev/md0
# 破坏 RAID,使底层磁盘分区可以再重用
# 先停止 RAID 工作
mdadm --stop /dev/md0
# 再破坏超级块
dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
dd if=/dev/zero of=/dev/sdc1 bs=1M count=1
# 自行尝试做 RAID5

# 五、逻辑卷管理

# 1. 逻辑卷基本概念

逻辑卷和文件系统的关系

# 2. 创建逻辑卷

# 1. 添加硬盘
fdisk -l sd??
# 2. 创建物理卷
pvcreate /dev/sd[b,c]1
pvs
# 3. 创建卷组
vgcreate vg1 /dev/sd[b,c]1
pvs
vgs
# 4. 创建逻辑卷
lvcreate -L 30M -n lv1 vg1
lvs
vgs
# 5. 使用
mkdir /mnt/test
mkfs.xfs /dev/vg1/lv1
mount /dev/vg1/lv1 /mnt/test

# 3. 动态扩容

# /dev/sdd1 是 PV 名,不是磁盘名和分区名
vgextend vg1 /dev/sdd1
vgs
lvs
# /dev/vg1/lv1 是 LV 名
lvextend -L +20G /dev/vg1/lv1
lvs
df -h
xfs_growfs /dev/vg1/lv1
  1. # 删除 LVM

# 删除 lv
# 如果 lv 已经挂载,需要先 umount 取消挂载
lvremove /dev/vg1/lv1
# 删除 vg
vgremove vg1
# 删除 pv
pvremove /dev/sd[b,c]1