转自互联网
» 阅读全文
Submitted by 枫飞天翔 on 2010, January 17, 1:28 AM
转自互联网
» 阅读全文
Submitted by 枫飞天翔 on 2009, April 16, 12:14 AM
呵呵,混了这么多年,终于从一个小公司发展成为isp了,哈哈,当年仰视的现在已经成为过去,
应该怎么说。。。踏着敌人的尸体爬上来
可怜的百灵,哎。。。。。
Submitted by 枫飞天翔 on 2009, April 16, 12:11 AM
本人,从97年开始接触网络,那个时候上网速度不是一般的慢,后来来到济南上学,才见识到什么
叫真正的网络,头一次见到了交换机,那个时候俺们那里都还是hub,工作了将近8年,搞网络也这么多年,从一个普普通通的
无名小卒,如今,公司也成为了isp,历经千辛万苦。。。。废话不说了,正题
这里主要谈交换机选择的两个方向 idc服务提供商方面和idc用户方面,毕竟本人是做idc的,不说这些说啥呢。。。开始
核心交换机方面,首先得从公司规模和网络接入方面来考虑,如果有1G带宽的接入,推荐思科 3560和3560g系列,g比不带g的区别就是多了两个光口,还有24个电口全都是千兆口,当然,这只是硬件方面,交换机的ios选择好也是一个省钱的办法,买的时候选个s,然后找人升级成为e就行,能省1w,在这里,强烈不建议用户接入这么多带宽的还去选择个其他牌子的交换机,不过最近感觉华为的东西还是比较可用的,这个级别对应的华为的设备为华三s3900或者s5100系列,他们外表差不多,就是s5100系列的是全千兆而已,对于带宽不是很多(1-4g)的,选择这个很合算,如果再有点闲钱,华三的s5600也是一个不错的选择
超过4g以上带宽的,思科方面建议选择7600系列,华为方面建议选择s8500系列,稳定,我这边联通机房由于是10g接入,当时考虑的是思科的4500系列,后来还是选择了s8508,命令简单,易用,扩展性很强,可扩展的板卡很多,以我为例,10g接入,机框,选择的是8508所以除了引擎板之外,可以插8个业务版,可以选择24个千兆的或者48个百兆的,这样搭配起来干活不累,我的48千兆电口板就是当百兆的来用,有点浪费,不过48的千兆电口板肯定会过压,当百兆用比较安全,光口板选择24光的就行,不多不少正好,然后两个引擎板,一主一备,说白了,安全,挂了一个还有一个呢,不怕
另外就是又一些特殊需求方面,如果要求光口比较多的交换机,思科的3750g-12 有12个千兆光口 ,华为的s5500-20,有12个千兆光+8个千兆电
至于机柜交换机的选择,挺多,就说几种,dlink的3026,以前的是3226,后来没有了,很不多,可以支持telnet和web管理,支持端口限速和广播抑制,支持snmp管理,比较实用,适合做散户的机柜,华为的s2000系列,可以限速,telnet,但是广播抑制方面做的不是很好,各种vlan都支持
下面就是idc用户方面,为了简单,直接以例子来说明
要求全千兆内网的,dlink的足够,不必非得思科华为,用起来一样
但是要求全千兆外网的,必须得思科2960g或者华为的s5100系列,价格都不超过1w,但求一个字“稳”
如果内网是要求百兆的,自己随便选就行,不过一定要选择机架交换机,不要选择soho交换机,不然出了问题都不好找
如果没有什么特殊要求,尽量选择可网管交换机,最好是带telnet的那种,有时候web也不一定好用的,特别是在被攻击的时候,web页面打不开,但是telnet是可以的,虽然比较慢
就说这么多,干了这么多年,交换机方面还有好多可选之处,我主要就是用思科,华为和dlink,别的都没大用
顺便鄙视一下西门子的交换机
再顺便鄙视一下netgare的,无线路由做的那么好,交换机做的那么烂,linksys的也是
如果有想选择dell的还是选cisco吧,毕竟是人家给oem的
其它的不想多说了,各种设备厂商,我只是随便说说,不要那么认真
Submitted by 枫飞天翔 on 2008, September 24, 1:06 AM
半夜三更施工,6个思科2950,其中4个忘记密码,网上找了一下
破解密码的方法
断电,按住面板左边的那个 MODE按钮,然后加点,看到进入 SWITCH: 模式之后松开
然后依次输入一下命令
flash_init
delete flash:config.text 如果原配置文件没用了,就输入这一条
rename flash:config.text flash:config.old 把原配置文件改名,用的时候再说
boot
然后交换机开始引导,出现全新交换机的配置界面,直接配置就是了,存盘,ok
Submitted by 枫飞天翔 on 2008, September 1, 12:15 AM
公司IDC的网通核心机房由于业务需要扩容10G,同时更换核心三层路由交换设备
经过一段时间的挑选,初步从思科4506 改到后来的华为s8508,前几天做万兆端口互联的时候遇到点小麻烦,如下:
各种业务板和引擎板正常插入之后,启动,进入之后各种基本配置之后开始于对段进行互联配置,由于平常接触的思科设备比较多,习惯性的先在万兆口上no switchport一下,结果发现无此命令,才想起来这是华为的设备,命令有所更改,结果在?里面找了一圈也没有发现有相关的设置,后来突然想起来,貌似ne40 有,但是85不知道为啥没有了呢,不行就按照老华为的配置方式来吧
随便起了一个vlan ,因为最高是 4094,所以就起了一个vlan 4094, 然后int vlan 4094,ip address了之后,将万兆口
speed 10000
dup full
port acc vlan 4094
最后route add ip 默认路由
测试了一下,通,看来华为的东西就是比较烦人,都这么高端了还来这套,跟人家思科学学多好,麻烦
顺便放了一个c地址上去,测试了一下,没有问题,打完收工,quit&save一下,吼吼~~~~
Submitted by 枫飞天翔 on 2008, April 9, 5:57 PM
Linux下的Minicom的功能与Windows下的超级终端功能相似,适于在linux通过超级终端对嵌入式设备的管理以及对嵌入操作系统的升级,现写出Minicom的使用手册:
配置minicom和使用minicom
1. 启动minicom
以root权限登录系统,使用minicom -s
2. 设置serial port setup
使用down箭头选择serial port setup,出现具体各选项的配置:
A — Serial Device : /dev/ttyS0
B — lockfile Location : /var/lock
C — Calling Program :
D — Callout Program:
E — Bps/par/Bits : 9600 8N1
F — Hardware Flow Control : YES
G — Software Flow Control : NO
Change with setting?
将选项A的值设置为/dev/ttyS0 表示是串口1。
将选项E的值设置为你希望的波特率大小。
设置过程中命令的使用,例如需要修改选项A的值,在Change with setting?选项后输入A则光标转移到A选项后,可以对A选项的值进行修改。
3. 设置Modem and dialing
使用方向箭头选中modem and dialing 项,则修改modem and dialing 选项中的配置项。
需要修改的是去掉A — initing string ……:,B — Reset string ……:K — Hang-up string ……三个配置项。
4. 选择Save as df1。
选择Save as df1选项将修改后的配置信息进行保存为默认的配置选项。
5. Exit from minicom 。
选择Exit from minicom 选项从配置菜单返回到命令行。
6. 重新启动Minicom。
使用minicom 启动minicom 在linux下通过串口连接路由器,实现超级终端的功能。
Submitted by 枫飞天翔 on 2008, April 7, 12:51 PM
1 传输控制协议端口服务多路开关选择器
2 compressnet 管理实用程序
3 压缩进程
5 远程作业登录
7 回显(Echo)
9 丢弃
11 在线用户
13 时间
15 netstat
17 每日引用
18 消息发送协议
19 字符发生器
20 文件传输协议(默认数据口)
21 文件传输协议(控制)
22 SSH远程登录协议
23 telnet 终端仿真协议
24 预留给个人用邮件系统
25 smtp 简单邮件发送协议
27 NSW 用户系统现场工程师
29 MSG ICP
31 MSG验证
33 显示支持协议
35 预留给个人打印机服务
37 时间
38 路由访问协议
39 资源定位协议
41 图形
42 WINS 主机名服务
43 "绰号" who is服务
44 MPM(消息处理模块)标志协议
45 消息处理模块
46 消息处理模块(默认发送口)
47 NI FTP
48 数码音频后台服务
49 TACACS登录主机协议
50 远程邮件检查协议
51 IMP(接口信息处理机)逻辑地址维护
52 施乐网络服务系统时间协议
53 域名服务器
54 施乐网络服务系统票据交换
55 ISI图形语言
56 施乐网络服务系统验证
57 预留个人用终端访问
58 施乐网络服务系统邮件
59 预留个人文件服务
60 未定义
61 NI邮件?
62 异步通讯适配器服务
63 WHOIS+
64 通讯接口
65 TACACS数据库服务
66 Oracle SQL*NET
67 引导程序协议服务端
68 引导程序协议客户端
69 小型文件传输协议
70 信息检索协议
71 远程作业服务
72 远程作业服务
73 远程作业服务
74 远程作业服务
75 预留给个人拨出服务
76 分布式外部对象存储
77 预留给个人远程作业输入服务
78 修正TCP
79 Finger(查询远程主机在线用户等信息)
80 全球信息网超文本传输协议(www)
81 HOST2名称服务
82 传输实用程序
83 模块化智能终端ML设备
84 公用追踪设备
85 模块化智能终端ML设备
86 Micro Focus Cobol编程语言
87 预留给个人终端连接
88 Kerberros安全认证系统
89 SU/MIT终端仿真网关
90 DNSIX 安全属性标记图
91 MIT Dover假脱机
92 网络打印协议
93 设备控制协议
94 Tivoli对象调度
95 SUPDUP
96 DIXIE协议规范
97 快速远程虚拟文件协议
98 TAC(东京大学自动计算机)新闻协议
101 usually from sri-nic
102 iso-tsap
103 ISO Mail
104 x400-snd
105 csnet-ns
109 Post Office
110 Pop3 服务器(邮箱发送服务器)
111 portmap 或 sunrpc
113 身份查询
115 sftp
117 path 或 uucp-path
119 新闻服务器
121 BO jammerkillah
123 network time protocol (exp)
135 DCE endpoint resolutionnetbios-ns
137 NetBios-NS
138 NetBios-DGN
139 win98 共享资源端口(NetBios-SSN)
143 IMAP电子邮件
144 NeWS - news
153 sgmp - sgmp
158 PCMAIL
161 snmp - snmp
162 snmp-trap -snmp
170 network PostScript
175 vmnet
194 Irc
315 load
400 vmnet0
443 安全服务
456 Hackers Paradise
500 sytek
512 exec
513 login
514 shell - cmd
515 printer - spooler
517 talk
518 ntalk
520 efs
526 tempo - newdate
530 courier - rpc
531 conference - chat
532 netnews - readnews
533 netwall
540 uucp - uucpd
543 klogin
544 kshell
550 new-rwho - new-who
555 Stealth Spy(Phase)
556 remotefs - rfs_server
600 garcon
666 Attack FTP
750 kerberos - kdc
751 kerberos_master
754 krb_prop
888 erlogin
1001 Silencer 或 WebEx
1010 Doly trojan v1.35
1011 Doly Trojan
1024 NetSpy.698 (YAI)
1025 NetSpy.698
1033 Netspy
1042 Bla1.1
1047 GateCrasher
1080 Wingate
1109 kpop
1243 SubSeven
1245 Vodoo
1269 Maverick s Matrix
1433 Microsoft SQL Server 数据库服务
1492 FTP99CMP (BackOriffice.FTP)
1509 Streaming Server
1524 ingreslock
1600 Shiv
1807 SpySender
1981 ShockRave
1999 Backdoor
2000 黑洞(木马) 默认端口
2001 黑洞(木马) 默认端口
2023 Pass Ripper
2053 knetd
2140 DeepThroat.10 或 Invasor
2283 Rat
2565 Striker
2583 Wincrash2
2801 Phineas
3129 MastersParadise.92
3150 Deep Throat 1.0
3210 SchoolBus
3389 Win2000 远程登陆端口
4000 OICQ Client
4567 FileNail
4950 IcqTrojan
5000 WindowsXP 默认启动的 UPNP 服务
5190 ICQ Query
5321 Firehotcker
5400 BackConstruction1.2 或 BladeRunner
5550 Xtcp
5555 rmt - rmtd
5556 mtb - mtbd
5569 RoboHack
5714 Wincrash3
5742 Wincrash
6400 The Thing
6669 Vampire
6670 Deep Throat
6711 SubSeven
6713 SubSeven
6767 NT Remote Control
6771 Deep Throat 3
6776 SubSeven
6883 DeltaSource
6939 Indoctrination
6969 Gatecrasher.a
7306 网络精灵(木马)
7307 ProcSpy
7308 X Spy
7626 冰河(木马) 默认端口
7789 ICQKiller
8000 OICQ Server
9400 InCommand
9401 InCommand
9402 InCommand
9535 man
9536 w
9537 mantst
9872 Portal of Doom
9875 Portal of Doom
9989 InIkiller
10000 bnews
10001 queue
10002 poker
10167 Portal Of Doom
10607 Coma
11000 Senna Spy Trojans
11223 ProgenicTrojan
12076 Gjamer 或 MSH.104b
12223 Hack?9 KeyLogger
12345 netbus木马 默认端口
12346 netbus木马 默认端口
12631 WhackJob.NB1.7
16969 Priotrity
17300 Kuang2
20000 Millenium II (GrilFriend)
20001 Millenium II (GrilFriend)
20034 NetBus Pro
20331 Bla
21554 GirlFriend 或 Schwindler 1.82
22222 Prosiak
23456 Evil FTP 或 UglyFtp 或 WhackJob
27374 SubSeven
29891 The Unexplained
30029 AOLTrojan
30100 NetSphere
30303 Socket23
30999 Kuang
31337 BackOriffice
31339 NetSpy
31666 BO Whackmole
31787 Hack a tack
33333 Prosiak
33911 Trojan Spirit 2001 a
34324 TN 或 Tiny Telnet Server
40412 TheSpy
40421 MastersParadise.96
40423 Master Paradise.97
47878 BirdSpy2
50766 Fore 或 Schwindler
53001 Remote Shutdown
54320 Back Orifice 2000
54321 SchoolBus 1.6
61466 Telecommando
65000 Devil
Submitted by 枫飞天翔 on 2008, April 4, 12:56 PM
1.查看版本,内核
[oracle@svr15 ~]$ cat /etc/issue
Red Hat Enterprise Linux AS release 4 (Nahant)
Kernel \r on an \m
[oracle@svr15 ~]$ cat /proc/version
Linux version 2.6.9-5.ELsmp (bhcompile@decompose.build.redhat.com) (gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)) #1 SMP Wed Jan 5 19:30:39 EST 2005
[oracle@svr15 ~]$ uname -r
2.6.9-5.ELsmp
2.查看cpu,mem
[oracle@svr15 ~]$ grep "model name" /proc/cpuinfo
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
[oracle@svr15 ~]$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
stepping : 6
cpu MHz : 1995.006
cache size : 64 KB
physical id : 0
siblings : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm pni monitor ds_cpl tm2 xtpr
bogomips : 3956.73
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
stepping : 6
cpu MHz : 1995.006
cache size : 64 KB
physical id : 0
siblings : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm pni monitor ds_cpl tm2 xtpr
bogomips : 3981.31
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
stepping : 6
cpu MHz : 1995.006
cache size : 64 KB
physical id : 3
siblings : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm pni monitor ds_cpl tm2 xtpr
bogomips : 3981.31
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
stepping : 6
cpu MHz : 1995.006
cache size : 64 KB
physical id : 3
siblings : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm pni monitor ds_cpl tm2 xtpr
bogomips : 3981.31
[oracle@svr15 ~]$ grep MemTotal /proc/meminfo
MemTotal: 4147280 kB
[oracle@svr15 ~]$ free
total used free shared buffers cached
Mem: 4147280 4138220 9060 0 106124 3865896
-/+ buffers/cache: 166200 3981080
Swap: 4192924 0 4192924
3.查看操作系统位数
[oracle@svr15 ~]$ ls / #如果有lib64或这个目录,那操作系统就是64位的
bin boot dev etc home initrd lib lost+found media misc mnt opt proc root sbin selinux srv sys tmp usr var
[oracle@svr15 ~]$ getconf LONG_BIT
32
[oracle@svr15 ~]$ ldd /sbin/mii-tool
libc.so.6 => /lib/i686/libc.so.6 (0x00b2f000)
/lib/ld-linux.so.2 (0x00a49000)
Submitted by 枫飞天翔 on 2008, March 31, 6:01 PM
机房施工当中,闲着无聊,突发奇想,一根网线里面8跟细线,跑百兆只用到4跟,只要1236通了就行,剩下的4跟还可以再做两个头,想起来当时学np的时候曾经做过,难度极高,主要是要做的好看,两个头就跟双头蛇一样,哈哈,结果忘了怎么做了,上网搜索了一下,果然还有比我更无聊的人也做过,下面的是方法:
条件:网线、网线钳。
方法:拨开网线,一共8根,看水晶头里的洞,按我说的插线,然后夹水晶头。
分成两组一组是:白橙,橙,白绿,空,空,绿,空,空
另一组是:白棕,棕,白蓝,空,空,蓝,空,空
注意:一定要买质量好的网线,并且网线不能走得太长。
绝对能行,出问题的话,要么是网线过长,要么是质量太差,要么是网卡问题。
Submitted by 枫飞天翔 on 2008, March 22, 3:39 PM
今天新进一台 DELL 2950 -3最新版本的服务器,6块 硬盘,做raid的时候发现支持raid6,不解,难道是我落后了?查资料得知,支持两块硬盘同时挂掉,好像很NB的样子,下面的内容摘自互联网
一、RAID5和XOR运算
为了照顾初学者,还是先把相关基本概念介绍一下,老手可以跳过这部分直接看下面。(别低头!是看本帖下面,想些什么呐~)
XOR运算是数理逻辑的基本运算之一,在课本上的符号是一个圆圈里面一个加号。实在懒得用插入符号功能,大家就凑合着看吧。
两个数字之间的XOR运算定义是:
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
(忽然想起试行新车牌的时候,有些深圳人用三位二进制数标记性别。010是男的,101是女的。Sorry,扯远了。)
多个数字XOR的时候,有两个特点:
A)结果与运算顺序无关。也就是 (a XOR b) XOR c = a XOR (b XOR c)。
B)各个参与运算的数字与结果循环对称。如果 a XOR b XOR c = d,那么a = b XOR c XOR d;b = a XOR c XOR d;c = a XOR b XOR d。
磁盘阵列中的RAID5之所以能够容错,就是利用了XOR运算的这些特点。上面例子中的a、b、c、d就可以看作是四颗磁盘上的数据,其中三个是应用数据,剩下一个是校验。碰到故障的时候,甭管哪个找不到了,都可以用剩下的三个数字XOR一下算出来。
在实际应用中,阵列控制器一般要先把磁盘分成很多条带(英文叫Stripe,注意不是Stripper),然后再对每组条带做XOR。
见下面第一个图。
P1 = 数据a XOR 数据b XOR 数据c
P2 = 数据d XOR 数据e XOR 数据f
P3 = 数据g XOR 数据h XOR 数据i
P4 = 数据j XOR 数据k XOR 数据l
扫盲部分就讲这么多,再不懂就google吧,满山遍野都是RAID5算法的介绍。
二、RAID6和Reed-Solomon编码
本来想写成“李德-所罗门编码”,但那样就不方便大家一边看帖子一边google了。
Reed-Solomon编码是通讯领域中经常碰到的一个算法,已经有15年以上的历史了。(靠!讲存储嘛,跟通讯有个鸟关系?)
其实很多校验算法都是通讯领域最先研究出来,然后才应用到其他领域的。前面说到的XOR算法对一组数据只能产生一个校验,搞通讯的工程师们觉得不够可靠,于是就研究出很多能对一组数据产生多个校验的算法。Reed-Solomon编码是其中应用最广泛的一个,咱们以前经常用的ADSL、xDSL、高速Modem都有采用。后来手机、卫星电视、数字电视、CD唱片、DVD、条码系统、还有……(有完没完!说存储呢!)连高级点儿的服务器内存也用这个算法做校验和纠错。(总算跟存储沾上点儿边~)
现在存储的工程师也觉得RAID5中只能容忍一颗磁盘离线不够理想,需要一种容忍多颗磁盘离线的技术,自然就会想到Reed-Solomon编码啦。把这种算法应用到存储中,就可以让N颗磁盘的空间装应用数据,M颗磁盘的空间装校验码(对一组N个数据生成M个校验,但实际上校验码是分散在所有磁盘上的),这样只要离线的磁盘不大于M颗,数据就不会丢失。
Reed-Solomon编码理论中有一个公式:
N + M + 1 = 2的b次方(在电脑里写公式真是麻烦!)
其中b是校验字的位数。(校验字是生成校验过程需要用的一个东东,不是最后的校验码。)举例来说,如果用8位的字节做校验字,那么M + N = 255,而RAID6是特指M = 2,这样N = 253。
就是说,用8位字节做校验字的话,理论上一个RAID6的磁盘组可以容下253颗磁盘。
当然啦,实际应用中,太多的磁盘一起做运算会严重影响性能,所以阵列控制器和芯片的设计者都会把磁盘组的容量限制在16颗左右。
(做了这么多无聊算术题,还是没提RAID6到底是啥!)
喂!喂!别走啊,很快就讲到RAID6的实现啦。
卖了这么多关子,实在是因为RAID6这个概念所指的意义太混乱。从功能上讲,能实现两颗磁盘掉线容错的,都叫RAID6。(至少我认识的销售们都这么认为。)但是实行这一功能的方式却有很多很多。(沉默3分钟)
真的很多!哎哟!别打啊~
Intel的P+Q RAID6,NetApp的RAID-DP,HP的RAID5-DP,还要很多实验室中的原型机都能实行这个功能。但是由于机制不同,各种所谓的RAID6,其性能表现、磁盘负载分布、错误恢复方式都完全不同。
你让我从哪说起好哩?
三、基于P+Q的RAID6
在Intel的80333IOP芯片中,有一个新的引擎叫P+Q单元,是专门用来处理RAID6加速的。详情请查阅Intel官方网站,讲座到此结束……(鸡蛋、西红柿、拖鞋。咦!这是谁的臭袜子?)
真当我什么都不懂啊!好,接着说。
对比RAID5的机制,Intel的P+Q RAID6是这样写磁盘的:
见下面第二个图。
这里每个条带中的P,跟RAID5里面的P意义完全一样,就是同一条带中除Q以外其它数据的XOR运算结果。
而Q呢,就是理解这个技术的关键所在了。
咳~咳~听好了。
Q是同一条带中各数据的女朋友们进行XOR运算的结果。
别翻白眼啊,书上就是这么写的啊!哦,还是英文的,我翻译给你听。
“把条带中每个数据分别GF一下,然后这些结果再XOR,就得到Q。”
(大哥,你到底懂不懂啊!GF是Galois Field的缩写,是法国著名数学家伽罗瓦发明的一种数学变换。)
哦,想起来了。伽罗瓦嘛,发明群论的那个。生于法国大革命前,二十出头就英年早逝,还是为了个姑娘跟人决斗被打死的。最著名的成果就是给3次以上方程判了死刑。是我人生第二偶像啊……
(唐僧!)
这个GF变换呢,就是这个淘气的伽同学当年为了逃避老师点名,而发明的一种教室换座位方法。按照这种方法,每个人都不会坐在自己的座位上,而且每个人都肯定会有座位。而且任意个同学的座位号进行XOR运算之后,仍然跑不出这个教室里的座位号。
(这个伽同学好像很无聊噢!没办法,人家聪明嘛!)
扯太远啦!回到正题。
在Intel 80333IOP中存着两个表格,分别对应GF正向变换和反向变换。任何一个8位二进制数,都可以直接在表格中查到对应的GF变换结果。(我还是想把这个结果说成是源数据的女朋友~)
这两个表格分别在Intel 80333IOP研发手册的第445页和446页,不过我估计大部分人会懒得去看。也是,看了又能怎么样呢?反正Intel已经把那玩意固化到芯片里了。
哇!都半夜2点了,说完P+Q RAID6的恢复,我要先zZZ……了。
如果一颗磁盘掉线,根本不需要Q用P直接就搞定了,跟RAID5一样。
如果两颗磁盘掉线,又分做两种情况:
A)坏的地方有Q。这种情况跟RAID5坏一颗磁盘一样,用XOR就恢复了。
B)坏的地方没有Q。用GF变换加XOR一起搞定。
结合上面表格的例子,如果磁盘5和磁盘6掉线。那条带1和条带2就属于情况A;而条带3、4、5和6属于情况B。


