【linux学习博客作业】第三周

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

磁盘存储是文件系统的底层,文件系统是系统操作的基础,本文就介绍磁盘存储,分区、文件系统相关的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、磁盘存储术语.

1、接口类型

  • IDE:133MB/s,并行接口,早期家用电脑
  • SCSI:640MB/s,并行接口,早期服务器,并行接口因为相互影响,所以可能会因为某个接口慢,导致整
    体慢。
  • SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
  • SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而 SATA中不包
    含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行
  • USB:480MB/s
  • M.2:M.2接口(原称NGFF,Next Generation Form Factor)是专为高性能移动设备和小型化存储设计的先进接口标准,已成为现代计算机系统中最主流的存储接口之一。

2、磁盘存储协议

硬盘存储协议详解

存储协议定义了数据在存储设备与主机之间的传输规则,是决定存储系统性能的关键因素之一。以下是主流硬盘存储协议的全面解析:


2.1、基础协议

1. ATA/ATAPI (Advanced Technology Attachment)
  • 工作模式
    • PATA (并行ATA):IDE接口,44/80芯电缆
    • SATA (串行ATA):主流消费级协议
  • 版本演进
    版本速率特性
    SATA 1.01.5Gbps150MB/s
    SATA 2.03Gbps300MB/s,NCQ技术
    SATA 3.06Gbps600MB/s,TRIM支持
  • 应用场景:机械硬盘、入门级SSD
2. AHCI (Advanced Host Controller Interface)
  • 核心特点
    • 单命令队列,深度32
    • 延迟约6μs
    • 原生热插拔支持
  • 局限:无法充分发挥NVMe设备的并行性

2.2、高性能协议

1. NVMe (Non-Volatile Memory Express)
  • 架构优势

    • 基于PCIe总线,直接访问内存
    • 支持64K队列,每队列64K命令
    • 延迟低至2.8μs
  • 版本对比

    特性NVMe 1.3NVMe 1.4NVMe 2.0 (2021)
    最大带宽PCIe 4.0 x4PCIe 4.0 x4PCIe 5.0 x4
    新功能PLM电源管理ZNS分区命名空间多控制器支持
    IOPS提升1M1.5M3M+
  • 扩展协议

    • NVMe-oF:通过网络扩展NVMe(支持TCP/RDMA/FC)
    • ZNS:分区命名空间技术,优化QLC寿命
2. SCSI (Small Computer System Interface)
  • 企业级特性
    • 支持多设备级联(最大16设备)
    • 标签命令队列(TCQ)
    • 完善的错误恢复机制
  • 衍生协议
    类型速率应用领域
    SAS-312Gbps企业级硬盘阵列
    iSCSI10/25/100GIP SAN存储
    FCoE10/40/100G融合网络存储

2.3、协议性能对比

参数AHCINVMeSCSI
最大队列深度1队列/32命令64K队列/64K命令256队列
延迟6μs<3μs4μs
最大吞吐量600MB/s16GB/s24Gbps(SAS-4)
CPU占用率较高极低中等
典型接口SATAPCIe/M.2/U.2SAS/FC

3、机械硬盘

3.1基本结构

  1. 磁盘(Drive/Disk)

    • 用于长期存储数据的物理设备,分为机械硬盘(HDD)和固态硬盘(SSD)
    • 特点:非易失性存储,容量大,速度较内存慢
  2. 扇区(Sector)

    • 磁盘的最小物理存储单元,传统硬盘通常为512字节,现代高级格式硬盘多为4KB
    • 操作系统读写磁盘的基本单位
  3. 磁道(Track)

    • 磁盘盘片上的同心圆环,数据存储在磁道上
    • 每个磁道被划分为多个扇区
  4. 柱面(Cylinder)

    • 所有盘面上相同半径的磁道组成的圆柱形
    • 磁盘寻址时的重要概念

3.2 性能相关术语

  1. 寻道时间(Seek Time)

    • 磁头移动到目标磁道所需的时间
    • 机械硬盘的关键性能指标之一
  2. 旋转延迟(Rotational Latency)

    • 盘片旋转使目标扇区到达磁头下方所需的时间
    • 平均为盘片旋转半周的时间
  3. 传输速率(Transfer Rate)

    • 数据从磁盘传输到内存的速率
    • 包括内部传输率(磁头到磁盘缓存)和外部传输率(缓存到内存)
  4. IOPS(Input/Output Operations Per Second)

    • 每秒输入/输出操作数
    • 衡量存储设备性能的重要指标

3.3 寻址方式

*Cylinder-Head-Sector 柱面-磁头-扇区)*也称为3D模式

  • 它通过提供柱面号、磁头号和扇区号来唯一确定一个扇区的位置。
    • CHS采用 24 bit位寻址
    • 其中前10位表示cylinder,中间8位表示head,后面6位表示sector
    • 最大寻址空间 8 GB 【2^24*512/1024/1024/1024 = 8G】
    • 是硬盘最早采用的寻址模式之一。
      LBA (logical block addressing)
  • LBA方式使用逻辑块号来寻址磁盘上的数据。逻辑块号是一个连续的、线性的编号,从0开始,每个逻
    辑块的大小通常为512字节(但也可能根据系统或文件系统的不同而有所变化)。LBA方式通过直接指定逻辑块
    号来定位数据。
    • LBA是一个整数,通过转换成 CHS 格式完成磁盘具体寻址
    • ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到
      128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes
    • 它基于扇区的线性编号来定位数据,不受柱面、磁头和扇区的限制。
    • 在现代硬盘中,LBA寻址方式已经成为主流。

