Linux磁盘管理(下)

🎯 本文专栏:Linux
🚀 作者主页:小度爱学习

在这里插入图片描述

1、管理逻辑卷

在对磁盘进行分区大小规划时,有时往往不能确定这个分区要使用的总空间大小。而用fdisk对磁盘进行分区后,每个分区的大小就已经固定了,如果分区设置的过大,会白白浪费磁盘空间;分区设置的过小,就会导致空间不够用的情况。这个时候,就可以用到LVM(Logical Volume Manager,逻辑卷管理)。

1.1、认识Linux逻辑卷

LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块 的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。 管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和 分配。

  • 假设有三块磁盘/dev/sdb、/dev/sdc和/dev/sdd用来划分逻辑卷,LVM模型如图所示:

在这里插入图片描述

  • LVM基本概念

通过LVM技术,屏蔽了磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷 上建立相应的文件系统。在了解LVM之前,先熟悉LVM中几个常用的术语。

(1)物理存储设备(The physical media):指系统的存储设备文件,如:/dev/hda1、/dev/sda等 等。

(2)物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区 具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘 等)比较,却包含有与LVM相关的管理参数。

(3)卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少 要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义。

(4)PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的 大小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一 致。

(5)逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配 空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷,可以 属于同一个卷组,也可以属于不同的多个卷组。

(6)LE(logical extent)逻辑区域:逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大 小取决于逻辑卷所在卷组中的物理区域大小。LE的大小和PE的大小一样。

(7)VGDA(Volume Group Descriptor Area)卷组描述符区域:和非LVM系统将包含分区信息的 元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理 卷起始处的卷组描述符区域中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符和一些PE描述 符。

1.2、部署逻辑卷

常用的LVM部署命令

功能/命令物理卷管理卷组管理逻辑卷管理
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
显示pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩展vgextendlvextend
缩小vgreducelvreduce

示例:

1、创建pv

可以使用磁盘或分区,本例使用分区

[root@kongd ~]# parted /dev/nvme0n2 print
Model: NVMe Device (nvme)
Disk /dev/nvme0n2: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start End     Size   Type     File system 标志
 1     500MB 2146MB 1646MB extended               lba
 5     500MB 700MB   200MB   logical
 6     700MB 900MB   199MB   logical
#创建pv
[root@kongd ~]# pvcreate /dev/nvme0n2p5 /dev/nvme0n2p6
 Physical volume "/dev/nvme0n2p5" successfully created.
 Physical volume "/dev/nvme0n2p6" successfully created.
#查看pv,详细查看使用pvdisplay
[root@kongd ~]# pvs
 PV             VG   Fmt Attr PSize   PFree  
 /dev/nvme0n1p2 rhel lvm2 a-- <19.00g      0 
 /dev/nvme0n2p5     lvm2 ---  190.57m 190.57m
 /dev/nvme0n2p6     lvm2 ---  190.00m 190.00m
#更改分区类型(如果物理磁盘不需要用):
[root@kongd ~]# parted /dev/nvme0n2 set 5 lvm on
信息: You may need to update /etc/fstab.
[root@kongd ~]# parted /dev/nvme0n2 set 6 lvm on                          
信息: You may need to update /etc/fstab.

2.创建vg

[root@kongd ~]# vgcreate -s 4M RHCE /dev/nvme0n2p{5,6}
 Volume group "RHCE" successfully created
# -s 指定PE大小
[root@kongd ~]# vgs
 VG   #PV #LV #SN Attr   VSize   VFree  
 RHCE   2   0   0 wz--n- 376.00m 376.00m
 rhel   1   2   0 wz--n- <19.00g      0 

3、创建lv

方法1:指定LV 的大小

[root@kongd ~]# lvcreate -n myvg1 -L 100M RHCE
 Logical volume "myvg1" created.
  
  -L 指定LV 的大小 
  -n: LV 的名字
 RHCE: 你从哪个VG中创建的LV 
[root@kongd ~]# lvs
 LV   VG   Attr       LSize   Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 myvg1 RHCE -wi-a----- 100.00m                                                 
 root rhel -wi-ao---- <17.00g                                            
 swap rhel -wi-ao----   2.00g

方法2:指定LV的PE 数量

[root@kongd ~]# lvcreate -n myvg2 -l 50 RHCE
 Logical volume "myvg2" created.
