Linux的存储管理

作者:

在

补充信息

​

1.blkid命令可以方便查看uuid
2.gpt所有分区都是平等的,没有区分,parted命令需要输入primary是历史遗留问题,mbr有主分区,最多4个,如果使用扩展分区,可以分出多个
3.mb和mib是有区别的,mb进制1000,mib进制1024
4.parted /dev/sda align-check opt 1  #检查分区标号为1的分区,是否满足optimal对齐,(起止扇区是2048的倍数,1mib对齐),如果输出1 aligned   代表 ✅ 通过最优标准
5.分区可以使用%,这样便于parted自动处理对齐,提高读写性能

[root@localhost ~]# parted /dev/sda mkpart primary 0% 10%
信息: 你可能需要 /etc/fstab。

[root@localhost ~]# parted /dev/sda mkpart primary 10% 20%
信息: 你可能需要 /etc/fstab。

[root@localhost ~]# parted /dev/sda mkpart primary 20% 30%
信息: 你可能需要 /etc/fstab。

[root@localhost ~]# parted /dev/sda mkpart primary 30% 40%
信息: 你可能需要 /etc/fstab。

[root@localhost ~]# parted /dev/sda mkpart primary 40% 50%
错误: 无法创建更多分区。
6.Linux 内核中,每个磁盘块设备最多只预留 16 个分区号
7.如果需要当作系统盘启动系统,必须分区;如果仅当作普通磁盘使用,并不需要分区
8.mount注意挂在参数,默认是是rw,如果仅仅想只读挂载
# 只读挂在
mount -o ro /dev/sda1 /mnt/data
# 不用卸载,直接切换为只读
mount -o remount,ro /mnt/data

==总结==:image-20260721200137473

image-20260721200302621

存储管理

硬盘工作原理

image-20260721152056322 image-20260721152124554

image-20260721152154862

image-20260721152210844

image-20260721152236951


==总结==:

安装操作系统时硬盘确实必须分区。简单来说,新硬盘就像一张白纸,需要划分区域(分区)并建立目录(文件系统),电脑才能识别和使用它。

这个过程主要有两步:一是制作一个能启动电脑的启动盘,二是进入安装环境后对硬盘进行手动分区

    • GPT(GUID Partition Table):现代电脑的首选。它搭配**UEFI** 启动模式,支持2TB以上大硬盘、分区数量不受限且更稳定。
    • MBR (Master Boot Record):老标准。搭配传统 Legacy BIOS 模式,有诸多限制。