上回书说到P+Q的RAID6在Intel芯片里的实现。
其实P+Q只是一种算法,Intel IOP里面的硬件加速引擎并不是必须的。有一些产品就采用了PowerPC等不含P+Q引擎的CPU,一样不耽误P+Q RAID6功能。
GF转换表在软件里完成就是了。(不敢提女朋友的事了,怕Host说我~)
四、准RAID6技术
除了P+Q RAID6,还要好多种办法可以实现对两颗磁盘掉线的容错。
Billylee提供的Intel讲义中就提到一种Dual-XOR算法,这种方法就是取横向和斜向两个方向进行XOR运算,这样每个应用数据都在两个校验中留下痕迹,当两颗磁盘掉线时,就可以恢复数据。
但是Dual-XOR的恢复工作异常复杂艰苦,并不实用。很多技术人员研究这种算法的意义,完全是把它当作未经优化的原型思想。
如图,Pa是横向的校验,跟RAID5完全一样:
Pa1 = 数据a XOR 数据b
Pa2 = 数据c XOR 数据d
…………
Pa6 = 数据k XOR 数据l
Pb是斜向校验,定义为:
Pb4 = 数据a XOR Pa2 XOR数据f
Pb5 = 数据c XOR 数据e XOR Pa4
Pb6 = Pa3 XOR数据h XOR 数据j
可以看出Dual-XOR的校验生成过程比P+Q要简单,但是根据“麻烦守恒定律”,正向工作简单的事情,一般反向工作都会复杂。
备份和恢复一般也遵循这个规律。
(别跟我提CDP,那东西遵循的是广义麻烦守恒定律。每个I/O都打个时间标签,还都当宝贝存着不扔,这能是个不麻烦的事吗?Sorry,又扯远了。)
当两颗磁盘掉线的时候,Dual-XOR的算法只能支持逐个数据块的恢复,而且不同条带之间还要共同参与计算。
比如图中的磁盘1和2掉线,恢复数据e的时候,就要至少动用到数据f、Pb3、Pa4和Pb5。而数据c和Pa3的恢复还要依赖数据e的恢复。
总之恢复起来是件贼头痛的事情!