[root@kongd ~]# lvs /dev/RHCE/myvg2
 LV   VG   Attr       LSize   Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 myvg2 RHCE -wi-a----- 200.00m  

4、格式化、挂载和基本存储空间格式化挂载一样

#lv设备文件路径
[root@kongd ~]# ll /dev/RHCE/myvg1 /dev/mapper/RHCE-myvg1 /dev/dm-2
brw-rw----. 1 root disk 253, 2 1月   3 23:37 /dev/dm-2
lrwxrwxrwx. 1 root root      7 1月   3 23:37 /dev/mapper/RHCE-myvg1 -> ../dm-2
lrwxrwxrwx. 1 root root      7 1月   3 23:37 /dev/RHCE/myvg1 -> ../dm-2
[root@kongd ~]# mkfs.xfs /dev/RHCE/myvg1
meta-data=/dev/RHCE/myvg1        isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1368, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@kongd ~]# mkdir /mnt/data1
[root@kongd ~]# mount /dev/RHCE/myvg1 /mnt/data1/

1.3 调整逻辑卷大小

1、扩展卷组——添加/dev/nvme0n2p7物理卷到vg01中

[root@kongd ~]# parted /dev/nvme0n2 mkpart logical xfs 901M 1.2G
信息: You may need to update /etc/fstab.
[root@kongd ~]# pvcreate /dev/nvme0n2p7 
 Physical volume "/dev/nvme0n2p7" successfully created.
[root@kongd ~]# parted /dev/nvme0n2 set 7 lvm on
信息: You may need to update /etc/fstab.
扩展vg:
[root@kongd ~]# vgextend RHCE /dev/nvme0n2p7
 Volume group "RHCE" successfully extended
[root@kongd ~]# vgs RHCE
 VG   #PV #LV #SN Attr   VSize   VFree  
 RHCE   3   2   0 wz--n- 660.00m 360.00m

2、逻辑卷的扩大与缩小

xfs文件系统类型的lvm的扩容

[root@kongd ~]# lvs /dev/RHCE/myvg1
 LV   VG   Attr       LSize   Pool Origin Data% Meta% Move Log Cpy%Sync 
Convert
 myvg1 RHCE -wi-ao---- 100.00m                                                 
   
[root@kongd ~]# lvextend -L +100M /dev/RHCE/myvg1
 Size of logical volume RHCE/myvg1 changed from 100.00 MiB (25 extents) to 
200.00 MiB (50 extents).
 Logical volume RHCE/myvg1 successfully resized.
[root@kongd ~]# lvs /dev/RHCE/myvg1
 LV   VG   Attr       LSize   Pool Origin Data% Meta% Move Log Cpy%Sync 
Convert
 myvg1 RHCE -wi-ao---- 200.00m    
  
 注意:使用 -L +100M增加100M,如果增加到400M,使用-L 400M,比如
[root@kongd ~]# lvextend -L 400M /dev/RHCE/myvg1
 Size of logical volume RHCE/myvg1 changed from 200.00 MiB (50 extents) to 
400.00 MiB (100 extents).
 Logical volume RHCE/myvg1 successfully resized.
[root@kongd ~]# lvs /dev/RHCE/myvg1
 LV   VG   Attr       LSize   Pool Origin Data% Meta% Move Log Cpy%Sync 
Convert
 myvg1 RHCE -wi-ao---- 400.00m 

但是目前文件系统并没有扩容:

[root@kongd ~]# df -h | grep /mnt/data1
/dev/mapper/RHCE-myvg1   95M  6.0M   89M    7% /mnt/data1

使用xfs_growfs文件系统扩容:

[root@kongd ~]# xfs_growfs /mnt/data1/
meta-data=/dev/mapper/RHCE-myvg1 isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1368, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 25600 to 102400
[root@kongd ~]# df -h | grep /mnt/data1
/dev/mapper/RHCE-myvg1 395M  8.8M 386M    3% /mnt/data1

ext文件系统,既支持扩容(使用resize2fs文件系统扩容),也支持缩减

[root@localhost ~]# umount /logical/lv1/
[root@localhost ~]# e2fsck -f /dev/vg1/lv1   #检测文件系统,resize2fs之前会提示先要检
测文件系统
[root@localhost ~]# resize2fs /dev/vg1/lv1 3G #重置文件系统大小
[root@localhost ~]# lvreduce -L 3G /dev/vg1/lv1 或者[root@localhost ~]# lvresize 
-L 3G /dev/vg1/lv1
[root@localhost ~]# mount -a
[root@localhost ~]# df -h

说明:无论是xfs还是ext4的逻辑卷调整大小都可以用该命令lvresize -r -L 大小 -n lv设备名

2、管理交换分区

在Linux系统中,swap交换分区的作用类似于Windows系统中“虚拟内存”。当有程序被调入内存后,但 是该程序又不是常被CPU所取用时,那么这些不常被使用的程序将会被放到硬盘的swap交换分区当中, 而将速度较快的内存空间释放给真正需要的程序使用,以避免由于物理内存不足而造成的系统效能低的 问题。如果系统没有swap交换分区,或者现有交换分区的容量不够用时,可扩展swap交换分区。

扩展swap交换分区的方式有两种:

以磁盘分区的方式扩展swap交换分区

以镜像文件的方式扩展swap交换分区

命令功能
mkswap分区设备名 将指定的分区格式化为swap交换文件系统
swapon交换分区设备名
swapoff交换分区设备名
swapon -s查看交换分区的使用情况
free -m以兆字节为单位显示物理内存、交换分区的使用情况

新建分区扩展交换空间:

[root@localhost ~]# umount /logical/lv1/
[root@localhost ~]# e2fsck -f /dev/vg1/lv1   #检测文件系统,resize2fs之前会提示先要检
测文件系统
[root@localhost ~]# resize2fs /dev/vg1/lv1 3G #重置文件系统大小
[root@localhost ~]# lvreduce -L 3G /dev/vg1/lv1 或者[root@localhost ~]# lvresize 
-L 3G /dev/vg1/lv1
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
#格式化交换空间
[root@localhost ~]#mkswap /dev/sda5
#激活当前的交换空间
[root@localhost ~]#swapon /dev/sda5 
#禁用指定的交换分区
[root@localhost ~]#swapoff /dev/sdb1 关闭swap
#查看当前激活的swap分区
[root@localhost ~]#swapon -s 
[root@localhost ~]# cat /proc/swaps
Filename                               Type           Size   Used   Priority
/dev/nvme0n1p3                         partition       2097148 0       -2

#写入/etc/fstab/,实现开机挂载
[root@localhost ~]# vim /etc/fstab
/dev/sda5 swap swap defaults 0 0 

新建文件扩展交换空间:

[root@localhost ~]# dd if=/dev/zero of=/swap bs=1M count=1024
创建一个文件/swap,从无限零资源去读,每一块大小为1M,一共有1024块
不能用cat去查看,不然会卡死(块设备)
#格式化交换空间
[root@localhost ~]# mkswap /swap 
[root@localhost ~]# swapon /swap
[root@localhost ~]# chmod 0600 /swap
[root@localhost ~]# swapon -s           查看当前的虚拟内存
#写入/etc/fstab/,实现开机挂载
[root@localhost ~]# vim /etc/fstab
/swap swap swap defaults 0 0

3、拓展阅读:实施高级存储功能

注:此部分内容不作要求,学有余力的同学可自行拓展阅读

3.1、Stratis 管理分层存储

Stratis 是一个卷管理文件系统volume-managing filesystem(VMF),类似于 ZFS 和 Btrfs。它使用了 存储“池”的核心思想,该思想被各种 VMF 和形如 LVM 的独立卷管理器采用。使用一个或多个硬盘(或分区)创建存储池,然后在存储池中创建卷volume。与使用 fdisk 或 GParted 执行的传统硬盘分区不同,存储池中的卷分布无需用户指定。

VMF 更进一步与文件系统层结合起来。用户无需在卷上部署选取的文件系统,因为文件系统和卷已经被合并在一起,成为一个概念上的文件树,文件数据位于存储池中,但文件大小仅受存储池整体容量限制。
在这里插入图片描述

通过Stratis,可以使用精简配置(thin provisioning),快照(snapshots)和基于池(pool-based ) 的管理和监控等高级存储功能。

stratis案例:新增两块5G硬盘

1、配置yum源,安装软件包
[root@kongd ~]# dnf install -y stratisd stratis-cli

2、启动stratisd服务
[root@kongd ~]# systemctl enable --now stratisd.service
[root@kongd ~]# systemctl is-enabled stratisd.service 
enabled