现在绝大多数新电脑都默认UEFI+GPT模式,请优先选择。

    1. 安装界面中的分区操作
      选择好分区表后,就可以在安装界面进行分区了。一个典型的Windows分区方案通常包含:

    EFI系统分区 (ESP):必须创建。用于存放电脑启动所必需的文件。在GPT分区方案中,这是系统能够正常启动的前提。通常约 100-500 MB,格式为 FAT32。

    系统分区 (C盘):用于安装操作系统和应用程序。建议容量不低于 120 GB,如果硬盘空间充裕,150-200 GB 会更从容。格式为 NTFS。

    数据分区 (D盘、E盘等):用于存放个人文件、文档、照片、视频等。在安装系统时,可以只创建C盘,剩余空间留待系统安装完成后,再通过系统自带的“磁盘管理”工具来划分。这样做的好处是,将来重装系统时,只需格式化C盘,其他盘的数据不受影响。*

    1. 关于“激活分区”
      这是一个常见误解。“激活分区”是MBR磁盘时代的操作。在目前主流的GPT+UEFI模式下,系统通过EFI系统分区(ESP) 来引导启动,完全不需要手动去“激活”任何分区。错误地激活分区反而可能导致系统无法启动。
  • 总结

    总的来说,安装系统时分区是必须的。核心流程是:

    制作一个匹配你电脑启动模式(UEFI)的启动U盘。

    进入安装界面后,为硬盘选择GPT分区表。

    创建EFI系统分区(ESP)和一个足够大的C盘。

    将系统安装到C盘。

    系统装好后,再用“磁盘管理”工具把剩下的空间分成D盘、E盘。

    1. U盘启动安装操作系统

    image-20260722192104443

    image-20260721152256900

    image-20260721152318186image-20260721152354689

    fdisk和parted区别

    image-20260723091814533

    ==先用fdisk就行,忽视第二种==


    fdisk实践复现

    image-20260723093046470

    image-20260723093230929


    image-20260721152410849


    文件系统

    image-20260721152500121

    ==注意==:你笔记里写 Ext4支持1EB,XFS支持18EB。1 EB = 1024 PB = 100万 TB。实际上你根本碰不到这个天花板,可以忽略不计。


    image-20260721152542391

    ==总结==:

    image-20260723102456401

    日常干活:闭眼敲mkfs.xfs /dev/sdX,系统自动给你生成最优的superblock/inode/block,VFS在底层无缝衔接。


    image-20260721152604018

    image-20260721152621722

    挂载和永久挂载

    image-20260723112104182

    image-20260723114045833


    image-20260721152637412

    卸载挂载

    image-20260723114511451


    ==总结==:

    挂载新盘是 Linux 存储管理中实现“数据与操作系统物理隔离”的唯一手段。系统盘仅负责维护 OS 运行环境与基础软件包,而所有可增长的用户数据、业务持久化数据及高频日志,必须通过挂载独立文件系统的方式存放到额外物理磁盘,以此确保系统稳定性、数据安全性及存储资源的弹性扩展。


    image-20260721152657596

    swap分区操作

    image-20260723131357070

    image-20260723130015847


    磁盘配额

    image-20260721152719546

    image-20260721152732607

    Linux磁盘配额

    image-20260724075630274

    image-20260724075711441

    ==总结==:

    image-20260724080055177

    image-20260724080135354


    image-20260721152746714

    image-20260721152800528

    ==总结==:

    image-20260724083557674

    image-20260724083621966

    image-20260724083712549

    image-20260724083859548

    注意: image-20260724083943772

    Nas存储

    image-20260724085639468

    Raid磁盘阵列和逻辑卷

    raid存储和逻辑卷

    ​ 1. nas介绍

    ​ 2. Set-A 和 Set-B 的含义

    在 RAID 10 中,数据是先镜像(RAID 1),再条带(RAID 0)。set-A 和 set-B 代表了 两个不同的镜像组:

    Set-A:包含 /dev/nvme0n2 和 /dev/nvme0n4,这两块盘互为镜像,数据完全一致。

    Set-B:包含 /dev/nvme0n3 和 /dev/nvme0n5,这两块盘互为镜像,数据完全一致。

    工作逻辑:

    写入数据时,系统会把数据分成两份(条带化),一份写在 Set-A,另一份写在 Set-B。

    在 Set-A 内部,数据会同时写入nvme0n2 和 nvme0n4(镜像)。

    在 Set-B 内部,数据会同时写入nvme0n3 和nvme0n5(镜像)。

    ​ 3. 也可以用proc目录下实时运行数据查看

    [root@localhost ~]# cat /proc/mdstat

    Personalities : [raid10]

    md127 : active (auto-read-only) raid10 nvme0n5[3] nvme0n3[1] nvme0n4[2]

    ​ 41908224 blocks super 1.2 512Kchunks 2 near-copies [4/3] [_UUU]

    ​ bitmap: 1/1 pages [4KB,65536KB chunk

    ​ 4. raid5说明

    假设这一条”数据带(stripe)”是这样分布的:

    盘1: 1101   (数据A)
    盘2: 1011   (数据B)
    盘3: 0110   (校验P = A XOR B)

    这里 P = 1101 XOR 1011 = 0110,正好对上。

    场景:盘2 挂了

    阵列里少了”数据B”这一块,但盘1(数据A)和盘3(校验P)都还在。

    恢复公式:

    数据B = 数据A XOR 校验P
          = 1101 XOR 0110
          = 1011   ← 和原来的盘2数据完全一致!

    场景:盘3(校验盘那部分)挂了

    因为数据A、数据B本身都还在,校验值只是”备份用”的,直接:

    新的P = 数据A XOR 数据B = 1101 XOR 1011 = 0110

    重新算一遍填回新盘就行,不涉及”恢复”,只是”重建校验”。

    实际重建流程:

    把坏盘换成新盘(热备盘或者手动换盘)

    RAID 控制器/软件(比如 mdadm)会逐条(stripe)地对剩余盘做 XOR 运算

    把算出来的结果写入新盘对应位置,这个过程叫 rebuild,好几 TB 的盘全部重建往往要花几个到十几个小时,而且期间会持续大量读取剩余盘,这也是为什么”重建期间再坏一块盘”是 RAID 5 最大的风险点,你的盘越大,这个风险窗口就越长。

    逻辑卷

    ​ 1. 物理卷pv处于 LVM中的最底层,可以将其理解为物理磁盘、磁盘分区或者 RAID 磁盘阵列。

    ​ 2. vgcreate中的路径是pv的名字,而pv的名字必须是物理磁盘设备路径,分区路径,raid路径

    ​ 3. vmvare的rockylinux默认系统盘就是基于pv的,默认分区是MBR分区

    逻辑卷设备路径,两种路径都可以用来挂载,大家根据喜好来

    1. /dev/mapper/路径(内核设备映射器路径)

    这是 Linux 内核设备映射器(Device Mapper) 创建的真实设备节点

    格式:/dev/mapper/VGname-LVname

    特殊字符(如 -)会被转义为 –(双横线)

    例如:VG=pjw-storage,LV=lt-pjw → /dev/mapper/pjw--storage-lt--pjw

    1. /dev/VGname/LVname路径(LVM软链接)

    这是 LVM工具包(lvm2) 创建的符号链接(软链接)

    格式:/dev/VGname/LVname

    更加直观易读,没有字符转义

    例如:/dev/pjw-storage/lt-pjw

    ​ 3. 可以使用如下命令查找dmpath

    [root@192 mnt]# lvs -o lv_name,vg_name,lv_path,lv_dm_path
      LV        VG          Path                       DMPath
      extra-pjw pjw-storage /dev/pjw-storage/extra-pjw /dev/mapper/pjw--storage-extra--pjw
      lt-pjw    pjw-storage /dev/pjw-storage/lt-pjw    /dev/mapper/pjw--storage-lt--pjw
      home      rlm         /dev/rlm/home              /dev/mapper/rlm-home
      root      rlm         /dev/rlm/root              /dev/mapper/rlm-root
      swap      rlm         /dev/rlm/swap              /dev/mapper/rlm-swap

    ​

    ==总结==:

    能直接使用的硬件(硬盘、分区、RAID 阵列)都能作为 LVM 的物理卷 PV,然后 PV合并成卷组 VG,再从 VG 里切出逻辑卷 LV 来用。

    path 和 dmpath 的本质关系

    text

    /dev/rlm/root          ← path(LVM 提供的软链接)
            ↓ 指向
    /dev/mapper/rlm-root   ← dmpath(内核 device-mapper 真实设备节点)
            ↓ 对应
    Block device 253:0     ← 内核块设备号(你截图里有)
            ↓ 挂载到
    /                       ← 挂载点(目录名)

    结论:path 和 dmpath 指向同一个东西,只是表现形式不同。你用 ls -l /dev/rlm/root 就能看到它是一个软链接,指向 /dev/dm-0(或 /dev/mapper/rlm-root)。


    ✅ 你现在应该怎么理解

    • 挂载时用哪个都行:mount /dev/rlm/root /mnt 和 mount /dev/mapper/rlm-root /mnt 效果完全一样。
    • 挂载路径就是目录名:你说得对,挂载点就是一个目录(如 /、/home),用来“接入”存储设备。

    扩缩容

    先扩逻辑卷,再扩文件系统

    先缩文件系统,再缩逻辑卷

    快照逻辑卷

    应用场景,我需要备份某个应用数据,应用数据所在盘是基于逻辑卷管理的,便可以使用快照来操作

    ​ 1. 创建一个与需要备份的逻辑卷相同大小的快照逻辑卷

    ​ a. 创建过程很快,因为是CoW技术,本质这个逻辑卷记录的是从创建快照结点之后与目标盘的变化

    ​ b. 如果目标盘损坏,快照就没了,因此此操作不是备份

    ​ 2. 只读挂载逻辑卷,可以将其数据copy至其他盘

    lsof /mnt/lvol0

    fuser -mv /mnt/lvol0

    实践

    image-20260724154431789

    image-20260724154459908

    命令大全

    # 部署lv
    pvcreate /dev/nvme0n2 /dev/nvme0n3 # 设备号
    vgcreate storage /dev/nvme0n2 /dev/nvme0n3  # storage 是vg名称,自定义;/dev/nvme0n2是pv name
    lvcreate -n vo -L 120mb storage   # -n指定lv名称, -L指定单位大小, storage,从vg名为storage的vg中划分
    lvdisplay  #查看lv挂载path:   /dev/storage/vo
    mkfs.ext4 /dev/storage/vo  # 格式化位ext4
    mkdir /mnt/vo #创建挂载点
    mount /dev/storage/vo /mnt/vo # 挂载
    df -Th #查看信息
    
    # 扩容(先扩lv,再扩文件系统)
    umount /mnt/vo
    lvextend -L 290M /dev/storage/vo  #也可以使用+290m代表增加290m,如果是290m代表扩容至290m
    e2fsck -f /dev/storage/vo  #检查文件系统,此工具用于检查ext3/4文件系统,-f参数强制检查
    resize2fs /dev/storage/vo   #用于扩容ext3/4文件系统
    mount /dev/storage/vo /mnt/vo # 挂载
    df -Th  #查看
    
    # 缩容(先缩文件系统,再缩lv)
    umount /mnt/vo
    e2fsck -f /dev/storage/vo
    resize2fs /dev/storage/vo 120M   #文件系统缩至120m
    lvreduce -L 120M /dev/storage/vo  #lv缩至120m
    mount /dev/storage/vo /mnt/vo # 挂载
    df -Th  #查看
    
    #快照
    echo "hello world" > /mnt/vo/hello.txt  # 写入点文件在逻辑卷中
    lvcreate -L 120M -s -n snap /dev/storage/vo  # 创建/dev/storage/vo的快照卷,-s代表创建扩招卷,-n快照卷名称
    dd if=/dev/zero of=/mnt/vo/files count=1 bs=50M  # 往/mnt/vo/files写入50m文件,观察snap逻辑卷中的Allocated to snapshot行
    mkdir /mnt/snap
    mount -o ro /dev/storage/snap /mnt/snap
    ls -l /mnt/snap
    cat /mnt/snap/hello.txt
    # 使用快照还原
    ls -l /mnt/storage/vo
    umount /mnt/snap
    umount /mnt/vo
    lvconvert --merge /dev/storage/snap
    mount /dev/storage/vo /mnt/vo # 此时近剩hello.txt文件
    lvdisplay  # /dev/storage/snap也没了
    
    # 删除逻辑卷
    1.先umount所有设备
    2.先删除lv
    3.在删除vg
    4.最后删除pv
    
    # 给虚拟机/目录(根目录)扩容
    pvcreate /dev/nvme0n6
    vgdispaly
    vgextend rlm /dev/nvme0n6  # 给vg扩容
    df -Th  #找出/目录(根目录)对应的挂载设备
    lvdisplay /dev/mapper/rlm-root
    lvextend -L +20G /dev/rlm/root  # lvextend -l +100%FREE /dev/rlm/root #给vg中所有空间
    xfs_growfs /
    df -Th

    ==实践==:

    image-20260726142022444

    image-20260726142034037

    image-20260726143647724

    image-20260726143703613

    ==区别==:

    image-20260726153920374

    image-20260726153936867


    xfs系统新特性

    xfs_repair -n block-device  # 检查xfs文件系统,无副作用,但是要求umount block-device
    # 10.1版本后,提供了xfs_scrub,可支持在线检查,但注意检查都会占用机器性能

    Rocky Linux 10.1 Available Now – Rocky Linux

    You can now scrub mounted XFS filesystems with xfs_scrub and shrink XFS filesystems with xfs_growfs in some scenarios.

    9.7中xfs_scrub在xfsprogs-xfs_scrub包中提供了,但是是实验特性,可以体验一下

    ==总结==:

    image-20260724103502731

    image-20260724152449508