虽然Intel的Dual-XOR理论意义大于实际意义,但其改良的版本RAID-DP却已经被NetApp产品化。NetApp之所以喜欢这个类似Dual-XOR的RAID-DP算法,原因也很简单。
NetApp原本用的就是RAID4,而不是RAID5,其算法的中心思想就是每次I/O只跟两颗磁盘打交道就OK,自然就不会在乎RAID-DP中很多动作都只跟两、三颗磁盘打交道。
(这个思想也许在很多RAID5的Fans看来有点奇怪,难道不是磁头越多性能就越好吗?但是人家NetApp这么多年的经验都集中在WAFL文件系统上,而WAFL文件系统又是专门针对这种思想优化的。所以NetApp对这个略有异类的思想不仅没有放弃,而且越研究越起劲。)

这个递归式数据恢复机制简直像在玩RPG游戏,但是对WAFL文件系统来说,却的确是最合适的选择之一。
除了RAID-DP,还有X-Code编码、ZZS编码、Park编码……都可以看做是“准RAID6”。
下面这个图是X-Code的解释
P3x = 数据33 XOR 数据35 XOR 数据32
Px4 = 数据44 XOR 数据24 XOR 数据54
其他的校验是啥意思,不需要一一列出来了吧~

X-Code从理论上看,的确是个负载均衡、计算简单(只有XOR,没有类似GF一样的变换)、磁盘对称度很高的算法。但是实际应用还是有问题。
20楼的例子是5颗磁盘的X-Code编码方式,例子中的5个条带是一个整体,一起处理。如果写入的数据不多,没有写满前3个条带,就需要在写入的同时,把未更新的数据读出来,凑齐3x5个数据,再一起计算校验码。
如果是6颗磁盘,那就要6个条带作为一个整体。
7颗磁盘一个RAID组,就需要7个条带一个整体。
8颗磁盘一个RAID组,就需要8个条带一个整体。
9颗磁盘一个RAID组,就需要9个条带一个整体。
10颗磁盘一个RAID组,就需要10个条带一个整体……
总之这个算法的“重复单元”有点大。在实际应用中,这么大的“重复单元”使X-Code的应用面临两个问题:计算量大和空间浪费。(可能还有其他问题,比如名字太难听,总让人联想到黄色的东东。)
ZZS也叫俄罗斯编码,bingo!猜对了,真聪明。这就是三个俄罗斯人在1983年提出的一种编码方式,ZZS就是三个人名字首字母缩写,跟S.H.E.演唱组的命名规则一样。
与X-Code相比,ZZS的“重复单元”就小很多——7颗磁盘的时候,3个条带是一个整体。
人家ZZS论文里给出的是数学公式:n颗磁盘的时候,(n-1)/2个条带是一个整体。
从这个公式你应该能发现ZZS编码的一个要求……(我知道,只支持单数颗磁盘。)
嘿嘿!你错了!实际上,ZZS算法只支持磁盘的个数为素数:……5、7、11、13、17……
不过人家ZZS组合(暂时就这么称呼吧)也指出,ZZS算法允许其中一颗磁盘上面全写0。这样就可以在应用中支持4、6、10、12、16……(素数-1)颗盘了。
什么?还没明白?在计算的时候,内存里虚拟一个全0的影子盘不就行啦!

Park编码
Park是名IBM的员工,在Yorktown上班。他的业余爱好是……(Sorry,又差点跑题)
相比俄国人训练有素的数学功底,美国人既没有兴趣,也没有耐心再从算法上去优化“双重校验”的技术。但是美国人讲求实际的思想还是挺值得称道。
这不,人家Park就说了,“研究了这么多算法,最终目的不就是坏两颗盘数据仍可恢复吗。到头来算法搞得那么复杂,还不如我的看家本领——穷举法——更实在。”
Park同志是这样说的,也是这样做的(凝重的音乐声响起~)
他编了一个程序,让计算机帮他搜索给定磁盘数量的校验分布模式。
结果你猜怎么着,人家还真有收获。从3颗磁盘到38颗磁盘,除了8颗磁盘和9颗磁盘的情况,其他情况Park都找到了满足要求的校验分布模式。
什么?你问满足的是什么要求?两颗磁盘掉线数据可恢复啊。汗!
后来,一个名叫徐力浩(音)的中国人补上了8颗盘和9颗盘的校验分布表。(咱们中国人到底还是比米国人聪明那么一点点,哈~)
现在Park编码已经对从3颗到38磁盘的所有情况,都能给出双重校验分布方法。但是各种分布方法之间根本没有联系,所以只能在给定磁盘数量的时候,去查Park编码表。
Park编码的样子都是以3个条带为一个“重复单元”,其中1个条带专门用来存校验,另外2个存数据。