3、创建池
[root@kongd ~]# stratis --version 
1.0.0
[root@kongd ~]# stratis pool --help
usage: stratis pool [-h] {create,list,destroy,rename,add-data,add-cache} ...
optional arguments:
  -h, --help           show this help message and exit
subcommands:
 {create,list,destroy,rename,add-data,add-cache}
   create             Create a pool #创建一个池
   list               List pools #列出池
   destroy             Destroy a pool #销毁一个池
   rename             Rename a pool #重命名
   add-data           Add one or more blockdevs to an existing pool for use
                       as data storage #增加物理设备
   add-cache           Add one or more blockdevs to an existing pool for use
                       as cache #增加缓存
                        
[root@kongd ~]# stratis pool create redhat /dev/nvme0n2     #池的名字redhat,在池中
加入设备/dev/nvme0n2
[root@kongd ~]# stratis pool list
Name     Total Physical Size Total Physical Used
redhat                  5 GiB               52 MiB

4、构建文件系统
对于stratis管理的存储分层而言,文件系统是构建在池中的
[root@kongd ~]# stratis filesystem create redhat rhce
[root@kongd ~]# stratis filesystem list
Pool Name Name Used     Created           Device               UUID           
                   
redhat     rhce  546 MiB Jan 08 2020 00:15 /stratis/redhat/rhce 
fe32e43bafa046d8b82210bcd7616ac1  

5、挂载
[root@kongd ~]# mkdir /mnt/stratis
[root@kongd ~]# mount /stratis/redhat/rhce /mnt/stratis
[root@kongd ~]# df -hT | grep /mnt/stratis
#永久挂载
[root@kongd ~]# tail -1 /etc/fstab
/stratis/redhat/rhce /mnt/stratis xfs   defaults,xsystemd.requires=stratisd.service
0 0 

6、扩容
[root@kongd ~]# stratis pool add-data redhat /dev/nvme0n3
[root@kongd ~]# stratis pool list
Name     Total Physical Size Total Physical Used
redhat                 10 GiB              602 MiB
写入数据
[root@kongd ~]# dd if=/dev/zero of=/mnt/stratis/file bs=1G count=5
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 13.4471 s, 399 MB/s

7、快照
[root@kongd ~]# stratis filesystem snapshot redhat rhce snap01
[root@kongd ~]# stratis filesystem list
Pool Name Name   Used     Created           Device                 UUID     
                         
redhat     rhce    5.53 GiB Jan 08 2020 00:15 /stratis/redhat/rhce   
fe32e43bafa046d8b82210bcd7616ac1  
redhat     snap01  5.53 GiB Jan 08 2020 00:23 /stratis/redhat/snap01 
66e1027fcb41476786b88155593374ac  
#挂载快照读取数据
[root@kongd ~]# mkdir /mnt/snap
[root@kongd ~]# mount /stratis/redhat/snap01 /mnt/snap/
[root@kongd ~]# du -sh /mnt/snap/file 
5.0G /mnt/snap/file

8、一个池中可以构建多个文件系统
[root@kongd ~]# stratis filesystem create redhat rhce1
[root@kongd ~]# stratis filesystem list redhat
Pool Name Name   Used     Created           Device                 UUID     
                         
redhat     rhce    5.53 GiB Jan 08 2020 00:15 /stratis/redhat/rhce   
fe32e43bafa046d8b82210bcd7616ac1  
redhat     snap01  5.53 GiB Jan 08 2020 00:23 /stratis/redhat/snap01 
66e1027fcb41476786b88155593374ac  
redhat     rhce1   546 MiB   Jan 08 2020 00:26 /stratis/redhat/rhce1   
ec549c4e3bb84fa18f432109f435c520

9、文件系统删除
[root@kongd ~]# stratis filesystem destroy redhat rhce1
[root@kongd ~]# stratis filesystem destroy redhat snap01
Execution failure caused by:
ERROR: low-level ioctl error due to nix error: EBUSY: Device or resource busy

#注意:文件系统需要先卸载才能删除
[root@kongd ~]# umount /mnt/snap 
[root@kongd ~]# stratis filesystem destroy redhat snap01

10、删除池
[root@kongd ~]# umount /mnt/snap 
[root@kongd ~]# stratis filesystem destroy redhat snap01
[root@kongd ~]# stratis filesystem destroy redhat rhce
[root@kongd ~]# stratis pool destroy redhat

