LVM管理和ssm存储管理器的使用

  • LVM工作原理
  • 创建LVM的步骤
  • 实战:使用ssm工具为公司的邮件服务器创建可动态扩容的存储池

1、LVM的工作原理

LVM(logical volume manager)逻辑卷管理,是在磁盘分区和文件系统之间添加一个逻辑层,来为文件系统屏蔽下次的磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
LVM是通过底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,通过对底层硬盘进行封装,当我们对底层硬盘进行操作时,不再是针对分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的硬盘管理操作。

常用术语:
物理存储介质(The physical media):
LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
物理卷PV(physical volume) :
物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身;
卷组VG(Volume Group) :
一个LVM卷组由一个或多个物理卷(PV)组成 
逻辑卷LV(logical volume) :
LV建立在VG之上,可以在LV之上建立文件系统
PE(physical extents) :
PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB
LE(logical extent) :
LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应
最小存储单位总结:
名称 最小存储单位
硬盘 扇区(512字节)
文件系统 block(1K或4K )# mkfs.ext4 -b 2048 /dev/sdb1 ,最大支持到4096
raid chunk (512K) #mdadm -C -v /dev/md5 -l 5 -n 3 -c 512 -x 1 /dev/sde{1,2,3,5}
LVM PE (4M) # vgcreate -s 4M vg1 /dev/sdb{1,2}
LVM主要元素构成:
在这里插入图片描述
总结:多个磁盘/分区/raid-》多个物理卷PV-》合成卷组VG-》从VG划出逻辑卷LV-》格式化LV挂载使用

LVM优点:
使用卷组,使多个硬盘空间看起来像是一个大的硬盘
使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
在使用逻辑卷时,它可以在空间不足时动态调整它的大小
在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
允许创建快照,可以用来保存文件系统的备份。
RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源。

2、创建LVM的基本步骤

  1. 物理磁盘被格式化为PV,(空间被划分为一个个的PE) #PV包含PE
  2. 不同的PV加入到同一个VG中,(不同PV的PE全部进入到了VG的PE池内) #VG包含PV
  3. 在VG中创建LV逻辑卷,基于PE创建,(组成LV的PE可能来自不同的物理磁盘) #LV基于PE创建
  4. LV直接可以格式化后挂载使用 #格式化挂载使用
  5. LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据

常用命令:
在这里插入图片描述

创建并使用LVM逻辑卷:
创建PV
生产环境中,我们一般都是只是将一块硬盘创建一个PV,即将一个键盘划分为一个分区的意思。这里我们做实验,将硬盘划分多个分区,每个分区相当于一个物理硬盘。
硬盘分区的命令:fdisk、gdisk
因为创建LVM逻辑卷需要文件系统是LVM的,所以我们在创建分区的时候,需要进行转换
刷新硬盘命令:

[root@xuegod140~]#for i in /sys/class/scsi_host/host*/scan;do echo “- - -” > $i; done

创建LVM文件系统的分区:

