免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7378 | 回复: 11

[备份软件] Cuddletech系列VERITAS教程之二(上) [复制链接]

论坛徽章:
0
发表于 2006-09-06 14:33 |显示全部楼层
******************add by kaiyi 14.08.2007**************************
由于我最近不太上CU,如果需要PDF文档,请大家直接发邮件给我, lovekaiyi@yahoo.com.cn
**********************end**************************************

PS:由于字数限制,将文章分成两篇发表,多谢!!!!


Cuddletech系列VERITAS教程之二
                       
                               创建Volume: VxMake方式

                                                                 作者:Ben Rockwood
                                                                                         翻译: KaiYi   Cynthia

        这是Cuddletech系列Veritas Volume Manager教程的第二篇。包含的内容有:
添加磁盘,vxmake命令操作对象。创建RAID 0和RAID 0+1volume的命令和输出会全部呈现在你面前,这样在实际系统上操作Veritas Volume Manager时,你会清楚的知道你将得到什么。
Yeah Baby!
         
欢迎阅读本教程。本教程假设你已经读过前面两篇了。现在,你应该已经很好的掌握了Veritas各种对象之间的区别,它们是如何工作在一起的,以及RAID的不同级别。有了这些知识,那我们开始吧!
数次,达成“不可能完成的任务”之后,我总是这样尖叫着“Yeah Baby!”。本节的标题也由此而来。别人认为不可能做到的,我做成功了。使用Veritas,我常常能够做到这样的事情。因为,人们往往对veritas及其工具知之甚少,而忽视了veritas神奇的工作方式以及其性能和特点。在本教程中,我们将讲到如何创建实际的volume。我在测试系统中创建了许多的Vx volumes,从规划开始,我记录下了所有事情。我们将利用这些例子,一步一步给你讲解。每一步我们都会一起完成,不像其它的Veritas 教程,忽略了部分篇章。创建对象时,你能看到我所看到的。对你来说这也是一个好的参考,直到你成为veritas高手,记住前前后后的步骤。但首先,让我们谈论一下……

VxMake: 为什么是一种“酷”的方式

本课程和它的姐妹篇《Volume Creation: The VxAssist Way》直接相关。但为什么有两种方式创建volume呢?我将让你两篇文章都读到的,然后选择你喜欢的方式,我们谈一谈为什么vxmake是一种“酷”的方式吧。
先告诉你,你不是必须要使用vxmake的。它和vxassist的不同之处在于对象是一个个分别创建的,你可以指定所有设置细节。VxAssist不错,因为你可以把一些琢磨不透或者难以抉择的东西交给veritas处理,不用自己担心。而当你有时间和空间时,Vxmake能更好地管理volume的细节。比如说,在一个临时小项目中,你需要快速创建一个20G的volume,可以选择vxassist,因为短短几分钟内vxassist就可以完成volume的准备工作。但是,如果你需要一个30G以上的stripe,mirror或RAID 5的volume,用来存放重要数据,并且你想要多花一些时间来计划和分配数据,vxmake是你不错的选择。
Volume课程背景
首先,看一下我们例子中所使用的硬件信息。主机是Sun Ultra2,一块296Mhz UltraSparcII CPU芯片,512M内存;Solaris 8操作系统;4块9G的光纤硬盘(SCSI 3),存放于Sun A5100光纤磁阵中;我们使用的是SUN 提供的Veritas-版本是3.0.2;主机本身的文件系统是UFS的;下面是一些相关的系统信息:

# uname -a
SunOS nexus6 5.8 Beta_Refresh sun4u sparc SUNW,Ultra-2

# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
0. c0t0d0 <SUN2.1G cyl 2733 alt 2 hd 19 sec 80>
/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133>
/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
2. c2t0d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133>
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w21000020370e0108,0
3. c2t1d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133>
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2100002037163333,0
4. c2t2d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133>
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w210000203716d068,0
5. c2t6d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133>
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2100002037169ef8,0
Specify disk (enter its number): ^D
#

[注意:C0控制的是主机内部硬盘;C2控制的是A5100中的磁盘]

赛前秀
这是教程中比较模糊的一部分。我没有太多的例子,所以留下了些许想象的空间,但我要谈一谈如何准备磁盘,让它可以被veritas引用。第一,要把所需的磁盘放入系统中。操作系统管理的任何一块磁盘都可以被veritas引用,它们不必属于同一个控制器。第二,要让操作系统认出这些新磁盘。Solaris下是这样操作的:

# drvconfig;devlinks;disks

第三,在”format”命令的输出中,你应该看到这些新加入磁盘的信息了。如果能看到,新磁盘对于OS就是可用的。扩展来说,对Veritas也是可用的了。