4、SSD

SSD基本原理深度解析

SSD(Solid-State Drive,固态硬盘)是一种基于半导体存储技术的高速存储设备,其核心原理与机械硬盘(HDD)存在本质差异。

4.1、硬件架构组成

1. 核心组件
组件功能描述
NAND闪存芯片数据存储单元,由浮栅晶体管构成,通过电荷存储实现非易失性存储
主控制器执行FTL算法、管理数据读写、实现磨损均衡/垃圾回收等核心功能
DRAM缓存高速缓冲映射表(部分高端型号配备),加速逻辑地址到物理地址的转换
接口电路支持SATA/PCIe/NVMe等协议,实现与主机的物理连接
2. 对比HDD机械结构
特性HDDSSD
存储介质磁性盘片NAND闪存芯片
机械部件磁头/马达/盘片无移动部件
访问方式机械寻道电子寻址
抗震能力脆弱(运行中<5G)强(可承受1500G冲击)

4.1、存储介质:NAND闪存

1. 存储单元类型
类型每单元位数特点典型寿命(P/E)应用场景
SLC1 bit高速度、高耐久、高成本50,000-100,000企业级/军工
MLC2 bits平衡性能与成本3,000-10,000高端消费级
TLC3 bits高密度、低成本500-3,000主流消费级
QLC4 bits超高密度、低耐久100-1,000大容量存储
3D NAND多层堆叠垂直堆叠技术提升容量和可靠性比平面结构高2-3倍全领域普及
2. 物理结构特性
  • 页(Page):基本编程单位(典型16KB)
  • 块(Block):基本擦除单位(包含128-256页,典型4MB)
  • 擦写限制:每个块有固定擦除次数(P/E Cycle)

4.2、工作原理与关键技术

1. 数据存储原理

  • 写入过程
    1. 控制器接收逻辑地址(LBA)
    2. FTL映射到物理地址(PBA)
    3. 向目标页注入电子(编程)
  • 读取过程:通过感应晶体管阈值电压判断存储状态
  • 擦除要求:必须先擦除整个块才能重新写入
2. 核心控制技术
技术名称功能描述
FTL映射逻辑地址到物理地址的动态转换,支持动态磨损均衡
磨损均衡(WL)通过动态分配写入位置,平衡各闪存块的擦写次数(算法:动态/静态/全局)
垃圾回收(GC)合并有效数据页,释放无效块(影响:写入放大率WA)
ECC纠错采用LDPC/BCH等算法纠正比特错误(QLC需要>1200bit/1KB纠错能力)
OP预留空间保留7-28%的物理空间提升性能与寿命(企业级OP通常>20%)

3、SSD vs HDD关键差异总结
对比维度SSDHDD
启动时间<1秒10-30秒
随机访问微秒级毫秒级(需寻道+旋转)
功耗待机0.1W,满载5W待机5W,满载10W
噪音30-50dB
抗震性1500G冲击耐受运行中易损坏
容量成本$0.08/GB (QLC)$0.03/GB (8TB HDD)

5、如何快速清除数据

方法适用设备特点
mkfs 格式化HDD/SSD快速创建文件系统,旧数据可能残留
dd 覆写HDD单次/多次覆写,耗时长
shredHDD多次覆写,符合安全标准
ATA 安全擦除SSD底层擦除,快速且不损伤 SSD
TRIM/blkdiscardSSD依赖设备支持,快速清理可用空间
加密密钥删除HDD/SSD高效安全,需提前加密

二、MBR,GPT结构区别

以下是 MBR 和 GPT 分区方案的核心区别总结,以简洁清晰的对比表格和关键点形式呈现:


1.MBR(主引导记录)

主引导记录(MBR,Master Boot Record)是采用MBR分区表的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区,也叫做MBR扇区。

经典主引导记录布局
请添加图片描述

[22:17:30 root@leige ~]#hexdump -n 512 -Cv /dev/sda | tail -6      #完整显示磁盘第一个扇区并以规范的十六进制和 ASCII 码形式完整输出
000001b0  00 00 00 00 00 00 00 00  d6 47 cd 8c 00 00 80 04  |.........G......|
000001c0  01 04 83 fe c2 ff 00 08  00 00 00 00 20 00 00 fe  |............ ...|     #sda1分区表信息
000001d0  c2 ff 8e fe c2 ff 00 08  20 00 00 f8 df 18 00 00  |........ .......|     #sda2分区表信息
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
[22:06:12 root@leige ~]#lsblk  
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    0  200G  0 disk
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0  199G  0 part
  ├─rl-root 253:0    0   70G  0 lvm  /
  ├─rl-swap 253:1    0    2G  0 lvm  [SWAP]
  └─rl-home 253:2    0  127G  0 lvm  /home
sr0          11:0    1 10.2G  0 rom

从上面可知sda只有sda1和sda2两个主分区,所以在MBR所在扇区处,前两个分区信息字节有数据,而后两个分区表项字节为全0

2.GPT(全局唯一标识分区表)

  1. 在GPT分区表的最开头,出于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR也叫做保护性MBR(Protective MBR)。
  2. 分区表头(LBA 1)定义了硬盘的可用空间以及组成分区表的项的大小和数量。
  3. LBA 2–33的位置存放的是分区表项。

