powervm_在IBM PowerVM环境中脚本化IBM AIX LPAR从A到Z

本文详细介绍了如何在IBM PowerVM环境中使用脚本从命令行创建IBM AIX逻辑分区(LPAR)。步骤包括手动创建LPAR、配置虚拟I/O服务器(VIOS)、将LPAR添加为NIM客户端以及网络引导和控制台连接。同时,文章提供了一个Perl脚本示例,用于自动化创建LPAR的过程,提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在IBM®PowerVM®环境中创建LPAR可能是一项复杂的任务。 您需要执行以下高层步骤,以在双虚拟I / O服务器(VIOS)环境中使用虚拟小型计算机系统接口(VSCSI),N端口ID虚拟化(NPIV)或共享存储池来构建LPAR。

在此示例中,两个VIOS名称是VIO1和VIO2。

在硬件管理控制台(HMC)命令行中,执行以下任务:

  • 使用两个虚拟SCSI客户端适配器(虚拟SCSI或共享存储池)或两个虚拟光纤通道(FC)客户端适配器(NPIV)创建LPAR配置文件。
  • 使用DLPAR将虚拟SCSI服务器适配器或虚拟光纤通道服务器适配器添加到VIO1和VIO2。
  • 使用HMC的“ 保存当前配置”功能,将VIO1和VIO2的当前配置保存到其配置文件中。
  • 在VIO1和VIO2上运行cfgdev命令以检测新适配器。
  • 根据插槽号在VIO1和VIO2服务器上查找虚拟主机(vhost)适配器,以找到正确的vhost或vfchost设备。
  • 对于虚拟SCSI,将存储从VIO1和VIO2映射到vhost设备。
  • 对于NPIV,将虚拟Fiber Chanel适配器映射到VIO1和VIO2上的物理适配器。
  • 对于共享存储池,创建逻辑单元号(LUN)并将其映射到VIO1和VIO2上的虚拟主机适配器。

从网络安装管理(NIM)服务器:

  • 将服务器添加到/ etc / hosts文件。
  • 将新的LPAR定义为NIM客户端。
  • 配置NIM以使用可选的bosinst_data资源将mksysb推送到服务器。

返回HMC命令行:

  • 从网络引导LPAR。
  • 打开与LPAR的控制台连接。
  • 恢复mksysb并启动AIX后,根据需要完成系统配置和定制。

本文介绍了从命令行手动创建LPAR所需的步骤,并说明了如何使用脚本自动执行这些任务。

从命令行手动创建LPAR

创建LPAR的第一步是了解要在其中构建LPAR的系统的体系结构。 本文针对具有VIOS实例的虚拟化PowerVM环境。 但是,只要系统是由HMC管理的,也可以针对非虚拟化环境调整步骤。

在虚拟化环境中,您有几种选择。 对于存储,您可以使用传统的虚拟SCSI,NPIV或共享存储池。 对于虚拟环境中的联网,大多数人使用虚拟以太网。

本文提供有关在具有两个VIOS实例的NPIV环境中创建新LPAR的详细信息。 但是,如果您的环境中使用了虚拟SCSI和共享存储池,则可以调整这些指示。

让我们详细介绍上面列出的步骤,以从将使用NPIV的命令行创建LPAR。

从HMC命令行创建LPAR配置文件

mksyscfg HMC命令用于创建LPAR,您可以指定参数,例如LPAR名称,要使用的虚拟以太网VLAN ID,虚拟光纤通道适配器插槽编号,最小/最大/所需的CPU,虚拟处理器和内存。 清单1显示了用于创建LPAR概要文件的示例命令行。

清单1.创建LPAR概要文件的mksyscfg命令的示例
mksyscfg -r lpar -m p770_01 -i "name=applpar01, profile_name=applpar01,lpar_env=aixlinux, 
min_mem=8192, desired_mem=16384, max_mem=24576, proc_mode=shared, min_procs=1, 
desired_procs=2, max_procs=4, min_proc_units=0.5, desired_proc_units=1, max_proc_units=2, 
sharing_mode=uncap, uncap_weight=128, conn_monitoring=1, boot_mode=norm, 
max_virtual_slots=200, \"virtual_eth_adapters=2/0/5//0/0/\", 
\"virtual_fc_adapters=25/client//vioprod1/25//0,26/client//vioprod2/26//0\" "