分区要注意的事项。用于Veritas的磁盘不需要分区。我为什么要特别指出这一点?Veritas会为你完成所有事情的。Veritas需要的是绝大多数磁盘中的默认分区。如果磁盘分区有问题,在把新磁盘加入veritas的过程中,会有提示信息。如果你需要对新磁盘重新分区,可以用”format”命令,恢复”默认”分区就可以啦。
现在,我们要把新磁盘加入到veritas管理之中了。一旦磁盘被加入到veritas中,该磁盘的任何一部分都不能再被外界引用。这也就是为什么不能随意分区的缘故,它不希望你把它们和其它磁盘混淆起来。

两种方式可以把磁盘加入到Veritas管理之中,”封装”(encapsulation)和”初始化”(initialization)。两种不同的方式。它们都可以把磁盘加入到veritas中,但区别在于“封装”会保留你在该磁盘上的数据。但“初始化”方式,在磁盘加入veritas时所有数据都被擦除了。初始化时,磁盘上的所有数据都会丢失。有时候,veritas手册上关于这两种方式的描写很模糊,因此,你要注意了。

磁盘新加入veritas可以使用命令”vxdiskadd”。这是一个字符菜单驱动工具,具备帮助信息和交互操作模式。VxDiskAdm由/usr/sbin/vxdiskadm命令激发。输出如下:

Volume Manager Support Operations
Menu: VolumeManager/Disk

1 Add or initialize one or more disks
2 Encapsulate one or more disks
3 Remove a disk
4 Remove a disk for replacement
5 Replace a failed or removed disk
6 Mirror volumes on a disk
7 Move volumes from a disk
8 Enable access to (import) a disk group
9 Remove access to (deport) a disk group
10 Enable (online) a disk device
11 Disable (offline) a disk device
12 Mark a disk as a spare for a disk group
13 Turn off the spare flag on a disk
list List disk information

? Display help about menu
?? Display help about the menuing system
q Exit from menus

Select an operation to perform:

加入一块新的磁盘,你需要选择出,哪一种方式更合适:“1”(初始化),或者“2”(封装)。对于我们即将使用的磁盘,我选择“初始化”。

在初始化之前,执行一下”list”操作是一个好主意,确认Veritas也能“看”到这些磁盘。只需要输入”list”,输出如下:

----------------------------------------------------------------
List disk information
Menu: VolumeManager/Disk/ListDisk

Use this menu operation to display a list of disks. You can
also choose to list detailed information about the disk at
a specific disk device address.

Enter disk device or "all" [<address>,all,q,?] (default: all) all

DEVICE DISK   GROUP  STATUS
c0t0d0   -      -    error
c0t1d0   -      -    error
c2t0d0 disk01 rootdg online
c2t1d0 disk02 rootdg online
c2t2d0 disk03 rootdg online
c2t6d0   -      -    online

Device to list in detail [<address>,none,q,?] (default: none)

上面输出中,磁盘t0,t1,t2已经被初始化了,所以它们都有磁盘名。但是,我没有初始化c2t6d0.(再次重申,Veritas不关心分区情况,因此在设备名中没有sX)。下面是用”vxdiskadm”初始化磁盘的全部输出,选项1。这可能需要较长时间,但它是简洁有用的。

Add or initialize disks
Menu: VolumeManager/Disk/AddDisks

Use this operation to add one or more disks to a disk group. You can
add the selected disks to an existing disk group or to a new disk group
that will be created as a part of the operation. The selected disks may
also be added to a disk group as spares. The selected disks may also
be initialized without adding them to a disk group leaving the disks
available for use as replacement disks.

More than one disk or pattern may be entered at the prompt. Here are
some disk selection examples:

all: all disks
c3 c4t2: all disks on both controller 3 and controller 4, target 2
c3t4d2: a single disk

Select disk devices to add:
[<pattern-list>,all,list,q,?] list

DEVICE DISK   GROUP   STATUS
c0t0d0 -       -      error
c0t1d0 -       -      error
c2t0d0 disk01 rootdg online
c2t1d0 disk02 rootdg online
c2t2d0 disk03 rootdg online
c2t6d0 disk04 rootdg online

Select disk devices to add:

Add or initialize disks
Menu: VolumeManager/Disk/AddDisks

Use this operation to add one or more disks to a disk group. You can
add the selected disks to an existing disk group or to a new disk group
that will be created as a part of the operation. The selected disks may
also be added to a disk group as spares. The selected disks may also
be initialized without adding them to a disk group leaving the disks
available for use as replacement disks.