请添加图片描述

3.MBR vs GPT 核心区别对比表

对比项MBR(主引导记录)GPT(GUID分区表)
最大磁盘容量2 TB(32位LBA寻址)9.4 ZB(64位LBA寻址,实际支持256TB+)
最大分区数量4个主分区(或3主分区+1扩展分区+无限逻辑分区)128个主分区(Windows默认限制)
数据安全性❌ 无备份和校验机制,易被病毒破坏✅ 分区表双备份 + CRC32校验,支持自动修复
兼容性✅ 兼容所有旧版BIOS系统❗ 需UEFI固件(Windows Vista及以上支持)
启动方式仅支持Legacy BIOS启动支持UEFI启动(Windows 8/10/11必选)
分区表位置磁盘首扇区(仅1份,无备份)磁盘首尾各存1份分区表(冗余设计)
适用场景旧系统(如Win7及更早)、小容量硬盘新硬件、大容量硬盘(>2TB)、多系统启动

4.关键区别详解

  1. 容量限制

    • MBR:32位寻址,最大支持2TB磁盘。超过2TB时,剩余空间无法识别。
    • GPT:64位寻址,理论支持9.4 ZB(1 ZB = 10亿TB),实际受操作系统限制(如Windows支持256TB)。
  2. 分区管理

    • MBR:需通过扩展分区管理逻辑分区,复杂且易出错。
    • GPT:直接支持128个主分区,无需扩展分区,管理更简单。
  3. 安全与可靠性

    • MBR:无校验机制,分区表损坏可能导致数据全损。
    • GPT:通过CRC校验检测错误,备份分区表可自动修复损坏。
  4. 启动兼容性

    • MBR:仅支持Legacy BIOS启动模式。
    • GPT:必须搭配UEFI启动(Windows 11强制要求)。
  5. 现代系统支持

    • Windows:从Vista开始支持GPT,但Win8/10/11系统盘必须用GPT(UEFI模式)。
    • macOS/Linux:默认使用GPT分区。

总结

  • MBR:旧硬件、小容量盘、Legacy BIOS系统。
  • GPT:新电脑、大容量硬盘(>2TB)、UEFI启动、多分区需求。
  • 未来趋势:GPT将全面取代MBR(微软已逐步淘汰Legacy启动)。

三、分区,文件系统管理。

1.查看分区信息

  • fdisk -l 显示分区列表
[22:46:23 root@leige ~]#fdisk -l
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors   #磁盘大小 字节 扇区数
Disk model: VMware Virtual S                        #磁盘型号
Units: sectors of 1 * 512 = 512 bytes               #扇区包含字节数     
Sector size (logical/physical): 512 bytes / 512 bytes  #扇区大小
I/O size (minimum/optimal): 512 bytes / 512 bytes     #IO大小
Disklabel type: dos           #磁盘标签类型这里dos是MBR分区
Disk identifier: 0x8ccd47d6   #磁盘标识符

Device     Boot   Start       End   Sectors  Size Id Type
/dev/sda1  *       2048   2099199   2097152    1G 83 Linux
/dev/sda2       2099200 419430399 417331200  199G 8e Linux LVM
.......
  • cat /proc/partitions 显示内核中所有磁盘分区的概要信息。
[22:50:58 root@leige ~]#cat /proc/partitions          #查看内核系统中所有已知的磁盘分区信息。
major minor  #blocks  name        #主设备号  次设备号  分区大小   分区名称

   8        0  209715200 sda
   8        1    1048576 sda1
   8        2  208665600 sda2
  11        0   10660544 sr0
 253        0   73400320 dm-0
 253        1    2113536 dm-1
 253        2  133148672 dm-2
  • lsblk以树状结构显示系统中的块设备,能够清晰地展示磁盘、分区以及它们之间的关系
[23:00:22 root@leige ~]#lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    0  200G  0 disk
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0  199G  0 part
  ├─rl-root 253:0    0   70G  0 lvm  /
  ├─rl-swap 253:1    0    2G  0 lvm  [SWAP]
  └─rl-home 253:2    0  127G  0 lvm  /home
sr0          11:0    1 10.2G  0 rom

2.管理分区

虚拟机添加硬盘,Rocky9系统在线扫描更新块设备,可使用 “- - -” 覆盖/sys/class/scsi_host/host*/scan文件快速识别

for i in /sys/class/scsi_host/host*/scan; do echo "- - -" >"$i";done
  • 创建分区
 [23:27:21 root@leige ~]#fdisk /dev/sdb

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xc99229cb.

Command (m for help): n                #输入n 创建新分区
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p                  #输入"p "选择主分区表类型
Partition number (1-4, default 1): 1   #输入"1 "选择分区编号1  
First sector (2048-20971519, default 2048):    #输入"回车"默认2048为起始扇区
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): +2G    #输入 "+2G" 创建大小为2G的分区空间

Created a new partition 1 of type 'Linux' and of size 2 GiB.

Command (m for help): p        #输入"p "显示分区信息
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc99229cb

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4196351 4194304   2G 83 Linux

Command (m for help): w          #输入" w" 写入分区信息,使之生效
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
  • 删除分区
[23:29:41 root@leige ~]#fdisk /dev/sdb

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d    #输入 d  删除分区,默认第1个编号分区
Selected partition 1
Partition 1 has been deleted.

Command (m for help): p   #显示分区
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc99229cb

Command (m for help): w   #写入保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

非交互模式下管理分区

以上面创建2G分区为例,echo 参数“n” “p” “+2G” 以及“\n”回车利用管道符 | 传递给fdisk命令直接完成操作;

echo -e 'n\np\n\n\n+2G\nw' |fdisk /dev/sdb
  • 查看文件系统

查看当前内核支持的文件系统(ext4 xfs fat nfs 等)

[23:45:15 root@leige ~]#ls /lib/modules/$(uname -r)/kernel/fs
afs                ceph   exfat  fscache  isofs  mbcache.ko.xz  nfs_common  overlayfs  squashfs
binfmt_misc.ko.xz  dlm    ext4   fuse     jbd2   netfs          nfsd        pstore     udf
cachefiles         erofs  fat    gfs2     lockd  nfs            nls         smb        xfs

linux常用文件系统
ext4 ext 文件系统的最新版。有很多新的特性,包括纳秒级时间戳、巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
xfs SGI,支持最大8EB的文件系统
swap 交换分区专用的文件系统
iso9660 光盘文件系统

lsblk -f 命令查看

[23:54:36 root@leige ~]#lsblk -f
NAME  FSTYPE FSVER LABEL           UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
│     xfs                          3f9c107a-c618-422a-ab8b-39e4a519599d    656.5M    32% /boot
└─sda2
      LVM2_m LVM2                  I8lg5Q-fVHj-2r7C-QWCt-s0xY-evxE-GfO34f
  ├─rl-root
  │   xfs                          72965a08-a464-4d85-a0b4-73349ffe1b19     62.4G    11% /
  ├─rl-swap
  │   swap   1                     36592f75-4671-47bf-b66f-bd6a5142f29c                  [SWAP]
  └─rl-home
      xfs                          31f9f635-0ba7-43f6-9a65-8f24674cfdb6      126G     1% /home
sdb
└─sdb1

sr0   iso966 Jolie Rocky-9-4-x86_64-dvd
                                   2024-05-05-01-12-25-00

df命令查看

[00:00:00 root@leige ~]#df -Th  #查看磁盘的文件系统信息
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs               tmpfs     872M     0  872M   0% /dev/shm
tmpfs               tmpfs     349M  7.0M  342M   2% /run
/dev/mapper/rl-root xfs        70G  7.5G   63G  11% /
/dev/sda1           xfs       960M  304M  657M  32% /boot
/dev/mapper/rl-home xfs       127G  946M  126G   1% /home
tmpfs               tmpfs     175M   52K  175M   1% /run/user/42
tmpfs               tmpfs     175M   36K  175M   1% /run/user/0
[00:02:35 root@leige ~]#df /dev/sdb   #指定磁盘查看文件系统信息
Filesystem     1K-blocks  Used Available Use% Mounted on
devtmpfs            4096     0      4096   0% /dev
[00:03:37 root@leige ~]#df -t xfs    #指定文件系统类型查看
Filesystem          1K-blocks    Used Available Use% Mounted on
/dev/mapper/rl-root  73334784 7852088  65482696  11% /
/dev/sda1              983040  310780    672260  32% /boot
/dev/mapper/rl-home 133083136  968148 132114988   1% /home
  • 管理文件系统

创建文件系统

 [00:08:28 root@leige ~]#mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: ce6e119b-6fc2-4517-a808-62a351b79413
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

[00:08:46 root@leige ~]#lsblk -f /dev/sdb
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb
└─sdb1 ext4   1.0         ce6e119b-6fc2-4517-a808-62a351b7941

mount命令挂载文件系统

[00:10:14 root@leige ~]#mount /dev/sdb1 -o ro /mnt   # 挂载只读的ext4文件系统
[00:14:45 root@leige ~]#lsblk -f /dev/sdb1  
NAME FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb1 ext4   1.0         ce6e119b-6fc2-4517-a808-62a351b79413    1.8G     0% /mnt  #挂载点/mnt 生效

umount命令卸载

[00:15:03 root@leige ~]#umount /mnt  #卸载挂载点/mnt 
[00:18:00 root@leige ~]#lsblk -f /dev/sdb1
NAME FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb1 ext4   1.0         ce6e119b-6fc2-4517-a808-62a351b79413

四、raid 0, 1, 5, 10, 01的工作原理。

1、raid各级别工作原理

RAID JBOD
RAID JBOD的意思是Just a Bunch Of Disks,是将多块硬盘串联起来组成一个大的存储设备,从某种意义上说这种类型不被算作RAID,在维基百科里JBOD同时也被归入非RAID架构。RAID JBOD将所有的磁盘串联成一个单一的,容量是使用的磁盘的总和的存储设备供操作系统使用。在这里插入图片描述
RAID0
RAID 0又称为条带化(Stripe)或分条(Striping),代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个硬盘上存取。

RAID0数据存储原理

RAID1
RAID 1又称镜像(Mirror或Mirroring),即每个工作盘都有一个镜像盘,每次写数据时必须同时写入镜像盘,读数据时同时从工作盘和镜像盘读出。当更换故障盘后,数据可以重构,恢复工作盘正确数据。