大部分命令行是不言自明的。 棘手的部分是虚拟适配器。

virtual_eth_adapter部分的重要部分( \"virtual_eth_adapters=2/0/5//0/0/\" ) 2指定插槽5指定VLAN ID 5。

virtual_fc_adapters部分( \"virtual_fc_adapters=25/client//vioprod1/25//0,26/client//vioprod2/26//0\" )的重要部分是本地/远程插槽号(分别为25和26)示例)和VIOS名称。

有关mksyscfg命令语法的更多信息,请参考HMC手册页

确保在virtual_eth_adaptersvirtual_fc_adapters周围使用引号引起来,以便外壳程序在运行命令时不会将其删除。

使用DLPAR将虚拟服务器适配器添加到VIOS实例HMC chhwres命令可用于将虚拟服务器适配器动态添加(DLPAR)到VIOS实例。 清单2中显示了一个示例命令。

清单2.两个VIOS实例中的DLPAR虚拟服务器适配器的“ chhwres”命令行示例
chhwres -r virtualio -m p770_01 -o a -p vioprod1 --rsubtype fc -s 25 -a 
"adapter_type=server,remote_lpar_name=applpar01,remote_slot_num=25"

chhwres -r virtualio -m p770_01 -o a -p vioprod2 --rsubtype fc -s 26 -a 
"adapter_type=server,remote_lpar_name=applpar01,remote_slot_num=26"

这将添加支持我们在LPAR概要文件中创建的客户端适配器所需的相应VIOS适配器。

-m标志指定受管系统的名称。

-p标志指定VIOS的名称。

-s 25指定VIOS插槽号。

remote_lpar_name=是LPAR客户端的名称。

remote_slot_num=是客户端上的相应插槽号。

在这些示例中,VIOS插槽和客户端插槽相同。

将VIOS实例的当前配置保存到其配置文件中

此时,虚拟服务器适配器已动态添加到VIOS实例。 但是,VIOS配置文件没有它们。 如果关闭并重新激活VIOS实例,则除非将适配器放在配置文件中,否则适配器将丢失。 一种实现方法是将VIOS实例的当前配置保存到其配置文件中。 这可以通过使用mksyscfg HMC命令来完成。 清单3显示了mksyscfg命令的示例。

清单3.“ mksyscfg”命令行示例,用于将VIOS实例的当前配置保存到其概要文件中
mksyscfg -r prof -m p770_01 -o save -p vioprod1 -n `lssyscfg -r lpar -m p770_01  --filter 
"lpar_names=vioprod1" -F curr_profile` --force
mksyscfg -r prof -m p770_01 -o save -p vioprod2 -n `lssyscfg -r lpar -m p770_01  --filter 
"lpar_names=vioprod2" -F curr_profile` --force

p770_01的出现指定了受管系统名称。 vioprod1vioprod2是VIOS名称。 运行这些命令时,将lssyscfg评估lssyscfg命令,该命令将返回LPAR的当前配置文件名称。 然后评估该命令的mksyscfg部分,它将正在运行的配置保存到lssyscfg返回的概要文件中。

在VIOS实例上运行cfgdev以检测新的虚拟适配器

现在,已将VIOS虚拟适配器动态添加(使用DLPAR)(使用DLPAR)到VIOS实例,并且还保存到其配置文件中。 下一步是在VIOS实例上运行cfgdev命令,以便创建vfchost设备。 可以使用HMC viosvrcmd命令在每个VIOS上运行远程命令来完成此操作。 如清单4所示。

清单4.在每个VIOS上运行cfgdev的HMC“ viosvrcmd”命令的示例
viosvrcmd -m p770_01 -p vioprod1 -c "cfgdev -dev vio0"
viosvrcmd -m p770_01 -p vioprod2 -c "cfgdev -dev vio0"

–dev vio0参数使cfgdev仅沿vio0设备运行,这比运行完整的cfgdev (扫描所有设备)要快得多。

确定每个VIOS上的vfchost设备

现在, cfgdev一直跑,vfchost适配器已经在每个VIOS创建。 下一步是为我们刚刚创建的适配器找到正确的vfchost设备名称。 通过使用HMC viosvrcmd命令在每个VIOS上运行lsmap –all –npiv ,然后lsmap –all –npiv刚添加的适配器的插槽号,可以完成此操作。 清单5显示了为此所需的命令行。

清单5.在vios上运行“ lsmap”以查找正确的vhost设备的“ viosvrcmd”命令的示例
viosvrcmd -m p770_01 -p vioprod1 -c "lsmap -all -npiv" | grep "\-C25 " | cut -f 1 -d " "
viosvrcmd -m p770_01 -p vioprod2 -c "lsmap -all -npiv" | grep "\-C26 " | cut -f 1 -d " "

插槽25是添加到vioprod1的插槽,插槽26是添加到vioprod2的插槽,因此我们对这些数字进行grep。 每个命令都返回一个vfchost设备名称,例如vfchost1vfchost2

将虚拟光纤通道适配器映射到物理适配器

现在我们知道了每个VIOS的vfchost设备,我们可以将它们映射到物理适配器。 可以使用vfcmap命令在VIOS上运行viosvrcmd命令来完成此操作,如清单6所示。

清单6.在每个VIOS上运行“ vfcmap”的“ viosvrcmd”示例
viosvrcmd -m p770_01 -p vioprod1 -c "vfcmap -vadapter vfchost1 -fcp fcs0"
viosvrcmd -m p770_01 -p vioprod2 -c "vfcmap -vadapter vfchost1 -fcp fcs0"

用清单5中找到的设备替换vfchost1。请注意,vfchost设备在VIO1和VIO2上可能具有相同的设备名称,或者它们可能具有不同的名称(例如, VIO1上的vfchost3VIO2上的vfchost4)。 将fcs0替换为您希望将适配器映射到的物理光纤通道适配器。

显示适配器的WWPN

此时,可以检索NPIV适配器的全球端口名称(WWPN),以便可以进行存储区域网络(SAN)分区。 使用lssyscfg HMC命令来通过命令显示WWPN,如清单7所示。

清单7.用于显示NPIV WWPN的“ lssyscfg”命令的示例
lssyscfg -r prof -m p770_01 --filter lpar_names=applpar01 -F name,virtual_fc_adapters | 
sed -e 's/""*[0-9]*\/client\/[0-9]*\/[a-zA-Z0-9]*\/[0-9]*\///g' -e 's/\/0""*//g'

现在,您应该要求SAN管理员对WWPN进行分区并置备存储。

将LPAR添加为NIM客户端并设置mksysb install

至此,所有命令均已从HMC运行。 现在,我们需要移至NIM服务器以在那里完成一些任务。 首先,我们将使用AIX hostent命令将新的LPAR客户端添加到/ etc / hosts文件中。 清单8显示了在NIM服务器上运行的hostent命令行示例。

清单8.使用“ hostent”命令将LPAR添加到NIM服务器上的/ etc / hosts
hostent -a 192.168.0.3 -h applpar01

然后,我们可以将新的LPAR配置为NIM客户端,如清单9所示。

清单9.将LPAR配置为NIM客户端的示例命令
nim -o define -t standalone -a platform=chrp -a if1="find_net applpar01 0" -a 
cable_type1=tp -a net_settings1="auto auto" -a netboot_kernel=64 applpar01

接下来,配置NIM以推出mksysb,如清单10所示。

清单10.配置NIM将mksysb推送到LPAR的示例命令
nim -o bos_inst -a source=mksysb -a spot=spot61 -a mksysb=aix61 -a 
accept_licenses=yes -a installp_flags=-acNgXY -a no_client_boot=yes -a preserve_res=yes 
applpar01

在上面的命令中, spot=spot61mksysb=aix61指定将用于完成安装的NIM资源的名称。 您还可以指定bosinst_data资源的名称,以进一步自动执行mksysb安装。

从网络引导LPAR并打开控制台

对于最后的几个步骤,我们需要回到HMC并使用lpar_netboot命令从NIM服务器启动LPAR,如清单11所示。

清单11.从NIM服务器引导LPAR的“ lpar_netboot”命令示例
lpar_netboot -t ent -s auto -d auto -D -S 192.168.0.5 -G 192.168.0.1 -C 192.168.0.3 -K 
255.255.255.0 applpar01 applpar01 p770_01

在上述命令中, -S 192.168.0.5指定NIM服务器的IP地址, -G 192.168.0.1指定网关, -C 192.168.0.3指定LPAR的IP地址。

最后一步是使用mkvterm命令打开与LPAR的控制台连接,如清单12所示。

清单12.“ mkvterm”命令打开与LPAR的控制台连接
mkvterm -m p770_01 -p applpar01

编写LPAR创建过程的脚本

了解如何从命令行手动创建LPAR之后的下一步是编写任务脚本。

本文介绍的脚本只是一个示例。 必须对其进行自定义和测试才能在您的特定环境中工作。 例如,它进行某些假设,以使您的LPAR使用255.255.255.0子网,并且默认网关以“ .1”结尾。 它设置为添加两个虚拟光纤通道适配器和一个虚拟以太网适配器,但是可以根据需要轻松定制以添加更多这些适配器。 您需要仔细查看脚本并根据您的环境进行更改,然后在生产环境中使用之前在测试环境中测试脚本。

LPAR创建脚本的输入是CSV格式的文件。 CSV是一种很好的使用格式,因为它易于在脚本中进行解析,并且非常易于使用电子表格(例如LibreOffice Calc或Microsoft®Excel)进行编辑。

输入文件应在电子表格应用程序中进行编辑,并且电子表格的每一行都指定LPAR的属性。 您可以根据需要在文件中指定尽可能多的LPAR。 图1显示了在电子表格应用程序中正在编辑的CSV文件。

图1.在电子表格应用程序中编辑CSV输入文件
在电子表格应用程序中编辑CSV输入文件

要创建具有适当标题的CSV文件,请下载清单13中所示的input.csv文件。

清单13.设置为CSV输入文件第一行的列标题
Download: input.csv 

这些列是:

  • LPAR_name –将创建的新LPAR的名称
  • 系统 –将在其上创建LPAR的受管系统名称
  • VFC1_LPAR_slot –将转到VIO1的虚拟FC适配器的客户端/ LPAR插槽号
  • VFC1_VIO1_slotVIO1的虚拟FC适配器的服务器/ VIOS插槽号
  • VFC2_LPAR_slot-将转到VIO2的虚拟FC适配器的客户端/ LPAR插槽号
  • VFC2_VIO2_slotVIO2的虚拟FC适配器的服务器/ VIOS插槽号
  • eth_slot2_vlan –用于客户端插槽2上的虚拟以太网适配器的虚拟LAN(VLAN)ID
  • vio1 – VIO1服务器的名称
  • vio2 – VIO2服务器的名称
  • vcpu_min –最小虚拟CPU
  • vcpu_desired –所需的虚拟CPU
  • vcpu_max –最大虚拟CPU
  • cpu_min –最低CPU
  • cpu_desired –所需的CPU
  • cpu_max –最大CPU
  • mem_min –最小内存(以GB为单位)
  • mem_desired –所需的内存(以GB为单位)
  • mem_max –最大内存(以GB为单位)
  • server_ip –您正在创建的LPAR的IP地址
  • nim_ip – NIM服务器的IP地址
  • mksysb –您需要使用的NIM mksysb资源
  • spot –您要使用的NIM现货资源

文件的每一行中都必须包含所有字段。

清单14提供了一个下载示例输入文件的链接,该文件指定了要创建的两个LPAR。

清单14.输入CSV文件示例,该文件指定要创建的两个LPAR。
Download: example.csv 

名为csvtolpar.pl的脚本使用在命令行上通过命令指定的CSV文件名运行,例如./csvtolpar.pl input.csv

脚本的输出是创建LPAR所需的所有命令行。 清单15显示了该脚本的示例输出。

清单15. csvtolpar.pl脚本的输出,该脚本显示了创建两个LPAR所需的命令
#Create LPAR, you can customize things such as the uncapped weight, max virtual slots,
etc.or add in extra parameters for things such as AME
mksyscfg -r lpar -m p770_01 -i "name=applpar01, profile_name=applpar01,
lpar_env=aixlinux, min_mem=8192, desired_mem=16384, max_mem=24576, 
proc_mode=shared, min_procs=1, desired_procs=2, max_procs=4,
min_proc_units=0.5, desired_proc_units=1, max_proc_units=2,
sharing_mode=uncap, uncap_weight=128, conn_monitoring=1,
boot_mode=norm, max_virtual_slots=200,
\"virtual_eth_adapters=2/0/5//0/0/\",
\"virtual_fc_adapters=25/client//vioprod1/25//0,26/client//vioprod2/26//0\" "

#DLPAR in virtual adapters to VIO servers
chhwres -r virtualio -m p770_01 -o a -p vioprod1 --rsubtype fc -s 25 -a 
"adapter_type=server,
remote_lpar_name=applpar01,remote_slot_num=25"
chhwres -r virtualio -m p770_01 -o a -p vioprod2 --rsubtype fc -s 26 -a
"adapter_type=server,
remote_lpar_name=applpar01,remote_slot_num=26"

#Save current config for VIO servers to profiles
mksyscfg -r prof -m p770_01 -o save -p vioprod1 -n `lssyscfg -r lpar -m p770_01 
 --filter "lpar_names=vioprod1" -F curr_profile` --force
mksyscfg -r prof -m p770_01 -o save -p vioprod2 -n `lssyscfg -r lpar -m p770_01 
 --filter "lpar_names=vioprod2" -F curr_profile` --force

#Run cfgdev on VIO servers to detect new virtual adapters
viosvrcmd -m p770_01 -p vioprod1 -c "cfgdev -dev vio0"
viosvrcmd -m p770_01 -p vioprod2 -c "cfgdev -dev vio0"

#Determine what the vhost device is for each VIO
vio1_vhost=`viosvrcmd -m p770_01 -p vioprod1 -c "lsmap -all -npiv" | grep "\-C25 " | 
cut -f 1 -d " " `
vio2_vhost=`viosvrcmd -m p770_01 -p vioprod2 -c "lsmap -all -npiv" | grep "\-C26 " | 
cut -f 1 -d " " `
echo "VIO1=$vio1_vhost    VIO2=$vio2_vhost"

#Map virtual fibre channel - Customize physical fcs adapter here
viosvrcmd -m p770_01 -p vioprod1 -c "vfcmap -vadapter $vio1_vhost -fcp fcs0"
viosvrcmd -m p770_01 -p vioprod2 -c "vfcmap -vadapter $vio2_vhost -fcp fcs0"

#Display WWPN's for zoning
lssyscfg -r prof -m p770_01 --filter lpar_names=applpar01 -F name,
virtual_fc_adapters | sed -e 's/""*[0-9]*\/client\/[0-9]*\/[a-zA-Z0-9]*\/[0-9]*\///g' 
-e 's/\/0""*//g'

#NIM Commands to add to hosts, define as client, and push out mksysb,
***run these commands on NIM server***, add " -a connect=nimsh" to 
define command line if using nimsh hostent -a 192.168.0.3 -h applpar01
nim -o define -t standalone -a platform=chrp -a if1="find_net applpar01 0"
-a cable_type1=tp -a net_settings1="auto auto" -a netboot_kernel=64 applpar01
nim -o bos_inst -a source=mksysb -a spot=spot61 -a mksysb=aix61
-a accept_licenses=yes -a installp_flags=-acNgXY -a no_client_boot=yes -a preserve_res=yes
applpar01

#HMC Netboot command and console command, Warning, this will REBOOT the LPAR if
it is running
lpar_netboot -t ent -s auto -d auto -D -S 192.168.0.5 -G 192.168.0.1
-C 192.168.0.3 -K 255.255.255.0 applpar01 applpar01 p770_01
mkvterm -m p770_01 -p applpar01

########################################################################################

#Create LPAR, you can customize things such as the uncapped weight, max virtual slots, 
etc.or add in extra parameters for things such as AME
mksyscfg -r lpar -m p770_01 -i "name=applpar02, profile_name=applpar02,
lpar_env=aixlinux, min_mem=4096, desired_mem=8192, max_mem=12288, 
proc_mode=shared, min_procs=1, desired_procs=1, max_procs=1,
min_proc_units=0.1, desired_proc_units=0.5, max_proc_units=1, 
sharing_mode=uncap, uncap_weight=128, conn_monitoring=1, 
boot_mode=norm, max_virtual_slots=200,
\"virtual_eth_adapters=2/0/5//0/0/\", \"virtual_fc_adapters=27/client//vioprod1/27//0,
28/client//vioprod2/28//0\" "

#DLPAR in virtual adapters to VIO servers
chhwres -r virtualio -m p770_01 -o a -p vioprod1 --rsubtype fc -s 27 -a
"adapter_type=server,remote_lpar_name=applpar02,remote_slot_num=27"
chhwres -r virtualio -m p770_01 -o a -p vioprod2 --rsubtype fc -s 28 -a 
"adapter_type=server,remote_lpar_name=applpar02,remote_slot_num=28"

#Save current config for VIO servers to profiles
mksyscfg -r prof -m p770_01 -o save -p vioprod1 -n 
`lssyscfg -r lpar -m p770_01  --filter "lpar_names=vioprod1" -F curr_profile` --force
mksyscfg -r prof -m p770_01 -o save -p vioprod2 -n
`lssyscfg -r lpar -m p770_01  --filter "lpar_names=vioprod2" -F curr_profile` --force

#Run cfgdev on VIO servers to detect new virtual adapters
viosvrcmd -m p770_01 -p vioprod1 -c "cfgdev -dev vio0"
viosvrcmd -m p770_01 -p vioprod2 -c "cfgdev -dev vio0"

#Determine what the vhost device is for each VIO
vio1_vhost=`viosvrcmd -m p770_01 -p vioprod1 -c "lsmap -all -npiv" | grep 
"\-C27 " | cut -f 1 -d " " `
vio2_vhost=`viosvrcmd -m p770_01 -p vioprod2 -c "lsmap -all -npiv" | grep 
"\-C28 " | cut -f 1 -d " " `
echo "VIO1=$vio1_vhost    VIO2=$vio2_vhost"

#Map virtual fibre channel - Customize physical fcs adapter here
viosvrcmd -m p770_01 -p vioprod1 -c "vfcmap -vadapter $vio1_vhost -fcp fcs0"
viosvrcmd -m p770_01 -p vioprod2 -c "vfcmap -vadapter $vio2_vhost -fcp fcs0"

#Display WWPN's for zoning
lssyscfg -r prof -m p770_01 --filter lpar_names=applpar02 -F name,
virtual_fc_adapters | sed -e 's/""*[0-9]*\/client\/[0-9]*\/[a-zA-Z0-9]*\/[0-9]*\///g'
-e 's/\/0""*//g'

#NIM Commands to add to hosts, define as client, and push out mksysb, 
***run these commands on NIM server***, add " -a connect=nimsh" to define
command line if using nimsh
hostent -a 192.168.0.4 -h applpar02
nim -o define -t standalone -a platform=chrp -a if1="find_net applpar02 0" 
-a cable_type1=tp -a net_settings1="auto auto" -a netboot_kernel=64 applpar02
nim -o bos_inst -a source=mksysb -a spot=spot61 -a mksysb=aix61 
-a accept_licenses=yes -a installp_flags=-acNgXY -a no_client_boot=yes 
-a preserve_res=yes applpar02

#HMC Netboot command and console command, Warning, this will 
REBOOT the LPAR if it is running
lpar_netboot -t ent -s auto -d auto -D -S 192.168.0.5 -G 192.168.0.1 
-C 192.168.0.4 -K 255.255.255.0 applpar02 applpar02 p770_01
mkvterm -m p770_01 -p applpar02

########################################################################################

csvtolpar.pl脚本不会在系统上进行任何更改。 它仅显示要创建LPAR所需运行的命令。 这些命令行可以快速复制到HMC和NIM服务器中。 或者,如果您设置了安全外壳(SSH)密钥,则可以修改脚本以通过SSH运行命令,而不仅仅是显示需要运行的命令。 我更喜欢复制命令,以便确保每个步骤都能按预期工作。

如果您保存输入的CSV文件,则可以在将来的任何时候轻松地重新创建LPAR,或者修改CSV文件以轻松创建类似的LPAR。

csvtolpar.pl脚本是一个Perl脚本,可以在清单16中下载。

清单16. csvtolpar.pl Perl脚本
Download:csvtolpar.pl 

结论

本文介绍了从命令行手动创建LPAR的步骤,还提供了示例脚本来自动创建可以针对您的环境定制的LPAR。 自动执行LPAR构建可以节省大量时间,并使您能够满足不断增长的业务需求。

翻译自: https://www.ibm.com/developerworks/aix/library/au-aix-ibm-powervm/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值