3.2、VDO压缩存储和删除重复数据

虚拟数据优化(Virtual Data Optimize,VDO)使用重复数据删除,压缩和精简配置的形式为Linux提供了内联数据缩减,即通过删除存储设备上的重复数据或者压缩数据来优化存储空间。设置VDO卷时,可以指定要在其上构造VDO卷的块设备以及计划提供的逻辑存储量。
1、安装VDO模块,需要的软件包是kmod-kvdo vdo

[root@kongd ~]# dnf install -y vdo kmod-kvdo

2、创建VDO卷

[root@kongd ~]# vdo create --name=vdo1 --device=/dev/nvme0n2 --
vdoLogicalSize=5G
Creating VDO vdo1
Starting VDO vdo1
Starting compression on VDO vdo1
VDO instance 0 volume is ready at /dev/mapper/vdo1
说明:这里我们指定了vdoLogicalSize,这个值可以比我们实际磁盘大许多。原因是我们将从重复数据删除
中得到很多空间。

例如:
当托管活动的虚拟机或容器时,红帽建议以10:1的逻辑与物理比率配置存储:即,如果您使用1TB的物理存储,则将其表示为10 TB的逻辑存储。
如果是日志文件和其他纯文本文件通常可以很好地进行重复数据删除,可能会得到10:1甚至更高的重复数据删除率。
但是如果是二进制文件,如视频、音频或压缩包,将远远低于3:1,甚至在某些情况下1:1。这种情况下不建议使用vdo卷。

3、分析一个VDO卷(deduplication删除重复数据 compression压缩)

[root@kongd ~]# vdo list
vdo1
[root@kongd ~]# vdo status --name vdo1
VDO status:
 Date: '2020-01-08 01:08:30+08:00'
 Node: kongd.com
Kernel module:
 Loaded: true
 Name: kvdo
 Version information:
   kvdo version: 6.2.0.293
Configuration:
 File: /etc/vdoconf.yml
 Last modified: '2020-01-08 01:06:34'
...

4、给vdo1一个xfs文件系统,之后挂载到/mnt/vdo1上

-K选项可防止立即丢弃文件系统中未使用的块,从而使命令返回更快
[root@kongd ~]# mkfs.xfs -K /dev/mapper/vdo1 
meta-data=/dev/mapper/vdo1       isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
#刷新存储设备
[root@kongd ~]# udevadm settle 
[root@kongd ~]# mkdir /mnt/vdo1
[root@kongd ~]# mount /dev/mapper/vdo1 /mnt/vdo1
#设置开机自动挂载
[root@kongd ~]# tail -1 /etc/fstab
/stratis/redhat/rhce /mnt/stratis xfs defaults,x-systemd.requires=vdo.service 
0 0 

5、使用vdostats命令查看卷的初始统计信息和状态

[root@kongd ~]# vdostats   --human-readable
Device                   Size     Used Available Use% Space saving%
/dev/mapper/vdo1          5.0G      3.0G      2.0G  60%           98%
可以看到我们还没有写任何数据,但是已经有3GB,60%的空间正在使用中了!这是因为“通用重复数据删除索引”已被写入磁盘。这基本上是一个数据库,用于记录slab指纹及其位置。这就是使重复数据删除成为可能的原因。

6、查看去重功能是否开启

[root@kongd ~]# vdo status --name=vdo1 | grep Deduplication
   Deduplication: enabled

7、复制文件到挂载点查看

[root@kongd ~]# cp /media/cdrom/images/install.img /mnt/vdo1/
[root@kongd ~]# vdostats   --human-readable
Device                   Size     Used Available Use% Space saving%
/dev/mapper/vdo1          5.0G      3.4G      1.6G  68%          2%

8、再次复制两个相同文件查

[root@kongd ~]# cp /media/cdrom/images/install.img /mnt/vdo1/install.img1
[root@kongd ~]# cp /media/cdrom/images/install.img /mnt/vdo1/install.img2
[root@kongd ~]# vdostats   --human-readable
Device                   Size     Used Available Use% Space saving%
/dev/mapper/vdo1          5.0G      3.4G      1.6G  68%           64%
[root@kongd ~]# du -sh /mnt/vdo1/
1.4G /mnt/vdo1/
总结:会发现传一个相同的文件,但是占用磁盘空间并不会发生变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值