在这里插入图片描述
RAID3
RAID3(带奇偶校验码的并行传送)。这种校验码与RAID2不同,只能查错不能纠错。它访问数据时一次处理一个带区,这样可以提高读取和写入速度。校验码在写入数据时产生并保存在另一个磁盘上。需要实现时用户必须要有三个以上的驱动器,写入速率与读出速率都很高,因为校验位比较少,因此计算时间相对而言比较少。用软件实现RAID控制将是十分困难的,控制器的实现也不是很容易。它主要用于图形(包括动画)等要求吞吐率比较高的场合。不同于RAID 2,RAID 3使用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据。如果奇偶盘失效,则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。

在这里插入图片描述
RAID5
RAID 5是一种存储性能、数据安全和存储成本兼顾的存储解决方案。为保障存储数据的可靠性,采用循环冗余校验方式,并将校验数据分散存储在RAID的各成员盘上。当RAID的某个成员盘出现故障时,通过其他成员盘上的数据可以重新构建故障硬盘上的数据。

在这里插入图片描述

RAID6
在RAID 5的基础上,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块硬盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的硬盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”较差。

如图所示,PA为数据块A0、A1、A2的第一个校验信息块,QA为第二个校验信息块;PB为数据块B0、B1、B2的第一个校验信息块,QB为第二个校验信息块,以此类推。
在这里插入图片描述

RAID10
RAID10(高可靠性与高效磁盘结构)。这种结构无非是一个带区结构加一个镜像结构,因为两种结构各有优缺点,因此可以相互补充,达到既高效又高速的目的。
RAID01
从RAID 0+1名称上便可以看出是RAID0与RAID1的结合体。在单独使用RAID 1也会出现类似单独使用RAID 0那样的问题,即在同一时间内只能向一块磁盘写入数据,不能充分利用所有的资源。为了解决这一问题,可以在磁盘镜像中建立带区集。因为这种配置方式综合了带区集和镜像的优势,所以被称为RAID 0+1。把RAID0和RAID1技术结合起来,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力,允许一个以下磁盘故障,而不影响数据可用性,并具有快速读/写能力。RAID0+1要在磁盘镜像中建立带区集至少4个硬盘。

在这里插入图片描述

2、总结RAID级别特点

在这里插入图片描述

五、LVM的基本原理,LVM的创建和磁盘扩容等简单实践。

1、基本原理

LVM(Logical Volume Manager)即逻辑卷管理器,是Linux系统下对磁盘分区进行管理的一种机
制。LVM在硬盘分区和文件系统之间添加了一个逻辑层,为文件系统屏蔽了下层的磁盘分区布局,提供了一个
抽象的卷组,用户可以在这个卷组上创建文件系统。

LVM(Logical Volume Manager,逻辑卷管理)是 Linux 系统下用于管理磁盘存储的一种高级工具。它通过抽象物理存储设备,提供更灵活的磁盘管理方式,支持动态调整存储空间、合并多个磁盘空间、创建快照等功能。以下是 LVM 的核心概念和工作原理:

核心概念

  1. 物理卷(Physical Volume, PV)

    • 物理磁盘或分区(如 /dev/sda1/dev/sdb)通过 pvcreate 命令初始化为 LVM 可管理的物理卷。
    • 是 LVM 存储的底层物理单元。
  2. 卷组(Volume Group, VG)

    • 多个物理卷(PV)可以合并成一个卷组(VG),形成一个统一的存储池。
    • 卷组是逻辑卷(LV)的容器,空间按需分配给逻辑卷。
  3. 逻辑卷(Logical Volume, LV)

    • 从卷组(VG)中划分出的逻辑存储单元,类似于传统分区,但更灵活。
    • 逻辑卷可以直接格式化为文件系统(如 ext4、xfs)并挂载使用。
  4. 物理扩展块(Physical Extent, PE)

    • LVM 的最小存储单元,默认为 4MB。物理卷和逻辑卷的空间分配以 PE 为单位。

LVM 的层次结构

物理磁盘(如 /dev/sda)  
  → 物理卷(PV)  
    → 合并到卷组(VG)  
      → 划分出逻辑卷(LV)  
        → 格式化为文件系统并挂载(如 /home)

LVM 的核心优势

  1. 动态调整大小

    • 逻辑卷(LV)和卷组(VG)可以在线(无需卸载)扩展或缩减。
    • 例如:当 /home 空间不足时,可直接扩展其对应的逻辑卷。
  2. 存储池化

    • 将多个物理磁盘/分区合并为单一卷组,突破单个磁盘容量限制。
  3. 快照(Snapshot)

    • 创建逻辑卷的瞬时快照,用于备份或测试,避免数据损坏风险。
  4. 灵活的迁移与合并

    • 支持将数据迁移到新磁盘,或合并不同磁盘的空间。
  5. 支持条带化、镜像

    • 类似 RAID 的功能(需结合 mdadm 等工具)。

适用场景

  • 需要动态调整存储空间(如数据库、虚拟化环境)。
  • 整合多块磁盘的空间。
  • 需要频繁备份或测试系统更新(快照功能)。

注意事项

  • 备份重要数据:LVM 操作有风险(如缩减空间可能导致数据丢失)。
  • 文件系统兼容性:调整逻辑卷大小后,需同步调整文件系统(如 resize2fs)。
  • 性能:复杂操作可能引入轻微性能开销。

LVM 是 Linux 存储管理的强大工具,适合需要灵活性和可扩展性的场景,但需谨慎操作以避免数据风险。

2.实践操作

2.1创建实践

虚拟机新增两块硬盘,并分区

