前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS7.0部署KVM虚拟机

CentOS7.0部署KVM虚拟机

作者头像
用户9949933
发布2023-02-24 17:15:39
1.7K0
发布2023-02-24 17:15:39
举报
文章被收录于专栏:何以解忧 唯有暴富

说明:

​ Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。

KVM的虚拟化需要硬件支持(如[Intel VT](https://baike.baidu.com/item/Intel VT)技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

  • 中文名:KVM虚拟机
  • 解 释:一个开源的系统虚拟化模块
  • 应 用:Linux自身的调度器进行管理
  • 价 值:成为学术界的主流VMM之一
  • 本文系统环境:Centos 7.0

安装KVM

  • 使用egrep ‘(vmx|svm)’ /proc/cpuinfo 命令验证CPU是否支持KVM;如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。
代码语言:javascript
复制
[root@localhost.localdomain:/root]
# egrep '(vmx|svm)' /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm ida arat epb dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm ida arat epb dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm ida arat epb dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm ida arat epb dtherm tpr_shadow vnmi ept vpid tsc_adjust
  • 关闭SELinux,将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled
代码语言:javascript
复制
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
  • 因为我是刚安装好的CentOS,所以为了下面方便点,先把一些必要的工具安装下
代码语言:javascript
复制
yum install epel-release net-tools vim unzip zip wget -y
  • 安装KVM及其依赖项
代码语言:javascript
复制
yum install qemu-kvm libvirt virt-install bridge-utils openssl -y
  • 使用lsmod | grep kvm命令验证安装结果,下图说明已经成功安装了
代码语言:javascript
复制
[root@localhost.localdomain:/root]
# lsmod | grep kvm
kvm_intel             138567  0 
kvm                   441119  1 kvm_intel
  • 开启kvm服务,并且设置其开机自动启动
代码语言:javascript
复制
[root@localhost.localdomain:/root]
# systemctl start libvirtd

[root@localhost.localdomain:/root]
# systemctl enable libvirtd
  • 查看状态操作结果,如下图所示,说明运行情况良好
代码语言:javascript
复制
[root@localhost.localdomain:/root]
# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-04-13 21:50:59 CST; 54s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 14134 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           ├─14134 /usr/sbin/libvirtd
           ├─14244 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           └─14245 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

Apr 13 21:50:59 localhost.localdomain libvirtd[14134]: 2020-04-13 13:50:59.333+0000: 14150: warning : virQEMUCapsInit:955 : Failed to get host CPU cache info
Apr 13 21:50:59 localhost.localdomain libvirtd[14134]: 2020-04-13 13:50:59.694+0000: 14150: warning : virLXCDriverCapsInit:82 : Failed to get host CPU cache info
Apr 13 21:51:00 localhost.localdomain dnsmasq[14244]: started, version 2.66 cachesize 150
Apr 13 21:51:00 localhost.localdomain dnsmasq[14244]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth
Apr 13 21:51:00 localhost.localdomain dnsmasq-dhcp[14244]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
Apr 13 21:51:00 localhost.localdomain dnsmasq[14244]: reading /etc/resolv.conf
Apr 13 21:51:00 localhost.localdomain dnsmasq[14244]: using nameserver 192.168.0.1#53
Apr 13 21:51:00 localhost.localdomain dnsmasq[14244]: read /etc/hosts - 2 addresses
Apr 13 21:51:00 localhost.localdomain dnsmasq[14244]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Apr 13 21:51:00 localhost.localdomain dnsmasq-dhcp[14244]: read /var/lib/libvirt/dnsmasq/default.hostsfile
  • 在/etc/sysconfig/network-scripts/目录下创建ifcfg-br0文件,内容如下
代码语言:javascript
复制
[root@localhost.localdomain:/etc/sysconfig/network-scripts]
# vim ifcfg-br0 
BOOTPROTO=static
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
IPADDR=192.168.0.145
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
  • 修改原网卡配置文件,内容如下(修改之前最好先备份一下)
代码语言:javascript
复制
[root@localhost.localdomain:/etc/sysconfig/network-scripts]
# vim ifcfg-eno16777736 
BOOTPROTO=none
DEVICE=eno16777736
NM_CONTROLLED=no
ONBOOT=yes
BRIDGE=br0
  • 重启网络服务,使用 ifconfig 验证操作结果,多了一块网卡br0,能访问网络表示成功。
代码语言:javascript
复制
[root@localhost.localdomain:/etc/sysconfig/network-scripts]
# systemctl restart network
[root@localhost.localdomain:/etc/sysconfig/network-scripts]
# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.145  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::20c:29ff:fe4f:dcdb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:4f:dc:db  txqueuelen 0  (Ethernet)
        RX packets 30  bytes 4987 (4.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 4237 (4.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fe4f:dcdb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:4f:dc:db  txqueuelen 1000  (Ethernet)
        RX packets 53284  bytes 69822549 (66.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 36366  bytes 4039403 (3.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 8  bytes 688 (688.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 688 (688.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:7c:b0:34  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 1111 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

安装虚拟机

  • 创建创建虚拟机文件存放的目录和iso文件存放目录,准备操作系统安装镜像文件,在本文中将使用和宿主环境一样的CentOS7.0,把该文件放到 /data/kvm/iso 目录下
代码语言:javascript
复制
[root@localhost.localdomain:/etc/sysconfig/network-scripts]
# mkdir -p /data/kvm {kvm-mv,iso}
[root@localhost.localdomain:/data/iso]
# scp CentOS-7.0-1406-x86_64-DVD.iso root@192.168.0.145:/data/kvm/iso   <==我这里是从另外的机器上的镜像传过来的
  • 使用 virt-install 创建虚拟机(virt-install命令详情请点击这里
代码语言:javascript
复制
virt-install --vcpus=2 -n Centos7.0-1 -r 1024 --disk /data/kvm/kvm-mv/Centos7.0-1.img,format=qcow2,size=10 --network bridge=br0 --os-type=linux --os-variant=rhel7.0 --cdrom /data/kvm/iso/CentOS-7.0-1406-x86_64-DVD.iso --vnc --vncport=5910 --vnclisten=0.0.0.0
  • 操作结果显示:
代码语言:javascript
复制

[root@localhost.localdomain:/data/kvm/iso]
# virt-install --vcpus=2 -n Centos7.0-1 -r 1024 --disk /data/kvm/kvm-mv/Centos7.0-1.img,format=qcow2,size=10 --network bridge=br0 --os-type=linux --os-variant=rhel7.0 --cdrom /data/kvm/iso/CentOS-7.0-1406-x86_64-DVD.iso --vnc --vncport=5910 --vnclisten=0.0.0.0                                                                                             
WARNING  Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package.
WARNING  No console to launch for the guest, defaulting to --wait -1

Starting install...
Allocating 'Centos7.0-1.img'                                                                                                                                     |  10 GB  00:00:00     
Domain installation still in progress. Waiting for installation to complete.
  • 打开防火墙上的5910端口
代码语言:javascript
复制
[root@localhost.localdomain:/root]
# firewall-cmd --zone=public --add-port=5910/tcp --permanent
success
[root@localhost.localdomain:/root]
# firewall-cmd --reload
success
  • 使用VNC连接该虚拟机,进行虚拟机操作系统的安装,直接到VNC官网上下载最新版的VNC Viewer即可(这一步步骤请自行google)
  • 装完CentOS,重启系统。使用virsh list --all命令查看虚拟机状态,显示虚拟机正在运行状态,虚拟机就创建成功了。
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     Centos7.0-1                    running

创建windows虚拟机命令

代码语言:javascript
复制
virt-install --vcpus=2 -n windows_2012 -r 2048 --disk /data/kvm/windows2012.qcow2,format=qcow2,size=20 --network bridge=br0 --os-type=windows --os-variant=win2k12r2 --cdrom /data/iso/cn_windows_server_2012_r2_x64_dvd_2707961.iso --disk path=/data/iso/virtio-win-1.7.4.iso,device=floppy --vnc --vncport=5910 --vnclisten=0.0.0.0

简单配置KVM虚拟机

  • 使用vnc连接上虚拟机,进入虚拟机系统之后配置好网络(和物理机配置网络一样,这里就不描述了)
  • 配置在宿主端登录虚拟机shell。编辑 /etc/default/grub 文件(建议先备份一份),内容如下:
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# vim /etc/default/grub 
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"
  • 运行grub2-mkconfig -o /boot/grub2/grub.cfg 之后重启虚拟机 reboot
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Warning: Please don't use old title `CentOS Linux, with Linux 3.10.0-123.el7.x86_64' for GRUB_DEFAULT, use `Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-123.el7.x86_64' (for versions before 2.00) or `gnulinux-advanced-ccd3b657-a799-4562-86ed-cee7a3eded92>gnulinux-3.10.0-123.el7.x86_64-advanced-ccd3b657-a799-4562-86ed-cee7a3eded92' (for 2.00 or later)
Found linux image: /boot/vmlinuz-0-rescue-bf745f5a0bdc47c99aaf11abcf6934f3
Found initrd image: /boot/initramfs-0-rescue-bf745f5a0bdc47c99aaf11abcf6934f3.img
done
[root@localhost default]# reboot
  • 在宿主机上进入虚拟机控制台,想退出时使用 Ctrl 键+ ] (左方括号)键退出。
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     Centos7.0-1                    running


[root@localhost.localdomain:/data/kvm/iso]
# virsh console Centos7.0-1 
Connected to domain Centos7.0-1
Escape character is ^]

CentOS Linux 7 (Core)
Kernel 3.10.0-123.el7.x86_64 on an x86_64

localhost login: 

迁移虚拟机

虚拟机建好后,最大的好处就是任由我们折腾,而不用担心重装系统的麻烦。所以一定要知道虚拟机怎么复制迁移,这里有两种情况,一种是本机上镜像复制,另一种是将本机镜像迁移到其他服务器上

本机复制
  • 先关闭虚拟机
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     Centos7.0-1                    running
 
[root@localhost.localdomain:/data/kvm/iso]
# virsh shutdown Centos7.0-1
Domain Centos7.0-1 is being shutdown
  • 使用 virt-clone 克隆think8848-kvmbase为新的虚拟机
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# virt-clone -o Centos7.0-1 -n Centos7.0-1.bak -f /data/kvm/kvm-mv/Centos7.0-1.bak.img
WARNING  Setting the graphics device port to autoport, in order to avoid conflicting.
Allocating 'Centos7.0-1.bak.img'                                                                                                                                 |  10 GB  00:00:05     

Clone 'Centos7.0-1.bak' created successfully.
  • 使用 virsh list --all 查看
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     Centos7.0-1                    shut off
 -     Centos7.0-1.bak                shut off
  • 开启Centos7.0-1.bak,然后修改IP地址、主机名等(步骤略过)这里就克隆完成了
将虚拟机镜像迁移到其他服务器上
  • 关闭需要迁移的虚拟机
代码语言:javascript
复制
[root@localhost.localdomain:/data/kvm/iso]
# virsh shutdown Centos7.0-1.bak
Domain Centos7.0-1.bak is being shutdown
  • 先将虚拟机的配置文件和镜像文件传到目标服务器上相应的位置(具体看目标服务器虚拟机配置文件和镜像文件存放位置。)
代码语言:javascript
复制
[root@localhost.localdomain:/etc/libvirt/qemu]
# cd /etc/libvirt/qemu
[root@localhost.localdomain:/etc/libvirt/qemu]
# scp Centos7.0-1.bak.xml root@192.168.0.169:/etc/libvirt/qemu
The authenticity of host '192.168.0.169 (192.168.0.169)' can't be established.
ECDSA key fingerprint is fa:15:d8:74:b1:46:44:2a:5b:9a:67:31:d6:68:0d:8f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.169' (ECDSA) to the list of known hosts.
root@192.168.0.169's password: 
Centos7.0-1.bak.xml                                                                                                                                   100% 4102     4.0KB/s   00:00    

[root@localhost.localdomain:/etc/libvirt/qemu]
# cd /data/kvm/kvm-mv/

[root@localhost.localdomain:/data/kvm/kvm-mv]
# scp Centos7.0-1.bak.img root@192.168.0.169:/data/kvm
root@192.168.0.169's password: 
Centos7.0-1.bak.img                                                                                                                                   100% 1057MB  39.2MB/s   00:27    
  • 编辑Centos7.0-1.bak.xml 更改虚拟机镜像文件.img的路径,然后把UUID换为新的(直接使用这个在线工具生成吧)
代码语言:javascript
复制
[root@localhost.localdomain:/etc/libvirt/qemu]
# vim Centos7.0-1.bak.xml 
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit Centos7.0-1.bak
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>Centos7.0-1.bak</name>
  <uuid>fc7d1816-ceaf-40c5-947a-b293d4d734ef</uuid>   <===重新生成的uuid
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Westmere</model>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/data/kvm/Centos7.0-1.bak.img'/>  <===镜像路径
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
  • 定义新虚拟机并验证
代码语言:javascript
复制
[root@localhost.localdomain:/etc/libvirt/qemu]
# virsh define /etc/libvirt/qemu/Centos7.0-1.bak.xml 
Domain Centos7.0-1.bak defined from /etc/libvirt/qemu/Centos7.0-1.bak.xml
[root@localhost.localdomain:/etc/libvirt/qemu]
# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     Centos7.0-1.bak                shut off
 [root@localhost.localdomain:/etc/libvirt/qemu]
# virsh start Centos7.0-1.bak 
Domain Centos7.0-1.bak started
[root@localhost.localdomain:/etc/libvirt/qemu]
# virsh console Centos7.0-1.bak
Connected to domain Centos7.0-1.bak
Escape character is ^]

[root@localhost ~]# 
  • 测试ok,到此异地迁移虚拟机就完成了。
  • 最后一个问题,如果在克隆或迁移后想使用VNC连接,那就需要重新指定VNC的端口号,将 /etc/libvirt/qemu/Centos7.0-1.bak.xml 中的VNC端口号修改你需要的值即可。注:改了之后需要重新定义虚拟机
代码语言:javascript
复制
<graphics type='vnc' port='10000' autoport='no' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics

KVM管理

请产考kvm常用命令

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明:
  • 安装KVM
  • 安装虚拟机
  • 创建windows虚拟机命令
  • 简单配置KVM虚拟机
  • 迁移虚拟机
    • 本机复制
      • 将虚拟机镜像迁移到其他服务器上
      • KVM管理
      相关产品与服务
      专用宿主机
      专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档