免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1247 | 回复: 0
打印 上一主题 下一主题

Linux开机流程分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-23 22:17 |只看该作者 |倒序浏览

    开机不是只要按一下电源钮而关机只要关掉电源钮就可以了吗?有何大学问?话是这样没错啦,但是由於 Linux 是一套多人多工的作业系统,你难保你在关机时没有人在线上,如果你关机的时候碰巧一大群人在线上工作,那会让当时在线上工作的人马上断线的!那不是害死人了!一些资料可以无价之宝哩!另外,与 DOS 环境不同的是, Linux 在执行的时候,虽然你在画面上只会看到黑压压的一片,完全没有任何画面,但其实他是有很多的程式在背景底下执行的,例如邮件程式、浏览器主机程式等,你如果随便关机的话,是很容易伤害硬碟及资料传输的动作的!所以在 Linux 下关机可是一门大学问喔  

    既然开机是很严肃的一件事,呵呵,那我们来了解一下整个开机的过程吧!好让大家比较容易发现开机过程里面发生错误的地方,与解决之道!不过,由於开机的过程中,那个 Boot Loader 使用的软体可能不一样,例如 Mandrake 9.0 已经同时提供 Lilo 与 Grub 这两个开机管理程式,虽然 lilo 与 grub 的启动过程或许有点不太相同,但是他的原理则都是一样的哩!这里我们先介绍较老牌的 Lilo 罗! Lilo 是什么?!简单的说,他是 LInux LOader 的缩写,就是 Linux 开机时候载入的咚咚就对了!这东西可是控制了你的多重开机的命脉!底下的篇幅会再分别介绍这两套开机管理程式!底下先开始来谈谈 Linux 是如何开机的呢?基本的流程为:
                        载入 BIOS 的硬体资讯;
                        读取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)开机资讯;
                        载入 Kernel 的作业系统核心资讯;
                        Kernel 执行 init 程式并取得 run-level 资讯;
                        init 执行 /etc/rc.d/rc.sysinit 档案;
                        启动核心的外挂式模组 (/etc/modules.conf);
                        init 执行 run-level 的各个批次档( Scripts );
                        init 执行 /etc/rc.d/rc.local 档案;
                        执行 /bin/login 程式;
                        登入之後开始以 Shell 控管主机。
    大概的流程就是上面写的那个样子啦,而每一个程序的内容主要是在干嘛呢?底下就分别来谈一谈吧!
    寻找 BIOS 载入硬体资讯:
    稍微有 PC 硬体经验的人们大概都知道 BIOS ( Basic Input/Output Setup ) 的作用!他是第一个被载入电脑的资料!你主机的 CPU 资料、开机顺序、硬碟大小、晶片组工作状态、PnP 的开启与否、记忆体的时脉等等等...这都记录在 BIOS 当中!所以啦,开机之後,系统会先去找这个东西;
    可开机硬碟的 MBR 读取 Kernel loader:
    再来呢?呵呵!当然就是硬碟的开机资料罗!由於个人电脑的系统在读完 BIOS 之後,会先去读取第一个开机硬碟的第一个磁区(就是 master boot record, MBR 罗!),还记得这个 MBR 吗?嗄!忘记了?赶紧回到第二篇好好的再复习一遍ㄋㄟ?。而这个磁区主要就是在记录开机的资讯!还记得上面提到的 Lilo 及 grub 吧?他的纪录就是在这里罗!所以罗,这个时候 Lilo 纪录的资讯就会被读出来,系统并依 Lilo 的资讯去不同的系统开机,这也就是多重开机设定的地方啦。
 
    好了,先再来回忆一下,如果你是以 grub 程式开机的话,那么在开机的时候会显示什么资料呢?呵呵!会显示蛮多的开机选单,没错?就是『选单』,然後选择了你的选择项目之後,系统就会跑到该磁区去读取该作业系统的核心罗!呵呵!所以一个好的 boot loader 会具有两个功能,就是:
 
    选单功能 ( menu )
    指向功能 ( pointer )
 
    那么为何要有 loader 呢?我想,我们得先来探讨一下这个话题才行!要探讨之前先来了解一下,晓不晓得 Windows 与 Linux 的档案格式一不一样?!呵呵!当然不一样对不对,好了,那么再来说一说,请问,你的电脑怎么知道你的硬碟的资料是什么系统?哈哈!那就是 loader 的主要功能罗!在你能使用系统之前,一定需要载入核心对吧!?但是怎样让你的硬体认识核心呢?那就是 kernel loader 的主要功能了!所以这里需要提出的是, Linux 的 loader ( lilo 或 grub ) 是可以认识 windows 的核心档案的,但是 Windows 的 loader 却不认识 Linux 的核心档案,因此,作为一个多重开机的设定 loader ,就无法使用 Windows 所提供的 loader 罗!由於需要让系统认识你的 kernel ,因此,就需要 kernel loader 啦!这样想就对啦!
     
    这一部份的资讯我们在後续的章节会再提及!
    载入核心( Kernel ):
    好了,等我们在 grub 的选单中选择了 Linux 这个系统,然後主机跑到 Linux 所在的硬碟之下,就开始将他的核心载入罗。在 Linux 的系统下,通常开机的核心都摆在 /boot 底下,因此,这个时候的 boot loader 就会到 /boot 去寻找相关的核心。我们的 kernel 名称通常就是 /boot/vmlinuz-xxxx 的格式,目前 Mandrake 9.0 的核心版本为 2.4.19,而 Mandrake 自行释出的版本为 2.4.19-16mdk ,所以,使用 uname ━r 会出现 2.4.19-16mdk 呦!然後 MDK 9.0 预设核心档案就是: /boot/vmlinuz-2.4.19-16mdk 这一个!好了,载入这个档案再往下继续吧!
    核心执行 init 并由 /etc/inittab 取得系统登入状态:
    核心载入之後,由核心执行的第一个程式就是 /sbin/init 罗!而这个程式第一个目标当然就是确定主机是要以怎样的情况登入!这个时候就必须要以 /sbin/init 来载入 /etc/inittab 的资讯啦!而 Linux 共有几种登入模式呢?嗯!这里似乎有需要说明一下 Linux 有哪些登入的状态!如果你进入 Linux 的 /etc/inittab 档案的话( 可以使用 vi 啦 ),你应该会看到如下的资讯:
  [root @test /root]# vi /etc/inittab
    #   0 - halt (Do NOT set initdefault to this)  关机  
    #   1 - Single user mode  单人使用(系统有问题时候的登入状况)  
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多人但无网路  
    #   3 - Full multiuser mode 文字界面登入的多人系统  
    #   4 - unused      系统保留  
    #   5 - X11           X-Windows 图形界面登入的多人系统  
    #   6 - reboot (Do NOT set initdefault to this)  重新开机  
    #  
    id:3:initdefault:
 
    上面显示的就是目前可以登入的状态了(就是 run-level 啦!),共有 0?6 的登入状态,其中,我们比较常使用的是 3 与 5 , 因为我们需要 Linux 是多人多工的情况,而较常登入的状态就是文字与图形界面啦!所以这里需要设定成 3 或者是 5 ,千万不要设定成 0 或者是 6 喔!不然系统会一直直接重新开机或者是直接关机....预设的系统登入在上面这个表格的最底下一行纪录著!就是『id:3:initdefault 』那一行!注意喔!因为 VBird 预设是以文字界面来登入,所以才会是 3 ,如果你要改成图形界面登入的话(请确定你的 X-windows 没有问题),那么就将 /etc/inittab 里面的上面那一行,将 3 改成 5 即可罗!
    那么什么是『单人维护模式 ( run-level 为 1 )』?如果你有玩过 Windows 的话,那么你在开机的时候如果按下 F8 时,不是会出现一些什么『安全模式』啦、『正常开机』啦或『 MS-DOS 模式』等等的进入 Windows 的状态吗?尤其是当你不正常关机的时候, Windows 预设就会以『安全模式』来启动 Windows 罗!Windows 的『安全模式』几乎不载入一些复杂的模组,让你的 Windows 一定可以开机成功!那么 Linux 的维护模式状态即是使用单人模式( 就是 run_level 为 1 啦!)所以说, Linux 的登入情况是如何呢?呵呵!没错,就是在这里载入的啦!
    init 的第一个执行内容 /etc/rc.d/rc.sysinit :
    确定了登入状态之後,再来当然就是需要将主机的资讯给他读进去 Linux 系统罗!而 Linux 系统的第一个资料内容就是 /etc/rc.d/sysinit 这个档案啦!如果你有空进入这个档案去看看的话,会发现这个档案的内容包括了==>设定预设路径( PATH )、设定主机名称、执行 /etc/sysconfig/network 所记录的网路资讯、挂载 /proc 这个保存在记忆体当中的主机基本讯息、以及其他几个 Linux 作业系统最基本的几个资讯!大抵来说,他的基本工作是:
  
    1.设定预设路径:( PATH  )
    2.设定网路状态:系统会再去读取 /etc/sysconfig/network,并将该档案内的资料,如 NETWORKING, FORWARD_IPV4, HOSTNAME, DOMAINNAME, GATEWARY, GATEWAYDEV 等等的设定读入系统中。
    3.启动系统的置换空间(简单的可以想成是虚拟记忆体): swapping
    4.检查档案系统:这个时候系统会去检查一些可能会存在的目录,例如 /fsckoptions 与 /forcfsck 及 /fastboot 等等的目录,当你的系统有不正常关机的现象时(例如突然的断电等等),那么 Linux 将会自动的强制去检查 root 的档案系统 ( checking root filesystems )。简单的想一想,就好像是 Windows 系统下,当你不正常关机时,在开机的过程中就会出现扫瞄硬碟的情况相同啦!
    5.周边设定与系统设定的参数 (/proc ):在 Linux 或者是 Unix 系统中,你会在根目录中发现一个很奇怪的磁区,那就是 /proc 罗!其实这个目录是记录在记忆体当中的,每次开机的时候就会被建置起来。他的主要功能是记录主机的一些周边设备的最新资料状况!例如网路周边啦、输入输出周边啦等等的。没事的话,不要到里面乱砍喔!会有问题
    6.设定 Plug and Play ( PNP )的一些参数资料;
    7.清除 /etc/mtab ;
    8.mount root 及 /proc 档案系统 :好了,将一些资料都设定好之後,当然就是需要将资料写下来罗!这个时候就会将 root 与 /proc 资料给他 mount 上档案系统啦!
    8.决定是否使用模组, 载入模组
    9.检查档案系统 :与前面相同的,当前面的 /fastboot 检查的旗标开启之後,就会以 fsck 检查你的其他磁区罗! ( 使用 fsck )
    10.挂上其它档案系统
    11.设定 console 字型
    12.打开 quota
    13.清除不必要的档案, 如 lock, pid
    14.设定 clock
    15.serial port 初始化
    16.将开机讯息经由 dmesg 放入 /var/log/dmesg 中
 
    如此一来,在 /etc/rc.d/rc.sysinit 就已经将基本的系统设定资料都写好了,也将系统的资料设定完整!而如果你想要知道到底开机的过程中发生了什么事情呢?那么就使用第十六章学会的 dmesg 就可以知道罗
    启动核心的外挂式模组 (/etc/modules.conf):
    由於我们的核心越来越聪明,所以呢,我们可以选择使用模组的型态 ( 这个在後面也会继续说明 ) 来进行驱动程式的载入!那么如果系统原本找不到的模组 ( 例如早期的 via-rhine 晶片组 ) 就可以在这个档案里面 /etc/modules.conf 写入呢!
    init 执行 run-level 的各个 scripts :
    由於不同的 run-level 所需要载入的模组并不相同,所以系统早就为不同的 run-level 设定了一些批次档( scripts )来做这件事罗!而 run-level 早就在前面的时候以 /etc/inittab 当中取得罗!好了,如果你知道如何进入到 /etc/rc.d 的目录中的话,那么你将会看到该目录下应该有八个目录跟三个档案,目录 rc0.d ~ rc6.d 分别代表了各个 run-level 的 scripts !而在这些目录中的档案都是以 S 及 K ( 大写 ) 为开头的档案,并接两位数的数字与该服务的名称所组合而成的!如下所示为 Mandrake 9.0 的 /etc/rc.d/rc3.d 的内容:
  [root @test /root]# ll /etc/rc.d/rc3.d
   total 0
   lrwxr-xr-x    1 root     root           16 Oct 19 11:05 K55routed -> ../init.d/routed*
   lrwxr-xr-x    1 root     root           18 Oct 19 10:58 S03iptables -> ../init.d/iptables*
   lrwxr-xr-x    1 root     root           17 Oct 19 11:26 S10network -> ../init.d/network*
   lrwxr-xr-x    1 root     root           16 Oct 19 11:26 S12syslog -> ../init.d/syslog*
   lrwxr-xr-x    1 root     root           16 Oct 19 11:26 S20random -> ../init.d/random*
   lrwxrwxrwx    1 root     root           13 Oct 28 15:22 S40atd -> ../init.d/atd*
   lrwxr-xr-x    1 root     root           19 Oct 19 10:59 S40saslauthd -> ../init.d/saslauthd*
   lrwxrwxrwx    1 root     root           14 Oct 19 21:28 S55ntpd -> ../init.d/ntpd*
   lrwxrwxrwx    1 root     root           14 Oct 19 12:11 S55sshd -> ../init.d/sshd*
   lrwxrwxrwx    1 root     root           16 Oct 19 12:00 S56xinetd -> ../init.d/xinetd*
   lrwxr-xr-x    1 root     root           18 Oct 19 11:26 S75keytable -> ../init.d/keytable*
   lrwxr-xr-x    1 root     root           17 Oct 19 11:12 S80prelude -> ../init.d/prelude*
   lrwxr-xr-x    1 root     root           17 Oct 19 11:03 S85numlock -> ../init.d/numlock*
   lrwxr-xr-x    1 root     root           18 Oct 19 11:35 S89internet -> ../init.d/internet*
   lrwxr-xr-x    1 root     root           15 Oct 19 11:26 S90crond -> ../init.d/crond*
   lrwxr-xr-x    1 root     root           17 Oct 19 11:26 S95kheader -> ../init.d/kheader*
   lrwxr-xr-x    1 root     root           14 Oct 19 11:38 S99adsl -> ../init.d/adsl*
   lrwxr-xr-x    1 root     root           19 Oct 19 11:04 S99linuxconf -> ../init.d/linuxconf*
   lrwxr-xr-x    1 root     root           11 Oct 19 10:41 S99local -> ../rc.local*
 
    在这个目录下的档案都是连结档,均指向到 /etc/rc.d/init.d 这个目录下,而这个 /etc/rc.d/init.d 目录则是以 Linux 的 rpm 安装方法时,设定一些服务的启动目录。举个例子来说,如果你要重新启动 sendmail 的话,而且你的 sendmail 是以 rpm 来安装的,那么下达 /etc/rc.d/init.d/sendmail restart 就可以直接启动 sendmail 罗!所以你即可知道 /etc/rc.d/init.d 里面档案的主要功能!因此,当你的 run-level 内的 scripts 要启动哪写服务呢,呵呵!就将档案连结到该 init.d 目录下的档案并加以启动即可罗!也就是说『当你以 文字模式 ( run-level=3 ) 启动 Linux 时,你的系统在经过 BIOS、 MBR、 Kernel、 init、/etc/rc.d/rc.sysinit 之後,就会进入 /etc/rc.d/rc3.d 来启动一些服务』罗!不过,需要注意的是,在 rc3.d (或其他目录下 rc0.d ~ rc6.d )目录中 S 开头的档案为执行该服务, K 为开头的档案则是杀掉该服务的意思。那么那些数字代表的意义为何?那就是启动的顺序啦!例如S12syslog 会比S90crond 更早被执行呢!那么为什么要有这些顺序呢?这是有原因的!例如您的主机有要启动 WWW 好了,那么您的网路设定应该要先启动才对吧!所以罗,如果 WWW 先启动,才驱动网路,那么 WWW 自然就一定起不来啦!所以各项服务的启动顺序也是相当重要的!目前 Mandrake 当中,可以使用 chkconfig 来设定开机要启动的服务选项呢!
    init 执行 /etc/rc.d/rc.local
    在 DOS 或 Windows 的系统中,对於 autoexec.bat 与 config.sys 这两个档案您应该不陌生吧?!这两个档案是 DOS 或 Windows 在完成开机之後,第一个要去读取的内容!那么 Linux 有没有该档案?!有的!在 Linux 系统执行完了大部分的开机程序之後,接著下来就是要执行你的 Linux 主机的个人化设定罗!举个例子来说,由於 Red Hat 7.2 预设是将 CDROM 视为一个模组启动的装置,因此你的 cdrom 将必须要载入两个模组之後才能使用,分别是 modprobe cdrom, modprobe ide-cd 这两个指令!而如果你想每次都使用 cdrom 的话,那么你每次开机都必须记得手动载入这两个模组!粉累耶....这个时候就可以将这两行指令加入到 /etc/rc.d/rc.local 当中去罗!也就是说,不论你有什么需要在开机的时候写进去的指令,都可以在这里写入喔! ( 通常为了避免麻烦,我们都将开机完之後必须要做的几件事情,例如启动 NAT 主机的命令,使用 tarball 安装的一些软体的启动指令都写在这个档案来,那么系统开机完成之後,你所需要执行的指令也都执行完毕罗!)
     
    前面的步骤都被主机执行之後,开机的程序就已经完全的启动完毕了!也就是说,如果你已经有网路的服务启动的话(通常在 /etc/rc.d/init.d 时就载入罗),那么你的主机已经在 Internet 上面提供服务了!所以根本就不需要你登入 Linux 系统你的主机也能正确的提供相关的服务喔!
    开机设定档 /etc/sysconfig
    不过,在开机的过程中,到底使用了多少设定档呢?呵呵!使用最多的设定档大多放置在 /etc/sysconfig 这个目录底下呢!来看一下 Mandrake 9.0 在这个设定档底下有哪些东西?
  [root @test root]# ll /etc/sysconfig
    total 100
    -rw-r--r--    1 root     root          511 Sep 19 17:48 alsa
    -rw-r--r--    1 root     root          239 Sep 19 17:48 autofsck
    -rwxr-xr-x    1 root     root           41 Oct 19 11:39 autologin*
    -rwxr-xr-x    1 root     root           36 Oct 19 11:35 clock*
    drwxr-xr-x    4 root     root         4096 Oct 19 11:27 console/
    -rw-------    1 root     root           35 Oct 19 11:35 drakconnect
    -rw-------    1 root     root           29 Oct 19 11:35 drakconnect.adsl_pppoe
    -rw-------    1 root     root          363 Oct 19 11:35 drakconnect.netc
    -rwxr-xr-x    1 root     root          275 Oct 19 11:47 i18n*
    -rw-r--r--    1 root     root          952 Sep 19 17:47 init
    -rw-r--r--    1 root     root         1407 Sep 19 17:48 installkernel
    -rwxr-xr-x   1 root     root          446 Aug 26 23:37 ipvsadm*
    -rwxr-xr-x    1 root     root           39 Oct 19 11:27 keyboard*
    -rwxr-xr-x    1 root     root          114 Oct 18 11:43 mouse*
    -rwxr-xr-x    1 root     root           53 Oct 19 11:39 msec*
    -rw-r--r--    1 root     root            0 Sep 17 22:16 msec.rpmnew
    -rwxr-xr-x    1 root     root          100 Oct 19 13:35 network*
    drwxr-xr-x    5 root     root         4096 Oct 19 10:41 networking/
    drwxr-xr-x    2 root     root         4096 Oct 19 13:36 network-scripts/
    -rwxr-xr-x    1 root     root           10 Oct 19 11:26 pcmcia*
    -rw-r--r--    1 root     root          153 Jul 25  2000 rawdevices
    -rw-r--r--    1 root     root          336 Jul 26 20:35 saslauthd
    -rw-r--r--    1 root     root          455 Aug 14 09:30 syslog
    -rwxr-xr-x    1 root     root           56 Oct 19 11:39 system*
    -rw-r--r--    1 root     root          337 Sep 19 17:48 usb
    -rw-r--r--    1 root     root           41 Aug 22 18:11 xinetd
 
    上面具有黄色字体的哪几个项目尤其重要!
      
    clock 在设定我们 Linux 主机的时区,可以使用格林威治时间,也就是标准时间,也可以使用台湾的本地时间 ( local );
    i18n 在设定一些语系的使用方面,例如最麻烦的文字介面下的日期显示问题!如果您是以中文安装的,那么预设语系会被选择 big5 ,所以在纯文字介面之下,你的档案日期显示就会呈现乱码!这个时候就需要更改一下这里啦!更动这个 i18n 的档案,将里面的 LC_TIME 改成 en 即可!!
    Keyboard 与 mouse 就是在设定键盘与滑鼠的形式;
    network 可以设定主机名称,以及 GATEWAY 这两个重要资讯呢!
    至於 network-scripts 里面的档案,则是主要用在设定网路卡~这部份我们在网路架设篇才再次提到!
   
    总之,这个目录下的档案都是很重要的啦!
    变换预设的登入模式
    刚刚在上面说了登入主机的方式最少有六种,不过常使用的是 run-level 3 的文字介面模式与 run-level 5 的图形介面模式!如果你在安装的过程中选择了文字介面登入,但是後来却想以图形介面登入系统,应该怎么做?!简单的很!就直接修改 /etc/inittab 这个档案的内容即可!如何做呢?!以 vi 或者是其他的文书编辑软体,进入 /etc/inittab 这个档案,档案的内容有点像这样:
      # Default runlevel. The runlevels used by Mandrake Linux are:
    #   0 - halt (Do NOT set initdefault to this)
    #   1 - Single user mode
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #   3 - Full multiuser mode
    #   4 - unused
    #   5 - X11
    #   6 - reboot (Do NOT set initdefault to this)
    #
    id:3:initdefault:
    # System initialization.
    si::sysinit:/etc/rc.d/rc.sysinit
   
    l0:0:wait:/etc/rc.d/rc 0
    l1:1:wait:/etc/rc.d/rc 1
    l2:2:wait:/etc/rc.d/rc 2
    l3:3:wait:/etc/rc.d/rc 3
    l4:4:wait:/etc/rc.d/rc 4
    l5:5:wait:/etc/rc.d/rc 5
    l6:6:wait:/etc/rc.d/rc 6
   
    # Things to run in every runlevel.
    ud::once:/sbin/update
   
    # Trap CTRL-ALT-DELETE
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now
    # Run gettys in standard runlevels
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
     
     
    在上面的资料中,将 id:3:initdefault: 里头的 3 改成 5 ,那么在下次的登入时就会变成是图形介面罗!同理,要由图形介面变成文字介面来登入时,也是将上面那行改成 3 即可!此外,不知道您有没有经验,在你的 Linux 主机当中, Linux 共提供了六个终端机介面与 一 个图形介面的登入点,你可以按下 『 Ctrl 』+ 『 Alt』 加上『F1』 ~ 『F6』 功能键 来变换不同的文字介面登入点!至於图形介面则仅使用於『 Ctrl + Alt + F7 』这一个喔!不过,如果你只想要提供四个文字介面呢?该如何是好?!呵呵!只要将上面的最後两行删掉,只剩下 1:2345:....至 4:2345:...,只剩下这四行然後重新开机之後,你的 F5 与 F6 功能键的作用就会消失罗!就这么简单啦!不过,需要注意的是,图形介面只有一个,当你使用图形介面登入时,那么将直接进入 tty7 那一个图形介面的登入萤幕喔!而当你在 tty1 输入 startx 启动 X-Windows 时,你的控制权将会跑到 tty7 (就是在 F7 功能键),此时,若您的 X-windows 挂了!那么直接按下『 Ctrl + Alt + F1 』 回到 tty1 之後,直接删除该 X-Windows 的程序即可关闭 X-Windows 罗!很不错吧!


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/60/showart_3405.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP