灌溉梦想,记录脚步

SystemImager系统部署

系统部署是构建集群的第一步,如何快速,高效地部署系统是值得讨论的问题。本文描述基于开源软件SystemImager的系统部署方法并给出基本操作步骤。
SystemImager由Brian Elliott Finley创建。目前的维护者和项目小组的领导者是Andrea
Righi。SystemImager,是System Installation Suite的一部份,它能自动安装GNU/Linux,发布软件及快速部署生产环境。
SystemImager的一个主要特征是与发行版本无关,并且能支持不同种类的硬件。这一特征可
以让我们将任何种类的GNU/Linux(标准的发行版本或者自定义的版本)部署到目标机。此项目的主要目标是实现轻松,快捷的部署大量的节点。典型的应用环境包括计算机实验室,render farms(注:视觉农场,很多大片在后期制作所使用的图形渲染的工作站,类似于超级计算机),Internet服务器中心,数据库服务器中心,公司桌面环境等。SystemImager已经被证实了在集群计算环境中很流行,如网格计算和高性能计算。
另一个设计上便于GNU/Linux发行以及不依赖于硬件的特点是SystemImager处理的是基于系统镜像的文件。镜像以文件形式储存目录体系节构,即为样本节点的一个全面的快照,包含节点根文件系统中所有文件及目录。镜像以多种方法获得,包括从目标系统(golden client)中获得,或应用第三方工具直接在镜像服务器中生成。
SystemImage的工作原理:安装并配置好镜像服务器及样本节点(Golden Client),然后镜
像服务器捕捉样本节点的镜像并存储,最后启动目标节点并将镜像分发下去,完成对目标节点的部署。如下图所示:
镜像服务器Golden Client
镜像服务器
硬盘
Golden Client
系统映像
集群节点1 集群节点2 集群节点n
克隆系统
……
具体步骤:
前一阵在我的博客中针对低版本(SystemImager3.2)的安装及使用写了一些步骤,现在针对
现在的稳定版本4写一下具体操作步骤。
实验环境:服务器P4-1.7/256M,CentOS5.1;在另一台P4-2.8/1G的机器上安装几台虚拟机
作为节点,虚拟机分配256M内存,其中一台作为Golden Client,所装系统为CentOS5.2,大小
约1.6G;100Mbits局域网。
1,安装软件
从https://sourceforge.net/project/platformdownload.php?group_id=259下载需要的软
件版本和相应硬件架构的启动包。SystemImage用Perl开发,所以安装时对Perl模块有依赖性。
如AppConfig,MLDBM,XML-Simple等,需要时可以自己下载安装,此处不做详细说明。
镜像服务器中执行如下命令:
# rpm -ivh –nodeps systemconfigurator-2.2.11-1.noarch.rpm \
> systemimager-server-4.0.2-1.noarch.rpm \
> systemimager-common-4.0.2-1.noarch.rpm \
> systemimager-i386boot-standard-4.0.2-1.noarch.rpm \
> systemimager-i386initrd_template-4.0.2-1.noarch.rpm
Golden Client中执行如下命令:
# rpm -ivh –nodeps systemconfigurator-2.2.11-1.noarch.rpm \
> systemimager-common-4.0.2-1.noarch.rpm \
> systemimager-client-4.0.2-1.noarch.rpm \
> systemimager-i386initrd_template-4.0.2-1.noarch.rpm
镜像服务器及Golden Client中已经安装所需的Perl模块,所以加上–nodeps参数。如果此处
没安装有的话系统会提示依赖性,可根据提示下载并安装相应软件包。
2,Golden Client端准备
在golden client上,以root执行si_prepareclient命令。这会在/etc/systemimager目录下
生成许多文件,其中包含分区方案,文件系统类型等。si_prepareclient会启动一个rsync进程来让
这些文件传输到服务器上。
# si_prepareclient –server 192.168.1.63
服务器地址为192.168.1.63,此处也可以写服务器名称。
执行完上面的命令后系统会以命令行交互方式询问是否继续,其中会更改一些文件配置并启动
rsync进程,如果回答y继续的话,系统会告知已经准备完毕,可以在服务器端执行si_getimage
命令。
3,服务器端获取镜像
在镜像服务器上执行si_getimage,从golden client捕捉镜像。应用si_getimage,镜像服
务器从样本节点文件系统的根目录中将所有文件及目录备份成镜像存放
于/var/lib/systemimager/images中。
# si_getimage –golden-client 192.168.1.67 –image backup
此处要指明golden client的地址或主机名以及生成镜像的名称。在询问是否继续后系统会做出
反映。如果同意继续并无其它阻碍(防火墙)的话此时会复制golden client中的文件。笔者所装大
小约为1.6G的golden client系统(在VM中安装的CentOS5.2)来说复制过程大约10分钟,如
果是实机的话此处会表现出更好的性能。
4,准备分发镜像
镜像获得后存放于/var/lib/systemimager/images/backup,其中所包含的内容即为golden
client的系统文件及目录。
可以通过四种方式启动节点来分发镜像:
? 从网络启动(PXE)
? 从自动安装CD启动
? 从自动安装盘启动(USB设备或软盘)
? 从一个启动的系统启动
此处可按不同的硬件环境来选择不同的方法,如果网卡不支持PXE的话可以选择用USB设备或
CD进行启动后安装,当然不同的安装方法使用不同的命令创建启动工具。本文介绍了以PXE方式
启动安装,这种方法的优点是简约而时尚,当然,如果硬件并不支持PXE的话可以创建另外的启动
工具,对安装的节点来说只是通过不同的方式获得引导信息。
SystemImager的si_mkbootserver命令用来配置启动服务器。执行si_mkbootserver启动一个交
互过程,它会创建tftproot目录,配置tftp服务器,并执行一些测试看看功能是否正常。一旦
si_mkbootserver检测出错误,它会宣告失败并生成错误日志。更正错误后,可以重新执行
si_mkbootserver,不断重复这个过程直到配置成功。si_mkbootserver同时会调用
si_mkdhcpserver命令,用来为节点分配IP。这个命令简化了DHCP的配置, 它会询问需要的所有
信息来创建适合SystemImager安装的DHCP配置文件。
下面是笔者进行的配置:
# si_mkbootserver
WARNING: this script may modify the following files:
–> /etc/services
–> /etc/inetd.conf
–> /etc/xinetd.d/tftp
And can restart inetd, xinetd or tftp servers.
Do you wish to continue (y/[n])? y
Ok, continuing…
/var/lib/tftpboot exists and is a symlink to /usr/share/systemimager/boot.
Checking for a tftp server… found.
Checking if tftp server is H. Peter Anvin’s tftp server… yup – right on!
Checking for a running inetd… Not found.
Checking for a running xinetd… 3262.
Looking for update-inetd… not found.
Backing up /etc/xinetd.d/tftp…
Moving /etc/xinetd.d/tftp to /etc/xinetd.d/tftp.si_mkbootserver.bak1…done.
Restaring xinetd …
停止 xinetd: [确定]
启动 xinetd: [确定]
done.
Looking for a tftp client… found.
Checking for loopback interface… up.
Does tftp server work… yes.
Looking for a pxe daemon… which: no pxe in
(/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
not found.
WARNING: your bootserver will be configured without a pxe daemon!
(ignore this warning if you’re using a recent distro)
done.
What is the path to the pxelinux bootloader [/usr/lib/syslinux/pxelinux.0]?
Backing up /var/lib/tftpboot/pxelinux.cfg…
Moving /var/lib/tftpboot/pxelinux.cfg to
/var/lib/tftpboot/pxelinux.cfg.si_mkbootserver.bak24…done.
Copying /var/lib/tftpboot/X86PC/UNDI/linux-install/pxelinux.cfg to
/var/lib/tftpboot/pxelinux.cfg…Ok, configuration complete.
Once you’re DHCP server is configured, you should be all set.
Do you want to run si_mkdhcpserver to configure your DHCP server ([y]/n)? y
Welcome to the SystemImager "si_mkdhcpserver" command. This command will
prepare this computer to be a DHCP server by creating a dhcpd.conf file
for use with your ISC DHCP server (v2 or v3).
If there is an existing file, it will be backed up with the
.beforesystemimager extension.
Continue? (y/[n]): y
Trying to probe your DNS domain. Please wait…
Type your response or hit <Enter> to accept [defaults]. If you don’t
have a response, such as no first or second DNS server, just hit
<Enter> and none will be used.
What is your DHCP daemon major version number (2 or 3)? [3]:
What is the name of your DHCP daemon config file? [/etc/dhcpd.conf]:
What is your domain name? []: changzi.centos
What is your network number? [192.168.1.0]:
What is your netmask? [255.255.255.0]:
What is the starting IP address for your dhcp range? [192.168.1.1]: 192.168.1.50
What is the ending IP address for your dhcp range? [192.168.1.254]: 192.168.1.80
What is the IP address of your first DNS server? []:
What is the IP address of your default gateway? [192.168.1.254]: 192.168.1.1
What is the IP address of your image server? [192.168.1.254]: 192.168.1.63
What is the IP address of your boot server? [192.168.1.254]: 192.168.1.63
What is the IP address of your log server? []:
Use tmpfs staging on client? (If unsure, choose "n") [n]:
Do you want to use Flamethrower (multicast) to install your clients? [n]:
What… is the air-speed velocity of an unladen swallow? []:
Wrong!!! (with a Monty Python(TM) accent…)
Press <Enter> to continue…
Ahh, but seriously folks…
Here are the values you have chosen:
############################################################
###########
ISC DHCP daemon version: 3
ISC DHCP daemon config file: /etc/dhcpd.conf
DNS domain name: changzi.centos
Network number: 192.168.1.0
Netmask: 255.255.255.0
Starting IP address for your DHCP range: 192.168.1.50
Ending IP address for your DHCP range: 192.168.1.80
First DNS server:
Second DNS server:
Third DNS server:
Default gateway: 192.168.1.1
Image server: 192.168.1.63
Boot server: 192.168.1.63
Log server:
Log server port:
Flamethrower directory port:
Use tmpfs staging on client: n
SSH files download URL:
############################################################
###########
Are you satisfied? (y/[n]): y
The dhcp server configuration file (/etc/dhcpd.conf) file has been
created for you. Please verify it for accuracy.
If this file does not look satisfactory, you can run this command again
to re-create it: "si_mkdhcpserver"
WARNING!: If you have multiple physical network interfaces, be sure to
edit the init script that starts dhcpd to specify the interface that
is connected to your DHCP clients. Here’s an example:
Change "/usr/sbin/dhcpd" to "/usr/sbin/dhcpd eth1".
Depending on your distribution, you may be able to set this with the
"INTERFACES" variable in "/etc/default/dhcp", "/etc/default/dhcp3-server",
or similar, or in your dhcpd initialization script ("/etc/init.d/dhcpd",
"/etc/init.d/dhcp3-server", or similar).
Also, be sure to start or restart your dhcpd daemon. This can usually
be done with a command like "/etc/init.d/dhcpd restart" or similar.
Would you like me to restart your DHCP server software now? (y/[n]): y
关闭 dhcpd: [确定]
启动 dhcpd: [确定]
5,创建相应连接
如果镜像服务器中有多个镜像的话,就要告知哪一个节点安装哪一个镜像。si_addclients为镜
像的安装脚本创建符号链接。si_addclients改写镜像服务器的/etc/hosts
和/var/lib/systemimager/scripts/hosts文件。Hosts文件为自动安装客户端查阅他们的主机名提供
默认的机制。
在si_addclients的第一个配置部分,需要指出自动安装节点的主机名称样式。一个主机范围的
字段和一个域名用来定义我们要自动安装的节点的主机名;在第二个配置部分,将前一部分定义的
节点映射到到镜像;在第三个配置部分,si_addclients命令请求IP地址范围,这个IP保存在/etc/
hosts和/var/lib/systemimager/scripts/hosts文件中。当自动安装客户端启动时,它会从镜像服务
器中检索后面的文件并应用它查找主机名。
# si_addclients
Welcome to the SystemImager "si_addclients" utility
——————————————————————————–
This utility has 3 sections.
"Section 1" will ask you for your hostname information.
"Section 2" will allow you to create softlinks from each client hostname to
your "master" script in the "/var/lib/systemimager/scripts" directory.
Example: www297.sh -> web_server_image_v1.master
"Section 3" will ask you for IP address information that will be combined
with the hostname information provided in Section 1 to create entries in
"/etc/hosts" for each of these same clients. New entries will be appended
to the end of "/etc/hosts". If you specify new hostnames for existing IP
addresses, those entries will be re-written in place to reflect the new
host names.
Continue? ([y]/n): y
si_addclients — Section 1 (hostname information)
——————————————————————————–
The next series of questions will be used to create a range of hostnames.
You will be asked for your domain name, the base host name, a beginning
number, and an ending number.
For example, if you answer:
domain name = systemimager.org
host range = www7-www11,www20
Then the result will be a series of hostnames that looks like this:
www7.systemimager.org
www8.systemimager.org
www9.systemimager.org
www10.systemimager.org
www11.systemimager.org
www20.systemimager.org
What is your domain name? []: changzi.centos
What is the hosts range that you want me to use? []: www50-www80
I will work with hostnames: www50-www80
in the domain: changzi.centos
Are you satisfied? (y/[n]): y
si_addclients — Section 2 (soft links to master script)
——————————————————————————–
Would you like me to create soft links to a "master" script so that hosts:
www50-www80
can be autoinstalled with one of the available images? ([y]/n): y
Here is a list of available autoinstall scripts:
backup
Which script would you like these hosts to be installed with?
[backup]:
Your soft links have been created.
Press <Enter> to continue…
si_addclients — Section 3 (adding or modifying /etc/hosts entries)
——————————————————————————–
Your target machines need to be able to determine their host names from their
IP addresses, unless their host name is specified in a local.cfg file.
The preferred method for doing this is with DNS. If you have a working DNS
that has IP address to hostname resolution properly configured for your
target machines, then answer "n" here.
If you don’t have a working DNS, or you want to override the information in
DNS, then answer "y" here to add entries to the "/etc/hosts" file on your
image server. After adding these entries, the /etc/hosts file will be
copied to "/var/lib/systemimager/scripts" where it can be retrieved by your
target machines.
I will ask you for your clients’ IP addresses one subnet at a time.
Would you like me to continue? (y/[n]): y
si_addclients — Section 3 (adding or modifying /etc/hosts entries — continued…)
——————————————————————————–
Hostnames range is: www50-www80
What is the IPs address range (e.g. 10.0.0.1-10.0.0.100,10.0.0.101)?
[]:192.168.1.50-192.168.1.80
I will work with IP addresses: 192.168.1.50-192.168.1.80
and hostnames: www50-www80
Are you satisfied? (y/[n]): y
These entries have been added to /etc/hosts, and /etc/hosts has been copied
to /var/lib/systemimager/scripts for use by your auto-install clients.
Press <Enter> to continue…
si_addclients: successfully completed.
6,创建启动介质
见第4步骤中所描述的四种启动方式。此处所用的是从网络启动。使用以下命令,其它启动方
法使用的命令详情见systemimager手册。
# si_mkclientnetboot –netboot –clients www50-www80
[netboot] using the kernel and initrd.img for architecture: i386
[netboot] using the flavor: standard
7,启动节点安装镜像
最后就是启动节点,此处的节点均为虚拟机,从DHCP获得节点IP,下图看到的IP为79,因为
装了两台,另一台的地址即为上面配置的80。开始自动安装,到了这一步是最令人欣喜的。
下载内核及initrd
检测硬件
开始传送文件
传送完毕,等待重启。
重启系统,checking filesystems后再次重启即可进入安装完成的系统中了。这一步用了10
分钟左右。同样,如果是实机的话性能会有所提高。为了进行比较一下,我用光盘安在虚拟机中安
装了同样配置的系统,去掉启动后手工配置的时间是13分钟。可见用这种方法部署系统还是有优
势的。
8,其它
节点系统更新也是SystemImager的一个强大的功能,例如,想将100台服务器的内核更新,
只需将样本节点的内核升级,获得样本节点的镜像,在其它节点系统中执行si_updateclient,指定
镜像后,便可以很快的与新的镜像同步,数据或是配置文件也可以用同样的方法分发。
SystemImager用来确保安全的生产部署,在更新镜像前保存当前生产环境的镜像,这样就提供了处
理意外情况的机制。建立一个带有版本号的镜像池是一个很不错的选择,如果发现新的生产环境有
问题,简单地用si_updateclient命令回滚到上次正常的生产镜像即可。
除了SystemImager这种工具可以执行自动化安装外,像Red Hat的Kickstart等,基于预定
义的安装包清单来安装系统。然而,这种基于包的安装非常有限,因为它对非安装包的文件没有办
法自动化安装,如果重新编译的内核,加入了一些非安装包的软件,或者是更改具体的配置文件,
基于包安装的方法通常要求你写某些脚本或是编程来处理这些“特别案例”。相比之下,不如
SystemImager使用起来方便快捷。在安全方面SystemImager还提供基于OpenSSH方式的安装。
SystemImager应用多种方法启动目标节点,将Linux 操作系统和应用软件一次安装到位。采用分
布式的网络传输结构和点对点的通信(SystemImager提供用BitTorrent进行安装)方式可以有效
缓解由网络带宽引起的性能瓶颈。
总结:这个实验做得不是很流畅,中间遇到好多问题,但大部份都google解决了。最近半个
月以来一直在学习如何使用这个软件。主要的参考资料来源于
http://wiki.systemimager.org/index.php/Documentation,笔者下载并翻译了SystemImager
手册,放到了博客里,但是对于这个软件所提供的更强大的功能尚未深入探究。
《SystemImager手册》中提到过一些实际安装的性能:
Ole Holm Nielsen,物理系,丹麦技术大学报告:
在我们用SystemImager安装时,可以在6分钟内安装1.8G的镜像到18个客户端。请见The
NIFLHEIM SystemImager
Page(http://www.fysik.dtu.dk/CAMP/Niflheim/systemimager.html)。我们的服务器拥有
Gigabit网络,2GB的RAM,dual Intel Xeon 2.4 GHz,客户端是Intel P4和100 Mbit网络。
James Braid 报告: 从一个Celeron 700/512Mb服务器,100Mbit网络,我们做到了7~10
分钟安装大概1G的镜像。硬盘是设置了LVM的5x 120Gb Seagate Barracuda V(non
striped),文件系统为ReiserFS。
参考:
[1]http://wiki.systemimager.org/index.php/Quick_Start_HOWTO
[2]http://www.howtoforge.com/howto_linux_systemimager
PS:有

PXE安装linux

环境描述:
Network,HP Compaq V3212TU+1G Memory,Windows XP,VMware 6.0.3 build-80004,CentOS-5.1-i386-bin-DVD.iso
一、服务器自身配置状况:
编辑并查看我的服务器网络配置:
编辑IP,掩码,网关等
命令:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
编辑文件内容为:
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
HWADDR=00:0c:29:d7:3e:c3
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.0.172
GATEWAY=192.168.0.1
TYPE=Ethernet
编辑主机用的DNS服务器信息
命令:vim /etc/resolv.conf
编辑内容为(注释掉了第二行):
nameserver 202.118.176.2
#search localdomain
也可随时查看网络状态
命令:
ifconfig
查看到的内容:
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D7:3E:C3
inet addr:192.168.0.172  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed7:3ec3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:22076 errors:0 dropped:0 overruns:0 frame:0
TX packets:7576 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1403323 (1.3 MiB)  TX bytes:9996380 (9.5 MiB)
Interrupt:169 Base address:0x2000
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:79 errors:0 dropped:0 overruns:0 frame:0
TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6448 (6.2 KiB)  TX bytes:6448 (6.2 KiB)
查看无误,重启network服务
命令:service network restart
下面真正开始配置作为服务器的几个关键服务:DHCP,TFTP,NFS
二、所需的文件:
虚拟机的光驱设置为CentOS-5.1-i386-bin-DVD.iso文件
挂载光驱到目录/media/dvd
命令:
mkdir /media/dvd
mount /dev/hdc /media/dvd
安装w3m(感觉w3m比CentOS带的links更上手,仅仅是因为我以前用过w3m)
用w3m访问网站http://www.kernel.org/pub/linux/utils/boot/syslinux/
命令:
yum install w3m
w3m http://www.kernel.org/pub/linux/utils/boot/syslinux/
找到并下载包syslinux-3.63.tar.gz
解压获得文件pxelinux.0,放在TFTP根目录/tftpboot下
命令:
tar -zxvf syslinux-3.63.tar.gz
mkdir /tftpboot
cp /syslinux-3.63/pxelinux.0 /tftpboot/
复制isolinux目录下的isolinux.cfg文件为tftpboot/pxelinux.cfg下的default
命令:
mkdir /tftpboot/pxelinux.cfg
cp /media/dvd/isolinux/isolinux.cfg /tftpboot/mkdir /tftpboot/pxelinux.cfg/default
复制安装盘isolinux目录下的两个重要文件vmlinuz和initrd.img到TFTP根目录/tftpboot下
命令:
cp /media/dvd/isolinux/vmlinuz /tftpboot
cp /media/dvd/isolinux/initrd.img /tftpboot
复制安装盘isolinux目录下的所有.msg文件(boot.msg,initrd.msg,param.msg,general.msg,options.msg,rescue.msg)到TFTP根目录/tftpboot下
命令:
cp /media/dvd/isolinux/*.msg /tftpboot
三、配置DHCP
安装dhcp,dhcp-devel和dhclient三个包,三个包都可以在CentOS安装光盘的CentOS目录下找到
命令:
cd /media/dvd/CentOS
rpm -ivh dhcp-3.0.5-7.el5.i386.rpm
rpm -ivh dhcp-devel-3.0.5-7.el5.i386.rpm
rpm -ivh dhclient-3.0.5-7.el5.i386.rpm
编辑DHCP配置文件/etc/dhcpd.conf,可以从/usr/share/doc/dhcp*/dhcpd.conf.sample将这个配置文件的样例复制过来,这样编辑起来会更快些
dhcpd.conf配置的有关说明:
parameters(参数):
ddns-update-style 配置DHCP-DNS互动更新模式
default-lease-time 指定缺省租赁时间的长度,单位是秒
max-lease-time 指定最大租赁时间长度,单位是秒
hardware 指定网卡接口类型和MAC地址
server-name 通知DHCP客户服务器名称
get-lease-hostnames flag 检查客户端使用的IP地址
fixed-address ip 分配给客户端一个固定的地址
authritative 拒绝不正确的IP地址的要求
declarations(声明):
shared-network 用来告知是否一些子网络分享相同网络
subnet 描述一个IP地址是否属于该子网
range 起始IP 终止IP 提供动态分配IP 的范围
host 主机名称 参考特别的主机
group 为一组参数提供声明
allow unknown-clients或deny unknown-client 是否动态分配IP给未知的使用者
allow bootp或deny bootp 是否响应激活查询
allow booting或deny booting 是否响应使用者查询
filename 开始启动文件的名称,应用于无盘工作站
next-server 设置服务器从引导文件中装如主机名,应用于无盘工作站
option(选项):
subnet-mask 为客户端设定子网掩码
domain-name 为客户端指明DNS名字
domain-name-servers 为客户端指明DNS服务器IP地址
host-name 为客户端指定主机名称
routers 为客户端设定默认网关
broadcast-address 为客户端设定广播地址
ntp-server 为客户端设定网络时间服务器IP地址
time-offset 为客户端设定和格林威治时间的偏移时间,单位是秒。
命令:
cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcpd.conf
vim /etc/dhcpd.conf
我编辑好的文件内容为:
ddns-update-style none;
ignore client-updates;
allow booting;
allow bootp;
filename "pxelinux.0";
subnet 192.168.0.0 netmask 255.255.255.0 {
# — default gateway
option routers                  192.168.0.1;
option subnet-mask              255.255.255.0;
option nis-domain               "domain.org";
option domain-name              "domain.org";
option domain-name-servers      192.168.1.1;
# — Selects point-to-point node (default is hybrid). Don’t change this unless
# — you understand Netbios very well
range dynamic-bootp 192.168.0.128 192.168.0.254;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host ns {
next-server 192.168.0.172;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
}
检查文件/var/lib/dhcpd/dhcpd.leases,文件存在即可
如果考虑到安全问题,在多网卡的机器上可以编辑/etc/sysconfig/dhcpd文件来制定DHCP服务在那个设备上启动
命令:
vim /etc/sysconfig/dhcpd
编辑内容为:
# Command line options here
DHCPDARGS=eth0
重启DHCP服务
命令:
service dhcpd restart或/etc/rc.d/ini.d/dhcpd restart
四、配置TFTP
安装xinetd,tftp和tftp-server,可以在CentOS安装光盘的CentOS目录下找到
命令:
cd /media/dvd/CentOS
rpm -ivh xinetd-2.3.14-10.el5.i386.rpm
rpm -ivh tftp-0.42-3.1.el5.centos.i386.rpm
rpm -ivh tftp-server-0.42-3.1.el5.centos.i386.rpm
编辑TFTP的配置文件
命令:
vim /etc/xinetd.d/tftp
编辑内容为:
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
socket_type             = dgram
protocol                = udp
wait                    = yes
user                    = root
server                  = /usr/sbin/in.tftpd
server_args             = -s /tftpboot -c
disable                 = no
per_source              = 11
cps                     = 100 2
flags                   = IPv4
}
重启TFTP服务需要重启xinetd这个守护服务
命令:
service xinetd restart
四、配置NFS
安装NFS包nfs-utils和nfs-utils-lib,可以在CentOS安装光盘的CentOS目录下找到
命令:
rpm -ivh nfs-utils-1.0.9-24.el5.i386.rpm
rpm -ivh nfs-utils-lib-1.0.8-7.2.z2.i386.rpm
编辑NFS的配置文件
命令:
vim /etc/exports
编辑内容为(我的硬盘不够,只好省去复制的步骤,直接将光盘的挂载目录设为NFS的目录):
/media/dvd/ *(ro,async)
重启NFS服务
命令:
service nfs restart
或者可以不必重启整个服务,用下面命令更新NFS服务
命令:
exportfs -arv
最后也可以检查一下NFS目录的设置
命令:
showmount -e localhost
显示内容为:
Export list for localhost:
/media/dvd *
至此,三项重要的服务设置完毕,可以启动客户机进行安装了。
五、启动客户虚拟机安装CentOS
开启电源后按Esc,选择Network boot
客户机将利用主机的DHCP服务获得IP,利用TFTP服务加载安装所需文件
在出现boot:提示后根据需要输入linux text回车(文本模式安装)或直接回车(图形模式安装)
选择
安装语言English
键盘布局us
安装方式(Installation Method)选择NFS image
去掉IPv6的支持,IPv4选择自动获取方式(DHCP)
获得IP后选择NFS服务器的位置
NFS server name:192.168.0.172
CentOS directory:/media/dvd
回车后就会挂载服务器上的NFS网络硬盘,进入到熟悉的安装界面了,linux的安装我就不再赘述了。

linux系统远程启动

一、远程启动原理
客户端在启动前,既无操作系统,又无启动的软盘或者硬盘,它只有计算机的基本部件: CPU, 内存,主板等。但最重要的必须有网卡和启动的BootRom。客户机只能通过网络获得操作系统。Linux的无盘远程启动与Novell、WinNT下的无盘启动技术不一样,不是采用RPL( Remote Initial Program Loader),而是基于标准的BootP/DHCP和TFTP协议,并通过NFS文件系统建立文件系统。相对前两种,更具有其通用性和适应性。可以基于Linux系统远程启动Dos,Win95,WinNT和Linux客户。
由于自己的网卡(3c905b-tpo100,有BUG,按照etherboot的说明没修正成功,现在是用软盘代替网卡的EPROM,不好多说,还请自己直接到http://sourceforge.net/下载所需要源码等或者编译自己所需要源码.
下面简单介绍Linux启动原理:
1.客户端个人电脑开机后, 在 TCP/IP Bootrom 获得控制权之前先做自我测试.
2.Bootprom 送出 BOOTP/DHCP 要求而取得 IP.
3.如果服务器收到个人电脑所送出的要求, 就会送回 BOOTP/DHCP 回应,内容包括客户端的 IP 地址, 预设网关及开机影像文件.否则, 服务器会忽略这个要求.
4.Bootprom 由 TFTP 通讯协议从服务器下载开机影像文件。
5.个人电脑通过这个开机影像文件开机, 这个开机文件可以只是单纯的开机程式也可以是操作系统.
6.开机影像文件将包含 kernel loader 及压缩过的 kernel, 此 kernel 将支持NFS root系统。
7.远程客户端根据下载的文件启动机器.
一切OK!!! 简单吧!好用吧!下面具体介绍如何建立Linux远程启动.
二、远程启动实例
作为例子定义以下:
Linux 服务器: server(IP:192.168.0.254)
第一个客户机:pc01(IP:192.168.0.1)
第二个客户机:pc02(IP:192.168.0.2)
所有远程启动客户目录:/client
第一个远程启动客户机目录:/client/pc01
第二个远程启动客户机目录:/client/pc02
支持rsh
首先重新编译Linux内核。
make menuconfig
注意网络的支持,NFS-Root 支持,BootP(DHCP) 的支持必须包括在内。
make clean
make dep
make bzImage
make modules
make modules_install
以上命令之后,你会发现客户端启动的影像文件在 /usr/src/linux/i386/boot 目录中,编译出新内核之后,用 mknbi-linux(mknbi-linux bzImage vmlinuz.nb)处理,将vmlinuz.nb 放在/tftpboot下即可。
然后执行以下命令:mknod /dev/nfsroot b 0 255 修改启动设备,让其指向NFSRoot.
下面为远程客户机修改服务器,用于建立远程客户机的文件系统。
在服务器/etc/exports 中加入:
/client/pc01 192.168.0.1(rw, no_root_squash)
/client/pc02 192.168.0.2(rw, no_root_squash)
/home 192.168.0.1/255.255.255.0(rw,no_root_squash)
使用DHCP,在/etc/dhcpd.conf 加入对远程客户的支持,其中server地址是192.168.0.254:
# dhcpd.conf
# Global options
option domain-name "server.ustc.edu.cn";
option domain-name-servers 202.38.64.1;
# Intranet
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.1 192.168.0.250;
default-lease-time -1;
# option root-path "/client/pc01";
option dhcp-server-identifier 192.168.0.254;
option broadcast-address 192.168.0.255;
# option routers 198.168.0.254;
server-name "server";
next-server 192.168.0.254;
filename "/boot/vmlinuz";
host pc01{
option root-path "/client/pc01";
hardware ethernet 00:01:02:96:65:92;
fixed-address 192.168.0.1;
}
host pc02{
option root-path "/client/pc02";
hardware ethernet 00:01:02:98:92:55;
fixed-address 192.168.0.2;
}
}
subnet 202.38.64.0 netmask 255.255.255.0 {
}
请参阅:DHCP-Howto
在服务器上建立远程客户机目录:
/client
/client/pc01
/client/pc02
下面说一下pc01的做法.
pc01目录下包括:bin,dev,etc,home,lib,mnt,proc,root,sbin,tmp,usr,var目录。
我们是把bin,dev,etc,lib,sbin,usr,var直接完全复制过来,home,mnt,proc,root,tmp是新建的空目录,(当时是重新安装了一个包括DHCP,NFS,RSH等支持的尽量小、尽量干净的Linux,然后完全将它们完全复制过来,这样一来必然有很多不必要的东西可以删除,可惜现在水平不照,按参考文献做不成功,只好用了这种省事的法子:(,等以后慢慢删除不必要的文件)
注意必须修改/client/pc01/etc/rc.d 启动文件:改 mount -avt nonfs 为 mount -av.允许使用NFS Root文件系统。(我们的是Debian Woody,这个文件变为了/client/pc01/etc/init.d/mountall.sh,并且我们的是mount -a -t noproc,nosmbfs )
以如下格式修改/client/pc01/etc/fstab文件:
192.168.0.254:/client/pc01 / nfs defaults,rw 0 0
192.168.0.254:/home /home nfs rw,bg 0 0
proc /proc proc defaults 0 0
修改client/pc01/etc/hostname:
pc01
修改client/pc01/etc/hosts:
127.0.0.1 localhost
192.168.0.254 pc00
192.168.0.1 pc01
192.168.0.2 pc02
修改client/pc01/etc/hosts.equiv:
+
server
pc01
pc02
修改client/pc01/etc/mtab:
192.168.0.254:/client/pc01 / nfs rw 0 0
proc /proc proc rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
192.168.0.254:/home /home nfs rw,bg,addr=192.168.0.254 0 0
修改client/pc01/etc/network/interfaces
face eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
接下来必须建立一个链,将远程客户机的IP地址链接到/client/pc01目录。
$:ln -s pc01 192.168.0.1
做pc02则可以复制pc01过来,并将上述几个文件修改一下.
下面在个人目录下设置rsh支持:
home/username/.rhosts
192.168.0.254 username
192.168.0.1 username
192.168.0.2 username
最后请确认服务器上的nfsd,tftpd 和 bootpd daemons是否启动。
一切完事!远程启动很快十秒钟左右就可享用Linux.
关于NFS,TFTP,BOOTP(DHCP)的设置请参阅How-to.
一点经验之谈, 最好把client的所有文件放在一个独立分区里面,这样就可以在这给分区里装上一个基本的系统(就像普通的安装一样).然后作为修改的基础(建议使用Debian,比较易于裁剪). 如果以后需要在客户端安装什么软件的话,可以这样做:
chroot /client/pc01
dselect或者apt -get

linux无盘桌面

由于公司运营监视的需要,要一套统一标准的桌面来进行运营监视工作,所以要建立一个Linux桌面系统的无盘工作站,经过多次测试,发现debian真是一个非常好的系统,整个环境由服务器到客户端全部都用debian实现,通过DHCP以及PXE配合,所需要的功能基本都能实现。
服务器的搭建
首先安装debian,由于是服务器所以对于分区有严格要求。分区如下:
/ 300M 存放最小基本系统
swap RAMx2 但不用大于4G
/usr 2G 存放系统高级功能
/var 2G 存放日至
/tmp 300M 临时文件
/client 10G 存放客户端系统
/home 剩余所有 存放客户端用户目录和数据
安装完以后开始安装CLIENT需要的环境。在同一服务器里开始安装第二个debian系统。安装的时候到分区的时候分区不要有任何变动,选择以前的/client那个分区作为这个系统的/分区,开始安装,安装过程中选上桌面系统。安装完成后牵涉到grub,这个就无所谓了,只要让grub安装到mbr里。安装完成以后重新启动进入非桌面系统的debian,由于刚才已经破坏了服务器系统的grub,所以进入这个系统后运行:
grub-install (hd0,0)
让这个系统的grub重新正式工作,至于桌面系统的debian就暂时不用管了,因为最终是给客户端使用的。到此系统已经安装完成,开始设置服务器。
既然使用的是dhcp+pxe,那么服务器肯定就必须有TFTP服务,使用:
aptitude install tftpd-hpa
安装tftp服务,设置/etc/inetd.conf文件,肯定有如下内容:
tftp dgram udp wati root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /home/tftproot
这个设置是让tftp的根目录为/home/tftproot,然后到:http://archive.ubuntu.com/ubuntu/dists/dapper/main/installer-i386/current/images/netboot/ 里下载pxelinux.0这个文件,这个文件到处都有,在google里输入这个一下就能找到。把这个文件放到/home/tftproot目录里,另外需要一个linux的内核,由于这个内核将来要直接给桌面系统使用,所以我从ubuntu系统里弄了一个内核过来,因为ubuntu的内核做桌面非常好。当然其实主要是要ubuntu内核的源代码,因为外面成形的内核都不支持网络DHCP以及nfsroot。把ubuntu的内核源代码拿到手以后,在自己的服务器环境安装上gcc等必须的编译工具。同时安装上kernel-package这个包,开始编译内核,内核必须包含如下配置:
Networking —> Networking options —> IP:kernel level autoconfiguration以及 IP:DHCP support 这两个都必须直接编译进内核,不能以模块的形式存在。
由于我的client都是8139的网卡,所以我把Device Drivers里,网络设备中8139网卡编译进内核。
内核选项完成以后运行如下命令:
make-kpkg kernel-image
完成以后会在/usr/src里生成一个linux-image-2.6.xxxxxx.deb的文件。把这个文件放到/client目录里安装,命令:
chroot /client
dpkg -i /linux-image-2.6.xxxxxx.deb
exit
安装完后,把这个新内核放到/home/tftproot目录里:
cp /client/boot/vmlinuz-2.6.xxxxx /home/tftproot/bzImage
启动TFTP服务:
/etc/init.d/openbsd-inetd restart
在windows系统下输入如下命令应该能下载到指定文件:
tftp x.x.x.x get pxelinux.0
tftp x.x.x.x get bzImage
表示TFTP服务已经成功安装,并且运行正常。现在开始设置pxelinux的配置文件。因为pxelinux默认会读取/home/tftproot/pxelinux.cfg/default文件,所以我们需要手工配置:
cat <<EOF > /home/tftproot/pxelinux.cfg/default
TIMEOUT 100
PROMPT 1
DEFAULT linux
LABEL linux
kernel bzImage
append vga=0x317 ip=dhcp nfsroot=10.4.2.20:/client root=/dev/nfsroot rw —
LABEL single
kernel bzImage
append vga=nomal ip=dhcp nfsroot=10.4.2.20:/client root=/dev/nfsroot ro – single
EOF
由于我的服务器的IP为10.4.2.20,所以这里是请根据实际情况修改。
到此pxelinux已经配置完成,现在开始设置DHCP,DHCP非常简单,由于设置DHCP不是本文的讨论范围,我这里就只介绍重点,就是在DHCP分配的IP设置里增加如下:
next-server 10.4.2.20;
filename "pxelinux.0";
就可以了。这里是告诉网卡TFTP的服务器以及需要自举的文件。
配置完成DHCP就开始配置NFS服务了,NFS服务默认debian可能没有安装,但安装也简单:
aptitude install nfs-kernel-server
安装完编辑/etc/exports文件,内容如下:
/home *(rw,no_subtree_check,no_root_squash)
/client *(rw,no_subtree_check,no_root_squash)
完成后 /etc/init.d/nfs-kernel-server restart重新启动让NFS共享出去的目录生效,然后修改客户端配置文件,编辑/client/etc/fstab取消所有的硬盘分区,只留下proc,同时添加如下文件系统:
10.4.2.20:/client / nfs rw 0 0
/dev/shm /tmp tmpfs rw 0 0
/dev/shm /var/run tmpfs rw 0 0
第一行是让/目录挂到服务器的/client目录,第二行是因为/tmp是一个存放临时文件的地方,所以不少锁文件都是放到这个目录里,所以必须让每个客户端有自己的空间,并且由于/tmp存放的文件非常少,所以挂到一个临时内存空间里。同样/var/run是存放系统进程服务的部分pid文件的,同样不能混合,所以该目录也挂到临时内存空间里。客户端由于还面临计算机名等问题,由于所有客户端不能使用相同的计算机名,所以为了让系统每次启动后又自己的名称,所以这里使用一个脚本,让系统启动的时候自动运行,脚本如下:
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
case $1 in
start)
echo -n "set hostname:"
mount -t tmpfs /dev/shm /var/workdata
HOST_NAME=ws`date ‘+%H%m%S’`
echo $HOST_NAME > /var/workdata/hostname
echo "127.0.0.1 localhost" > /var/workdata/hosts
echo "127.0.0.1 $HOST_NAME" >> /var/workdata/hosts
echo "OK"
;;
stop)
umount /var/workdata
;;
esac
脚本里根据启动时间来作为计算机名,由于精确到秒,所以很少能碰到电脑名会相同的情况。到此无盘工作站的服务器已经建立完成。
客户端的设置
客户端最重要的是打开网卡的PXE功能,公司使用的品牌电脑,所以网卡都带了PXE和PBL芯片,设置为PXE的模式,这样系统就能自动启动进入无盘的Linux状态了。

dd命令实例

dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝
的同时进行指定的转换。
1. 命令简介
dd 的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m
if=file
输入文件名,缺省为标准输入。
of=file
输出文件名,缺省为标准输出。
ibs=bytes
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
cbs=bytes
一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks
从输入文件开头跳过 blocks 个块后再开始复制。
seek=blocks
从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。
count=blocks
仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
conv=conversion[,conversion…]
用指定的参数转换文件。

转换参数:
ascii 转换 EBCDIC 为 ASCII。
ebcdic 转换 ASCII 为 EBCDIC。
ibm 转换 ASCII 为 alternate EBCDIC.
block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。
unblock 使每一行的长度都为 cbs ,不足部分用空格填充。
lcase 把大写字符转换为小写字符。
ucase 把小写字符转换为大写字符。
swab 交换输入的每对字节。
noerror 出错时不停止。
notrunc 不截短输出文件。
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
2.实例分析
2.1.数据备份与恢复
2.1.1整盘数据备份与恢复
备份
将本地的/dev/hdx整盘备份到/dev/hdy :dd if=/dev/hdx of=/dev/hdy
将/dev/hdx全盘数据备份到指定路径的image文件:dd if=/dev/hdx of=/path/to/image
备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:dd if=/dev/hdx | gzip
>/path/to/image.gz
恢复
将备份文件恢复到指定盘:dd if=/path/to/image of=/dev/hdx
将压缩的备份文件恢复到指定盘 :gzip -dc /path/to/image.gz | dd of=/dev/hdx
2.1.2.利用netcat远程备份
在源主机上执行此命令备份/dev/hda:dd if=/dev/hda bs=16065b | netcat < targethost-IP >
1234
在目的主机上执行此命令来接收数据并写入/dev/hdc:netcat -l -p 1234 | dd of=/dev/hdc
bs=16065b
以下两条指令是目的主机指令的变化分别采用bzip2 gzip对数据进行压缩,并将备份文件保存在当
前目录 :
netcat -l -p 1234 | bzip2 > partition.img
netcat -l -p 1234 | gzip > partition.img
2.1.3.备份MBR
备份:
备份磁盘开始的512Byte大小的MBR信息到指定文件:dd if=/dev/hdx of=/path/to/image
count=1 bs=512
恢复:
将备份的MBR信息写到磁盘开始部分:dd if=/path/to/image of=/dev/hdx
2.1.4.备份软盘
将软驱数据备份到当前目录的disk.img文件:dd if=/dev/fd0 of=disk.img count=1 bs=1440k
2.1.5.拷贝内存资料到硬盘
将内存里的数据拷贝到root目录下的mem.bin文件:dd if=/dev/mem of=/root/mem.bin
bs=1024
2.1.6.从光盘拷贝iso镜像
拷贝光盘数据到root文件夹下,并保存为cd.iso文件:dd if=/dev/cdrom of=/root/cd.iso
2.2.增加Swap分区文件大小
创建一个足够大的文件(此处为256M):dd if=/dev/zero of=/swapfile bs=1024 count=262144
把这个文件变成swap文件:mkswap /swapfile
启用这个swap文件:swapon /swapfile
在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行:/swapfile swap
swap defaults 0 0
2.3.销毁磁盘数据
利用随机的数据填充硬盘:dd if=/dev/urandom of=/dev/hda1
在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作
无法执行。
2.4磁盘管理
2.4.1.得到最恰当的block size
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
2.4.2测试硬盘读写速度
通过两个命令输出的执行时间,可以计算出测试硬盘的读/写速度:
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
hdd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
2.4.3.修复硬盘
当硬盘较长时间(比如一两年年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到
这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致
硬盘报废。下面的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
dd if=/dev/sda of=/dev/sda

cherokee

cherokee的官方网址是:http://www.cherokee-project.com,你可以从这里下载到最新的

源代码,找到它详细的说明文档。

下面这段文字简单翻译自官方的说明文档

cherokee是一个高效的、轻量级的、高稳定性的、容易配置的web服务器 …

cherokee支持很多技术:FastCGI , SCGI , PHP, CGI , X-Sendfile , TLS , SSL …

cherokee支持虚拟主机、权限认证、负载均衡 …

cherokee的日志格式与apache是兼容的 …

继续阅读 »

中国每年出生人口数 1976年 – 2000年 历年男女性别比

年份 比例 总数 男 女
1976年出生 50.92% 20,491,797 10,435,196 10,056,601
1977年出生 50.86% 17,931,155 9,119,685 8,811,470
1978年出生 50.55% 18,831,591 9,519,345 9,312,246
1979年出生 50.45% 18,924,822 9,548,059 9,376,763
1980年出生 50.64% 18,393,809 9,315,481 9,078,328
1981年出生 51.00% 19,122,938 9,752,137 9,370,801
1982年出生 51.02% 23,100,427 11,786,950 11,316,732
1983年出生 51.21% 20,065,048 10,275,677 9,789,371
1984年出生 51.53% 20,313,426 10,468,201 9,845,225
1985年出生 51.88% 20,429,326 10,598,460 9,830,866
1986年出生 51.85% 23,190,076 12,023,710 11,166,366
1987年出生 53.87% 25,282,644 13,619,530 12,663,114
1988年出生 52.00% 24,576,191 12,779,621 11,796,570
1989年出生 52.16% 25,137,678 13,110,848 12,026,830
1990年出生 52.69% 26,210,044 13,811,030 12,399,014
1991年出生 53.16% 20,082,026 10,674,963 9,407,063
1992年出生 53.40% 18,752,106 10,014,222 8,737,884
1993年出生 53.53% 17,914,756 9,590,414 8,324,342
1994年出生 53.83% 16,470,140 8,866,012 7,604,128
1995年出生 54.08% 16,933,559 9,157,597 7,775,962
1996年出生 54.24% 15,224,282 8,257,145 6,967,137
1997年出生 54.64% 14,454,335 7,897,234 6,557,101
1998年出生 54.97% 14,010,711 7,701,684 6,309,027
1999年出生 55.09% 11,495,247 6,332,425 5,162,822
2000年出生 54.08% 13,793,799 7,460,206 6,333,593