[00:31:16 root@leige ~]#lsblk -f /dev/sdb /dev/sdc
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb
├─sdb1 ext4   1.0         ce6e119b-6fc2-4517-a808-62a351b79413
├─sdb2
├─sdb3
└─sdb4
sdc
├─sdc1
└─sdc2

创建PV

[00:31:24 root@leige ~]#pvcreate /dev/sdb2 /dev/sdc1   
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdc1" successfully created.

查看PV

[00:31:33 root@leige ~]#pvs
  PV         VG Fmt  Attr PSize    PFree
  /dev/sda2  rl lvm2 a--  <199.00g    0
  /dev/sdb2     lvm2 ---     2.00g 2.00g
  /dev/sdc1     lvm2 ---     4.00g 4.00g
[00:31:39 root@leige ~]#pvdisplay /dev/sdb2
  "/dev/sdb2" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               hDXRti-LgnJ-RFf2-dRXC-OUVt-noHs-5tmUOd

[00:34:07 root@leige ~]#pvdisplay /dev/sdc1
  "/dev/sdc1" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               4.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               9Yiodc-L2GH-u0Dn-c73o-IBA4-aZAO-4ibZeY

创建VG

[00:34:25 root@leige ~]#vgcreate -s 16M testvg /dev/sdb2 /dev/sdc1
  Volume group "testvg" successfully created
[00:35:26 root@leige ~]#vgs
  VG     #PV #LV #SN Attr   VSize    VFree
  rl       1   3   0 wz--n- <199.00g     0
  testvg   2   0   0 wz--n-   <5.97g <5.97g

查看VG

[00:35:36 root@leige ~]#vgdisplay testvg
  --- Volume group ---
  VG Name               testvg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <5.97 GiB
  PE Size               16.00 MiB
  Total PE              382
  Alloc PE / Size       0 / 0
  Free  PE / Size       382 / <5.97 GiB
  VG UUID               pH4Mm9-JX1h-ekOv-cTyO-kix0-1d2S-23RcZe

创建LV

[00:36:12 root@leige ~]#lvcreate -l 100 -n lv1 testvg  #从 testvg 中创建lv1,大小为 100个PE
  Logical volume "lv1" created.
[00:37:45 root@leige ~]#lvcreate -L 1G -n lv2 testvg   #创建lv2,大小为5G
  Logical volume "lv2" created.
[00:38:48 root@leige ~]#lvcreate -l 20%free -n lv3 testvg  #创建lv3,大小为剩下可用PE数量的 20%
  Logical volume "lv3" created.
[00:39:12 root@leige ~]#lvcreate -l 10%VG -n lv4 testvg    #创建lv4,大小为指定vg的10%
  Logical volume "lv4" created.

查看LV

[00:39:17 root@leige ~]#lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home rl     -wi-ao---- 126.98g
  root rl     -wi-ao----  70.00g
  swap rl     -wi-ao----  <2.02g
  lv1  testvg -wi-a-----   1.56g
  lv2  testvg -wi-a-----   1.00g
  lv3  testvg -wi-a----- 688.00m
  lv4  testvg -wi-a----- 608.00m
[00:39:23 root@leige ~]#lvscan
  ACTIVE            '/dev/testvg/lv1' [1.56 GiB] inherit
  ACTIVE            '/dev/testvg/lv2' [1.00 GiB] inherit
  ACTIVE            '/dev/testvg/lv3' [688.00 MiB] inherit
  ACTIVE            '/dev/testvg/lv4' [608.00 MiB] inherit
  ACTIVE            '/dev/rl/swap' [<2.02 GiB] inherit
  ACTIVE            '/dev/rl/home' [126.98 GiB] inherit
  ACTIVE            '/dev/rl/root' [70.00 GiB] inherit

创建挂载目录

[00:39:38 root@leige ~]#mkdir /mount/lvm -p

格式化lv1的文件系统

[00:40:33 root@leige ~]#mkfs.ext4 /dev/testvg/lv1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 409600 4k blocks and 102544 inodes
Filesystem UUID: da485b3c-f9ff-40ea-a6f8-f29819b5bb01
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

挂载lv1到 /mount/lvm/

[00:40:52 root@leige ~]#mount /dev/testvg/lv1 /mount/lvm/
[00:41:11 root@leige ~]#mount | grep lvm
/dev/mapper/testvg-lv1 on /mount/lvm type ext4 (rw,relatime,seclabel)

2.2 扩容实践

扩容前查看VG

[00:54:28 root@leige ~]#vgs
  VG     #PV #LV #SN Attr   VSize    VFree
  rl       1   3   0 wz--n- <199.00g    0
  testvg   2   4   0 wz--n-   <5.97g 2.14g

扩容VG

[00:54:49 root@leige ~]#vgextend testvg /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
  Volume group "testvg" successfully extended
[00:55:10 root@leige ~]#vgextend testvg /dev/sdbc2
  No device found for /dev/sdbc2.
[00:55:31 root@leige ~]#vgextend testvg /dev/sdc2
  Physical volume "/dev/sdc2" successfully created.
  Volume group "testvg" successfully extended
[00:55:37 root@leige ~]#vgs
  VG     #PV #LV #SN Attr   VSize    VFree
  rl       1   3   0 wz--n- <199.00g     0
  testvg   4   4   0 wz--n-  <11.94g <8.11g    #容量相比之前变大

LV扩容前查看