[root@xuegod140 ~]# gdisk /dev/sdb
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {±}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {±}size{KMGTP}: +500M
Hex code or GUID (L to show codes, Enter = 8300): 8e00 #8e00是LVM文件系统格式
Changed type of partition to ‘Linux LVM’
Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D5AAF59C-A89D-4C59-A6E3-B95510EF9FB4
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 36822973 sectors (17.6 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 1026047 500.0 MiB 8E00 Linux LVM
2 1026048 2050047 500.0 MiB 8E00 Linux LVM
3 2050048 3074047 500.0 MiB 8E00 Linux LVM
4 3074048 4098047 500.0 MiB 8E00 Linux LVM
5 4098048 5122047 500.0 MiB 8E00 Linux LVM

创建PV

[root@xuegod140 ~]# pvcreate /dev/sdb1
Physical volume “/dev/sdb1” successfully created.
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 — 500.00m 500.00m

创建VG

[root@xuegod140 ~]# vgcreate vg01 /dev/sdb1
Volume group “vg01” successfully created
[root@xuegod140 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 0 0 wz–n- 496.00m 496.00m
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 496.00m 496.00m

创建LV

[root@xuegod140 ~]# lvcreate -n lv01 -L +200M vg01 #+200M代表增加200M
[root@xuegod140 ~]# lvcreate -n lv01 -L 200M vg01 #200M代表扩容到200M
Logical volume “lv01” created.
[root@xuegod140 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-a----- 200.00m
[root@xuegod140 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 1 0 wz–n- 496.00m 296.00m
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 496.00m 296.00m

**格式化LV

[root@xuegod140 ~]# mkfs.xfs /dev/vg
vg01/ vga_arbiter
[root@xuegod140 ~]# mkfs.xfs /dev/vg01/lv01
meta-data=/dev/vg01/lv01 isize=512 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=51200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

挂载并写入文件

[root@xuegod140 ~]# mkdir /lv01
[root@xuegod140 ~]# mount /dev/vg01/lv01 /lv01
[root@xuegod140 ~]# cp /etc/passwd /lv01/mima
[root@xuegod140 ~]# ls /lv01/mima
/lv01/mima

开机自动挂载

[root@xuegod140 ~]# echo “/dev/vg01/lv01 /lv01 xfs defaults 0 0” >> /etc/fstab

3、扩容LV和VG

LV是在VG的基础上建立,所以LV扩容,必须VG有剩余空间才可以,然后VG是在PV的基础上,所以需要有PV才行。
第一种情况:
VG有剩余空间,直接扩容LV

[root@xuegod140 ~]# lvextend -L +200M /dev/vg01/lv01 #增加200M,不加+扩容到200M
Size of logical volume vg01/lv01 changed from 200.00 MiB (50 extents) to 400.00 MiB (100 extents).
Logical volume vg01/lv01 successfully resized.
[root@xuegod140 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 400.00m #扩容后lv大小是400M

查看文件系统大小:

[root@xuegod140 ~]# df -Th /lv01/ #这里发现文件系统还没有扩容
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 xfs 197M 11M 187M 6% /lv01

文件系统扩容,需要根据不同文件系统,使用不同命令
ext4使用命令resize;xfs使用命令xfs_growfs

[root@xuegod140 ~]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=51200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 51200 to 115712

再次查看文件系统的大小:

[root@xuegod140 ~]# df -h /lv01/ #大小扩容到400M
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 449M 11M 439M 3% /lv01

第二种情况:
vg空间不足,需要创建pv,然后扩容vg,再来扩容lv
创建pv

[root@xuegod140 ~]# pvcreate /dev/sdb2
Physical volume “/dev/sdb2” successfully created.

扩容vg

[root@xuegod140 ~]# vgextend vg01 /dev/sdb2
Volume group “vg01” successfully extended
[root@xuegod140 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 1 0 wz–n- 992.00m 540.00m

扩容lv
》[root@xuegod140 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 452.00m
[root@xuegod140 ~]# lvextend -L 900M /dev/vg01/lv01 #扩容到900M
Size of logical volume vg01/lv01 changed from 452.00 MiB (113 extents) to 900.00 MiB (225 extents).
Logical volume vg01/lv01 successfully resized.
[root@xuegod140 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 900.00m

使用xfs_growfs命令更新文件系统大小

[root@xuegod140 ~]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=10, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=115712, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 115712 to 230400
[root@xuegod140 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 900.00m

注:我们可以直接在lv扩容的同时加-r参数,直接扩容文件系统
扩容vg

[root@xuegod140 ~]# vgextend vg01 /dev/sdb3
Volume group “vg01” successfully extended
[root@xuegod140 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 3 1 0 wz–n- 1.45g 588.00m
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 496.00m 0
/dev/sdb2 vg01 lvm2 a-- 496.00m 92.00m
/dev/sdb3 vg01 lvm2 a-- 496.00m 496.00m
[root@xuegod140 ~]# lvextend -r -L 1G /dev/vg01/lv01 #可以看到文件系统直接扩容成功
Size of logical volume vg01/lv01 changed from 900.00 MiB (225 extents) to 1.00 GiB (256 extents).
Logical volume vg01/lv01 successfully resized.
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=18, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=230400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 230400 to 262144
[root@xuegod140 ~]# df -Th /lv01/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 xfs 1021M 11M 1010M 2% /lv01

4、lv和vg的缩小

注意:lvm支持动态缩小,但是xfs文件系统不支持动态缩小功能。ext4、btrfs文件系统支持缩小
文件系统缩小—》lvm逻辑卷缩小
重新将lv01格式化成ext4文件系统

[root@xuegod140 ~]# umount /lv01
[root@xuegod140 ~]# mkfs.ext4 /dev/vg01/lv01
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

使用resize2fs命令缩小文件系统

[root@xuegod140 ~]# df -Th /lv01/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 ext4 976M 2.6M 907M 1% /lv01
[root@xuegod140 ~]# resize2fs -f /dev/vg01/lv01 500M #-f强制调整命令(数据有丢失风险)
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg01/lv01 to 128000 (4k) blocks.
The filesystem on /dev/vg01/lv01 is now 128000 blocks long.

使用lvreduce命令缩小lvm大小

[root@xuegod140 ~]# lvreduce /dev/vg01/lv01 -L 500M #lv从1G缩小到500M
WARNING: Reducing active logical volume to 500.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y
Size of logical volume vg01/lv01 changed from 1.00 GiB (256 extents) to 500.00 MiB (125 extents).
Logical volume vg01/lv01 successfully resized.
[root@xuegod140 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-a----- 500.00m

挂载分区,查看文件系统大小

[root@xuegod140 ~]# mount /dev/vg01/lv01 /lv01/
[root@xuegod140 ~]# df -Th /lv01/ #文件系统缩小成功
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 ext4 460M 1.6M 424M 1% /lv01

VG的缩小:
vg缩小的过程中,需要查看vg所使用的pv是否正在使用中(存放数据),如果有使用,没办法直接缩小,需要创建新的pv,然后将数据移动到新pv上存储后,再缩小。
查看vg包含的pv

[root@xuegod140 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 3 1 0 wz–n- 1.45g 988.00m
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 496.00m 0
/dev/sdb2 vg01 lvm2 a-- 496.00m 492.00m
/dev/sdb3 vg01 lvm2 a-- 496.00m 496.00m

直接使用vgreduce缩小

[root@xuegod140 ~]# vgreduce vg01 /dev/sdb3
Removed “/dev/sdb3” from volume group “vg01”
[root@xuegod140 ~]# pvs #sdb3没有使用,可以直接移除
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 496.00m 0
/dev/sdb2 vg01 lvm2 a-- 496.00m 492.00m
/dev/sdb3 lvm2 — 500.00m 500.00m

继续缩小

[root@xuegod140 ~]# vgreduce vg01 /dev/sdb2 #提示sdb2使用中,无法缩小
Physical volume “/dev/sdb2” still in use

我们需要新增一个pv,然后pvmove移动数据

[root@xuegod140 ~]# pvmove /dev/sdb2 /dev/sdb3
/dev/sdb2: Moved: 100.00%
[root@xuegod140 ~]# pvdisplay /dev/sdb2 #查看是否有数据在内
[root@xuegod140 ~]# pvdisplay /dev/sdb3 #查看是否有数据在内

再次缩小vg

[root@xuegod140 ~]# vgreduce vg01 /dev/sdb2
Removed “/dev/sdb2” from volume group “vg01”
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 496.00m 0
/dev/sdb2 lvm2 — 500.00m 500.00m
/dev/sdb3 vg01 lvm2 a-- 496.00m 492.00m

5、lv、vg、pv的移除

lv移除命令:lvremove lvm名称
移除lv逻辑卷前,需要先卸载,

[root@xuegod140 ~]# umount /lv01/
[root@xuegod140 ~]# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
Logical volume “lv01” successfully removed
[root@xuegod140 ~]# lvs

vg移除命令:vgremove 卷组名

[root@xuegod140 ~]# vgremove vg02
Volume group “vg02” successfully removed
[root@xuegod140 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 1 0 wz–n- 992.00m 92.00m
[root@xuegod140 ~]# vgremove vg01
Volume group “vg01” successfully removed
[root@xuegod140 ~]# vgs

pv移除命令:pvremove 设备名
[root@xuegod140 ~]# pvremove /dev/sdb1
Labels on physical volume “/dev/sdb1” successfully wiped.
[root@xuegod140 ~]# pvremove /dev/sdb2
Labels on physical volume “/dev/sdb2” successfully wiped.
[root@xuegod140 ~]# pvremove /dev/sdb3
Labels on physical volume “/dev/sdb3” successfully wiped.
[root@xuegod140 ~]# pvs

6、ssm工具

ssm是系统存储管理软件,rpm名字:system-storage-manager
ssm工具不是系统内置命令,需要单独安装

[root@xuegod140 ~]# yum -y install system-store-manager

查看pv

[root@xuegod140 ~]# ssm list dev
Device Total Mount point
/dev/sda 20.00 GB PARTITIONED
/dev/sda1 500.00 MB /boot
/dev/sda2 10.00 GB /
/dev/sda3 4.00 GB SWAP
/dev/sdb 20.00 GB
/dev/sdb1 500.00 MB
/dev/sdb2 500.00 MB
/dev/sdb3 500.00 MB
/dev/sdb4 500.00 MB
/dev/sdb5 500.00 MB

查看vg

[root@xuegod140 ~]# pvcreate /dev/sdb{1,2,3,4}
Physical volume “/dev/sdb1” successfully created.
Physical volume “/dev/sdb2” successfully created.
Physical volume “/dev/sdb3” successfully created.
Physical volume “/dev/sdb4” successfully created.
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 — 500.00m 500.00m
/dev/sdb2 lvm2 — 500.00m 500.00m
/dev/sdb3 lvm2 — 500.00m 500.00m
/dev/sdb4 lvm2 — 500.00m 500.00m
[root@xuegod140 ~]# vgcreate vg01 /dev/sdb{1,2}
Volume group “vg01” successfully created
[root@xuegod140 ~]# vgcreate vg02 /dev/sdb{3,4}
Volume group “vg02” successfully created
[root@xuegod140 ~]# ssm list pool
Pool Type Devices Free Used Total
vg01 lvm 2 992.00 MB 0.00 KB 992.00 MB
vg02 lvm 2 992.00 MB 0.00 KB 992.00 MB

查看为lv的分区

[root@xuegod140 ~]# ssm list vol
Volume Volume size FS FS size Free TypeMount point
/dev/sda1 500.00 MB xfs 496.66 MB 349.46 MB part/boot
/dev/sda2 10.00 GB xfs 9.99 GB 5.41 GB part/

一条命令创建lv、vg、pv
ssm -s lv大小 -n lv名字 --fstype 文件系统 -p 卷组名字 设备 挂载点
先创建挂载点:

[root@xuegod140 ~]# mkdir /mail-lv

创建lv、vg、pv,并挂载

[root@xuegod140 ~]# ssm create -s 300M -n mail-lv --fstype xfs -p mail-vg /dev/sdb5 /mail-lv/
Physical volume “/dev/sdb5” successfully created.
Volume group “mail-vg” successfully created
Logical volume “mail-lv” created.
meta-data=/dev/mail-vg/mail-lv isize=512 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@xuegod140 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 496.00m 496.00m
/dev/sdb2 vg01 lvm2 a-- 496.00m 496.00m
/dev/sdb3 vg02 lvm2 a-- 496.00m 496.00m
/dev/sdb4 vg02 lvm2 a-- 496.00m 496.00m
/dev/sdb5 mail-vg lvm2 a-- 496.00m 196.00m
[root@xuegod140 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
mail-vg 1 1 0 wz–n- 496.00m 196.00m
vg01 2 0 0 wz–n- 992.00m 992.00m
vg02 2 0 0 wz–n- 992.00m 992.00m
[root@xuegod140 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mail-lv mail-vg -wi-ao---- 300.00m

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值