More than one disk or pattern may be entered at the prompt. Here are
some disk selection examples:

all: all disks

Add or initialize disks
Menu: VolumeManager/Disk/AddDisks

Use this operation to add one or more disks to a disk group. You can
add the selected disks to an existing disk group or to a new disk group
that will be created as a part of the operation. The selected disks may
also be added to a disk group as spares. The selected disks may also
be initialized without adding them to a disk group leaving the disks
available for use as replacement disks.

More than one disk or pattern may be entered at the prompt. Here are
some disk selection examples:

all: all disks
c3 c4t2: all disks on both controller 3 and controller 4, target 2
c3t4d2: a single disk

Select disk devices to add:
[<pattern-list>,all,list,q,?] list

DEVICE         DISK         GROUP                 STATUS
c0t0d0         -         -                 error
c0t1d0         -         -                 error
c2t0d0         disk01 rootdg         online
c2t1d0         disk02 rootdg         online
c2t2d0         disk03 rootdg         online
c2t6d0         -         -                 online

Select disk devices to add:
[<pattern-list>,all,list,q,?] c2t6d0

Here is the disk selected. Output format: [Device_Name]

c2t6d0

Continue operation? [y,n,q,?] (default: y)

You can choose to add this disk to an existing disk group, a
new disk group, or leave the disk available for use by future
add or replacement operations. To create a new disk group,
select a disk group name that does not yet exist. To leave
the disk available for future use, specify a disk group name
of "none".

Which disk group [<group>,none,list,q,?] (default: rootdg)

Use a default disk name for the disk? [y,n,q,?] (default: y)

Add disk as a spare disk for rootdg? [y,n,q,?] (default: n)

The selected disks will be added to the disk group rootdg with
default disk names.

c2t6d0

Continue with operation? [y,n,q,?] (default: y)

The following disk device appears to have been initialized already.
The disk is currently available as a replacement disk.
Output format: [Device_Name]

c2t6d0

Use this device? [y,n,q,?] (default: y)

The following disk you selected for use appears to already have
been initialized for the Volume Manager. If you are certain the
disk has already been initialized for the Volume Manager, then you
do not need to reinitialize the disk device.
Output format: [Device_Name]

c2t6d0

Reinitialize this device? [y,n,q,?] (default: y)

Initializing device c2t6d0.

Adding disk device c2t6d0 to disk group rootdg with disk
name disk04.

Add or initialize other disks? [y,n,q,?] (default: n)

够简单吧!完全地!现在我们的磁盘已经加入Veritas管理之中,可以开始使用它啦。我们在使用4块磁盘,全部加入到Veritas中后,”vxprint”的输出如下:

# vxprint
Disk group: rootdg
TY NAME         ASSOC         KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg         -                 -         -         -         -                 -
dm disk01 c2t0d0s2         -         17678493         -         -         -                 -
dm disk02 c2t1d0s2         -         17678493         -         -         -                 -
dm disk03 c2t2d0s2         -         17678493         -         -         -                 -
dm disk04 c2t6d0s2         -         17678493         -         -         -                 -
#

知道这些输出是什么意思吗?Vxprint是我们进入Veritas世界的窗口。你将广泛的用到它。我们每次操作的时候,都会用vxprint来核查结果。现在,我们有4块磁盘,命名为”disk01”,”disk02”,”disk03”,”disk04”。它们被标记为”dm”,代表是VM磁盘。VM disks  都是缺省的disk group-”rootdg”的成员。其中,第五列length是指VM disk扇区的长度。

我们已经为volume创建好了基础。我们已经创建了dg的成员VM disks。现在,我们可以创建构成plex的subdisks。
第一课:一个 ”Simple” RAID Volume

这一课中,我们将创建一个简单的RAID volume。我们要用之前加入veritas的4块9G磁盘进行操作。我们将把volume所需要的对象一个个地创建起来,还要把这些对象放在一起直到建成volume。听起来我好像在说”Lego”拼插玩具,其实两者非常相象。

第一,从VM disk中创建subdisks,然后用这些subdisks去构建plex。和以前一样,我们总以”vxprint”开始,核对当前配置,接着再创建subdisks。这样的创建过程,一行命令就可以完成了。要实现它,需要我们的英雄――VxMake。用VM Disk创建SubDisk,VxMake的语法如下:

vxmake sd <subdiskname> <VMDiskName>,<offset>,<len>

这语法十分的简单。vxmake是命令,”sd”指定了创建对象是subdisk。“subdiskname”是新增subdisk的名字。一般来说,subdisk命名是在VM disk名字后面加”-0x”(如:”-01”)。”-0x”指每一个VM disk上创建subdisk的顺序号。”vmdiskname”指从哪个VM disk上创建subdisk。”offset”用来设置偏移量。待会儿我们再讨论它,这个选项一般都不用。”len”指磁盘中扇区的长度。分配给新subdisk 长度时,你可以直接从vxprint输出中拷贝VM Disk长度。这些已经是创建subdisk需要知道的所有内容了。插一句,创建subdisk实际就是veritas的“分区”。例如:你想创建2个striped volumes,每个volume都要占用4块磁盘。在你仅有4块磁盘的情况下,你需要在每个VM disk上创建2个subdisks。用“disk0?-01”subdisk创建第一个volume,用“disk0?-02”创建另外一个volume。我希望这能对加深理解subdisk有所帮助。

现在,让我们看看创建subdisks的过程是什么样的。我们将创建4个subdisks,再用vxprint核对。

# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg - - - - - -

dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2 - 17678493 - - - -
dm disk03 c2t2d0s2 - 17678493 - - - -
dm disk04 c2t6d0s2 - 17678493 - - - -

# vxmake sd disk01-01 disk01,0,17678493
# vxmake sd disk02-01 disk02,0,17678493
# vxmake sd disk03-01 disk03,0,17678493
# vxmake sd disk04-01 disk04,0,17678493
#

就是这样的啦!我们准备好subdisk了。请注意,”len”和vxprint输出中”Length”的内容相同。同样请注意命名惯例。非常简单?此外,有必要指出的是,vxmake命令执行结束后不会在界面返回任何创建信息的。如果操作成功了,返回一个提示符。如果操作失败了,则返回错误信息。如果你一次性创建多个(多于6个)subdisks,务必多次用vxprint检查创建结果,以防止不小心的拼写错误。下面,让我们来看看vxprint的输出吧:

# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg - - - - - -

dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2 - 17678493 - - - -
dm disk03 c2t2d0s2 - 17678493 - - - -
dm disk04 c2t6d0s2 - 17678493 - - - -

sd disk01-01 - ENABLED 17678493 - - - -
sd disk02-01 - ENABLED 17678493 - - - -
sd disk03-01 - ENABLED 17678493 - - - -
sd disk04-01 - ENABLED 17678493 - - - -


看到了吗?我们已经完成了我们想做的。下一步,我们将创建plex。plex是最难理解的一部分,因为striping和RAID 5是在plex这一层实现的,而非volume层。(记得吗?volume只是容纳plex的容器而已,数据操作都是plex完成的)。由于我们只创建“简单的”plex,所以不需要命令中加任何参数。我们的例子中,语法如下:

vxmake plex plexname

我们用的命令正是vxmake。”plex”指定了我们的创建目标是plex。”plexname”是新创建的plex的名字。你可以用任何你喜欢的名字命名plex。但是,95%的人根据volume名字来命名plex。通常的做法是在volume名后面加上”-01”,依此类推。这完全是自愿的,它让对象在troubleshooting的时候多一些可读性。我们的例子中,我们将命名plex为”dataplex1”。下面是我们的创建过程,以及vxprint的输出:

# vxmake plex dataplex1
# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg - - - - - -

dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2 - 17678493 - - - -
dm disk03 c2t2d0s2 - 17678493 - - - -
dm disk04 c2t6d0s2 - 17678493 - - - -

sd disk01-01 - ENABLED 17678493 - - - -
sd disk02-01 - ENABLED 17678493 - - - -
sd disk03-01 - ENABLED 17678493 - - - -
sd disk04-01 - ENABLED 17678493 - - - -

pl dataplex1 - DISABLED 0 - - - -
#

看到新建plex了吗?请注意,它没有分配到任何subdisks。使用vxmake,可以在创建的过程中直接分配subdisks 给plex,但我们一步一步的来做。100%手工操作。

要往plex中加入subdisks,我们需要命令”vxsd”,它是subdisk的控制工具。Vxsd有各种各样的选项和功能,但我们所需要的是“subdisk association”。可以看出,仅仅是指“联合”(associating) subdisks,这也意味着我们以后可以“分离”(disassociate) subdisks。懂了吗?待会儿我们还会谈到它的。用vxsd“联合”subdisk的语法如下:

vxsd assoc <plexname> <subdisk> <subdisk> .....

“vxsd”是命令名。”assoc”指“联合”(associate)subdisks。”plexname”指目标plex名。命令中剩下的部分是我们要用来“联合”的subdisks清单,以空格分开。我要“联合”4块磁盘(subdisks),并且用vxprint验证一下。