[00:55:42 root@leige ~]#lvs /dev/testvg/lv1
  LV   VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  testvg -wi-ao---- 1.56g
[00:56:10 root@leige ~]#df -h /mount/lvm/
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/testvg-lv1  1.6G   24K  1.5G   1% /mount/lvm

LV扩容

[00:56:36 root@leige ~]#lvextend -L +1G /dev/testvg/lv1
  Size of logical volume testvg/lv1 changed from 1.56 GiB (100 extents) to 2.56 GiB (164 extents).
  Logical volume testvg/lv1 successfully resized.

文件系统扩容

[00:56:50 root@leige ~]#resize2fs /dev/testvg/lv1
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/testvg/lv1 is mounted on /mount/lvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/testvg/lv1 is now 671744 (4k) blocks long.

扩容验证

[00:57:06 root@leige ~]#lvs /dev/testvg/lv1
  LV   VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  testvg -wi-ao---- 2.56g
[00:57:36 root@leige ~]#df -h /mount/lvm/
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/testvg-lv1  2.5G   24K  2.4G   1% /mount/lvm

2.3 删除实践

卸载lvm

[00:58:39 root@leige ~]#umount /mount/lvm

删除lv1逻辑卷

[01:08:48 root@leige ~]#lvremove /dev/testvg/lv1
Do you really want to remove active logical volume testvg/lv1? [y/n]: y
  Logical volume "lv1" successfully removed.
[01:09:02 root@leige ~]#lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home rl     -wi-ao---- 126.98g
  root rl     -wi-ao----  70.00g
  swap rl     -wi-ao----  <2.02g
  lv2  testvg -wi-a-----   1.00g
  lv3  testvg -wi-a----- 688.00m
  lv4  testvg -wi-a----- 608.00m

删除VG

[01:09:07 root@leige ~]#vgremove testvg
Do you really want to remove volume group "testvg" containing 3 logical volumes? [y/n]: y
Do you really want to remove active logical volume testvg/lv2? [y/n]: y
  Logical volume "lv2" successfully removed.
Do you really want to remove active logical volume testvg/lv3? [y/n]: y
  Logical volume "lv3" successfully removed.
Do you really want to remove active logical volume testvg/lv4? [y/n]: y
  Logical volume "lv4" successfully removed.
  Volume group "testvg" successfully removed
[01:09:29 root@leige ~]#vgs
  VG #PV #LV #SN Attr   VSize    VFree
  rl   1   3   0 wz--n- <199.00g    0

查看PV

[01:09:34 root@leige ~]#pvs
  PV         VG Fmt  Attr PSize    PFree
  /dev/sda2  rl lvm2 a--  <199.00g    0
  /dev/sdb2     lvm2 ---     2.00g 2.00g
  /dev/sdb3     lvm2 ---     2.00g 2.00g
  /dev/sdc1     lvm2 ---     4.00g 4.00g
  /dev/sdc2     lvm2 ---     4.00g 4.00g

删除PV

[01:09:50 root@leige ~]#pvremove /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2
  Labels on physical volume "/dev/sdb2" successfully wiped.
  Labels on physical volume "/dev/sdb3" successfully wiped.
  Labels on physical volume "/dev/sdc1" successfully wiped.
  Labels on physical volume "/dev/sdc2" successfully wiped.
[01:10:26 root@leige ~]#pvs
  PV         VG Fmt  Attr PSize    PFree
  /dev/sda2  rl lvm2 a--  <199.00g    0

2.4 快照实践

环境准备

[01:23:29 root@leige ~]#cp /etc/fstab /mount/lvm/  
[01:23:32 root@leige ~]#ls /mount/lvm
fstab  lost+found
[01:23:43 root@leige ~]#touch /mount/lvm/test.file1
[01:24:14 root@leige ~]#mkdir /mount/lvm_snapshot
[01:24:20 root@leige ~]#ls /mount/lvm
fstab  lost+found  test.file1
[01:24:35 root@leige ~]#ls -d /mount/lvm*
/mount/lvm  /mount/lvm_snapshot

查看lv1逻辑卷

[01:24:36 root@leige ~]#lvs /dev/testvg/lv1
  LV   VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  testvg -wi-ao---- 2.56g

为逻辑卷创建100M的快照 只读

[01:24:50 root@leige ~]#lvcreate -n lv1_snapshot -s -L 100M -p r /dev/testvg/lv1
  Rounding up size to full physical extent 112.00 MiB
  Logical volume "lv1_snapshot" created.
[01:25:19 root@leige ~]#lvs /dev/testvg/lv1_snapshot
  LV           VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1_snapshot testvg sri-a-s--- 112.00m      lv1    0.01
[01:25:28 root@leige ~]#lvdisplay /dev/testvg/lv1_snapshot
  --- Logical volume ---
  LV Path                /dev/testvg/lv1_snapshot
  LV Name                lv1_snapshot
  VG Name                testvg
  LV UUID                GiUn3r-hLud-iW1M-zmkG-0h8F-EVvs-eXFC7c
  LV Write Access        read only
  LV Creation host, time leige.study.org, 2025-05-07 01:25:19 +0800
  LV snapshot status     active destination for lv1
  LV Status              available
  # open                 0
  LV Size                2.56 GiB
  Current LE             164
  COW-table size         112.00 MiB
  COW-table LE           7
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:9

挂载快照并与原逻辑卷对比

[01:26:31 root@leige ~]#mount /dev/testvg/lv1_snapshot /mount/lvm_snapshot/
mount: /mount/lvm_snapshot: WARNING: source write-protected, mounted read-only.
[01:26:36 root@leige ~]#ll -i /mount/lvm
total 20
12 -rw-r--r--. 1 root root   655 May  7 01:23 fstab
11 drwx------. 2 root root 16384 May  7 00:40 lost+found
13 -rw-r--r--. 1 root root     0 May  7 01:24 test.file1
[01:26:47 root@leige ~]#ll -i /mount/lvm_snapshot/
total 20
12 -rw-r--r--. 1 root root   655 May  7 01:23 fstab
11 drwx------. 2 root root 16384 May  7 00:40 lost+found
13 -rw-r--r--. 1 root root     0 May  7 01:24 test.file1

修改原逻辑卷内容并与快照对比

[01:26:55 root@leige ~]#echo test-edit-lvm >> /mount/lvm/fstab
[01:27:23 root@leige ~]#rm -r /mount/lvm/test.file1
[01:27:33 root@leige ~]#ll -i /mount/lvm_snapshot/
total 20
12 -rw-r--r--. 1 root root   655 May  7 01:23 fstab
11 drwx------. 2 root root 16384 May  7 00:40 lost+found
13 -rw-r--r--. 1 root root     0 May  7 01:24 test.file1
[01:27:48 root@leige ~]#ll -i /mount/lvm
total 20
12 -rw-r--r--. 1 root root   669 May  7 01:27 fstab
11 drwx------. 2 root root 16384 May  7 00:40 lost+found

取消挂载

[01:27:56 root@leige ~]#umount /mount/lvm
[01:28:03 root@leige ~]#umount /mount/lvm_snapshot

从快照中恢复数据

[01:28:07 root@leige ~]#lvconvert --merge /dev/testvg/lv1_snapshot
  Merging of volume testvg/lv1_snapshot started.
  testvg/lv1: Merged: 100.00%

挂载原逻辑卷并验证

[01:28:29 root@leige ~]#mount /dev/testvg/lv1 /mount/lvm
[01:28:30 root@leige ~]#ll -i /mount/lvm
total 20
12 -rw-r--r--. 1 root root   655 May  7 01:23 fstab
11 drwx------. 2 root root 16384 May  7 00:40 lost+found
13 -rw-r--r--. 1 root root     0 May  7 01:24 test.file1
[01:28:35 root@leige ~]#tail -n2 /mount/lvm/fstab
/dev/mapper/rl-home     /home                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0

六、总结变量命名规则,不同类型变量。

变量命名规则是在编程中非常重要的,它能够帮助程序员更好地组织和管理代码。不同类型的变量有不同的使用方式:

  1. 环境变量:环境变量是在操作系统中设置的全局变量,通常用于存储系统级别的配置信息或运行时环境信息。在Linux系统中,可以使用export命令来声明环境变量,命名一般使用大写字符,例如:PATH、HOME。

  2. 位置变量:位置变量是在脚本或程序中根据传入的参数而生成的变量,通常包括$1、$2、$3等,用于接收用户在执行脚本时传入的参数。位置变量的命名通常是按照参数的顺序命名,例如$1代表第一个参数,$2代表第二个参数,以此类推。

  3. 只读变量:只读变量是指在声明后不能被修改的变量,通常用readonly命令来申明。只读变量的命名遵循普通变量的命名规则,但通常会使用全大写来表示其只读的特性,例如:PI=3.14。

  4. 局部变量:局部变量是指在特定作用域内有效的变量,通常在函数或脚本中声明并使用。局部变量的命名应具有描述性,并尽量避免与全局变量重名,以免造成混淆。

  5. 状态变量:状态变量用于记录程序或系统的状态信息,通常用于控制程序的流程或处理特定逻辑。状态变量的命名应具有描述性,清晰表达其所代表的状态,以便程序员更好地理解和维护代码。

总的来说,无论是何种类型的变量,在命名时都应该遵循以下规则:

  • 使用有意义的变量名,能够清晰地表达变量的用途和含义。
  • 使用驼峰命名法或下划线命名法来命名变量。
  • 避免使用特殊字符和保留关键字。
  • 在需要时添加注释来说明变量的含义和用法。变量命名规则是在编程中非常重要的,它能够帮助程序员更好地组织和管理代码。不同类型的变量有不同的使用方式:

七、编写一个脚本猜数字,使用判断提示用户比目标数字是大还是小

个人编写逻辑: 当输入数字大于或小于猜想的数字时,打印输出大于或小于的提示,字体为红色
当输入数字等于猜想数字时,打印输出恭喜并提示等于的提示,字体为绿色

[02:05:30 root@leige ~]#cat guess.sh
#!/bin/bash
number=22  
read -p "please enter the number you want:  " answer
if [ $answer -gt $number ] ;then
        echo -e "\e[31myour answer is greater than the number\e[0m"
fi

if [ $answer -eq $number ] ;then
        echo -e "\e[32mCongratulations!! your answer is equal to the number\e[0m"       
fi

if [ $answer -lt $number ] ;then
        echo -e "\e[31myour answer is less than the number\e[0m"
fi    

在这里插入图片描述

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了磁盘存储基础,MBR\GPT结构、RAID基本原理、LVM基本用法,变量总结,最后编写了一个简单的shell脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值