# vxsd assoc dataplex1 disk01-01 disk02-01 disk03-01 disk04-01

# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg - - - - - -

dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2 - 17678493 - - - -
dm disk03 c2t2d0s2 - 17678493 - - - -
dm disk04 c2t6d0s2 - 17678493 - - - -

pl dataplex1 - DISABLED 70713972 - - - -
sd disk01-01 dataplex1 ENABLED 17678493 0 - - -
sd disk02-01 dataplex1 ENABLED 17678493 17678493 - - -
sd disk03-01 dataplex1 ENABLED 17678493 35356986 - - -
sd disk04-01 dataplex1 ENABLED 17678493 53035479 - - -
#

到目前为止,看起来还不错。我们已经准备好plex了,我们只需要让plex  attach(隶属于)volume。现在我们要创建volume了,还是用vxmake,语法如下:

vxmake -U <usagetype> vol <volname> plex=<plexname>

这可能有一点混淆。vxmake是命令名。参数”-U”指定“使用类型”(usage type)。现在我们先不讨论“使用类型”,但对于一个需要包含文件系统的volume来说,必须要使用”fsgen”作为使用类型。”vol”是指我们创建的目标对象是volume。”volname”是新创建volume的名称。现在,是时候让vxmake帮我们attach plex了。在命令行中加上”plex=”,然后填入我们希望用的plex名称就可以啦。我们还可以一次性列出多个plex,以逗号分隔,这样就会产生多个镜像了!例子中,我们仅attach “dataplex1”。就这样了。我们开始创建volume吧,接着再用vxprint检查一下。还有一点要注意,我会在vxprint后面加上参数”-hrt”,这会显示出更多信息。先看一下操作步骤,然后我们再讨论:

# vxmake -U fsgen vol datavol plex=dataplex1
# vxprint -hrt
Disk group: rootdg

DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

dg rootdg default default 0 952738334.1025.nexus6

dm disk01 c2t0d0s2 sliced 3590 17678493 -
dm disk02 c2t1d0s2 sliced 3590 17678493 -
dm disk03 c2t2d0s2 sliced 3590 17678493 -
dm disk04 c2t6d0s2 sliced 3590 17678493 -

v datavol fsgen DISABLED EMPTY 70713972 ROUND -
pl dataplex1 datavol DISABLED EMPTY 70713972 CONCAT - RW
sd disk01-01 dataplex1 disk01 0 17678493 0 c2t0d0 ENA
sd disk02-01 dataplex1 disk02 0 17678493 17678493 c2t1d0 ENA
sd disk03-01 dataplex1 disk03 0 17678493 35356986 c2t2d0 ENA
sd disk04-01 dataplex1 disk04 0 17678493 53035479 c2t6d0 ENA
#

酷吧?不要被”-hrt”产生的vxprint信息头吓住。它们是每一行输出的关键词。每一行开头由两个字符组成的标记都很熟悉吧,除了”SV”很少看到,在高级课程中会讲到。无论如何,我希望你看到的是,带有”-hrt”的vxprint输出中,”pl”这一行中,”dataplex1”是”CONCAT”,也就是串连的RAID(简单RAID)。同时也请注意到,每一次我们创建新对象时(把各种对象组织在一起,vmdisk->subdisk->plex->volume),vxprint会把它们重新组织起来输出的。这便于快速的读懂和理解输出信息。

[ 本帖最后由 kaiyi 于 2007-8-14 10:58 编辑 ]

论坛徽章:
0
发表于 2006-09-07 11:43 |显示全部楼层
顶下子
辛苦

论坛徽章:
0
发表于 2006-09-07 21:54 |显示全部楼层
终于又盼到了

论坛徽章:
0
发表于 2006-09-24 16:56 |显示全部楼层
希望大家能够给一些反馈,无论好恶评,多谢!

论坛徽章:
0
发表于 2006-10-08 23:31 |显示全部楼层
楼主的确翻译的不错,很有原文的味道. 非常感谢,辛苦了

论坛徽章:
0
发表于 2006-10-11 00:55 |显示全部楼层
非常期待后续啊~~楼主加油!

论坛徽章:
0
发表于 2006-11-20 15:42 |显示全部楼层
非常的明白.清楚,CU就应多一些这种贴子.

论坛徽章:
0
发表于 2006-11-28 21:26 |显示全部楼层
第三篇已经发表,VxAssist工具,分上下两篇。请大家查看。

论坛徽章:
0
发表于 2006-11-29 10:01 |显示全部楼层
好东西,顶一下.

论坛徽章:
0
发表于 2006-12-20 11:29 |显示全部楼层
JX
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP