syslinux/extlinux制作usb启动盘


isolinux,syslinux,pxelinux,extlinux的区别

isolinux 用于cdrom启动
pxelinux 用于网络启动
syslinux/extlinux 用于u盘或者cf卡启动


不过貌似syslinux现在越来越强大,任何都可以支持,cdrom,usb,gpxe,memdisk引导等。

什么是extlinux

extlinux是由syslinux派生来的,可以从ext2和ext3,btrfs, linux文件系统启动系统。
其工作方式和syslinux差不多,只是做了了很小的修改。
也就是说,使用extlinux先要格式化为fat32文件系统,然后直接安装。
既可以当usb启动盘,同时又不影响u盘使用。


extlinux

(1) 下载syslinux的包。已经编译好可以直接运行。
http://www.kernel.org/pub/linux/utils/boot/syslinux/


ubuntu发行版只需要apt-get install syslinux extlinux -y


(2) 插上U盘,并挂载上。(注意:必须先挂载上分区,这和syslinux相反!)


(3) 解开syslinux程序包,到extlinux所在的目录,执行:
./extlinux -i /mnt/usbdisk/
其中 -i表示安装,如果已经安装过extlinux,参数可用-u表示更新安装。第二个参数表示安装的路径。
将当前盘保存到主分区表,并且设为启动分区可执行:
cat mbr.bin >/dev/sdb
mbr.bin在syslinux程序包可以找到。


写extlinux引导配置文件extlinux.conf。
格式和syslinux一样,只是名字不同。从iso文件中复制syslinux.cfg出来就可以了。
cp isolinux.cfg extlinux.conf


设置为启动分区
parted /dev/sdx toggle 1 boot


分区

using gparted, or from a terminal:
For EXT2/3/4 (adjust accordingly), it would be:


# cfdisk /dev/sdx
# mkfs.ext4 /dev/sdx1
# e2label /dev/sdx1 USB_STICK
For FAT32, install the dosfstools package and run:


# cfdisk /dev/sdx
# mkfs.vfat -F32 /dev/sdx1
# dosfslabel /dev/sdx1 USB_STICK

参考archlinux的usb制作


#Where somefolder is the USB drive's mount point. Do not skip this step.
cd /media/somefolder/arch/boot/syslinux
#Type it exactly as you see it, including the dot.
extlinux --install .
dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sdx
parted /dev/sdx toggle 1 boot

syslinux安装到u盘

syslinux --directory /boot/syslinux/ --install /dev/sdb1


syslinux.conf

syslinux 按照如下顺序搜索配置文件


/boot/syslinux/syslinux.cfg
/syslinux/syslinux.cfg
/syslinux.cfg

搭建dns服务器


首先提出一些问题

  1. 什么是 DNS 的授权模式﹖是怎样进行的?
  2. zone 和 domain 的差别?
  3. 什么是 DNS 正解和反解?
  4. 什么是 DNS 的查询模式?
  5. 查询过程是怎样进行的?
  6. DNS cache 的作用和它对查询流程的影响?


BIND服务

在 Linux 上面﹐提供 DNS 服务的套件是叫 bind,
但执行服务程序名称则是 named。
请您确定系统上装有 bind﹑bind-utils﹑以及 caching-nameserver 这几个套件。


配置文件

/etc/named.conf
如果安装的是bind-chroot,则文件在
/var/named/chroot/etc/named.conf


/var/named/chroot/etc/named.caching-nameserver.conf
这个是主要配置文件的模板配置文件(区域模板配置文件


首先生成主要配置文件,复制出一份模板配置文件到此目录下,并更改名字为named.conf


cd  /var/named/chroot/etc    
cp  named.caching-nameserver.conf  named.conf
默认会有三个配置:


zone "." IN {
  type hint;
  file "named.ca";
};
根区域“ . ”(root zone) 的设定﹐同时它是一个 internet ( IN ) 的区域类别( class )。这里还指定了root zone 的服务器种类( type ) 为“hint”(也只有这个 zone 会使用这样的种类)。最后﹐用 file 指定这个区域记录文件为﹕“named.ca”﹐也就是“/var/named/named.ca”档案。


在 root zone 后面﹐您应该还会看到如下这两段,一个是localhost的正向解析,一个是反向解析。不允许自行更新DNS记录。


zone "localhost" IN {
  type master;
  file "localhost.zone";
  allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
  type master;
  file "named.local";
  allow-update { none; };
}; 
首先来看root zone,named.ca
里边的记录类似如下:


. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
以‘ . ’开头的﹐那就是所谓的 root zone 了﹗
第二栏都是‘ 3600000 ’﹐这是 TTL (Time To Live) 设定﹐也就是在 cache 中保留的时间,
其后的‘ NS ’是“Name Server”的意思﹐是 DNS 记录名称之一﹐也就是负责这个记录的 name server 是哪一台主机。
‘ A ’记录﹐也就是 Address 的意思﹐解释 [A-M].ROOT-SERVER.NET. 这些主机各自的 IP 地址所在。


如果您了解 DNS 的查询模式﹐您会知道 DNS 服务器在查询非自己管辖的 zone 的时候﹐首先会向 root 查询下一级的 zone 在哪里﹐然后逐级查询下去。但问题是﹕当 named 刚启动的时候﹐在 cache 里面一片空白﹐它怎么知道 root zone 的 servers 在哪里呢﹖这不是一个矛盾吗﹖所以﹐就必须靠这个档案告诉 named 关于 root zone 的 servers 有哪些﹖以及在哪里﹖


locaohost.zone




ssh隧道技术


什么情况下使用隧道

  1. 公司为了防止我们用XX软件封锁了它的端口或者服务器地址。
  2. nat穿越,或者叫ssh反向隧道访问内网的pc,比如:在家里访问我在公司的电脑。


通过在外网一个ssh服务器做代理,实现穿越功能。
我主要使用第二种功能,在家里访问公司的电脑。可以远程办公了。


建立本地隧道

建立本地隧道实现第一种隧道模式。
假设内网机子A要访问C,但被拒绝了,这样可以通过中间的B建立ssh本地隧道实现A-B-C的访问。
实际上这种一般不太常用,毕竟有很多代理服务器都可以方便实现代理功能。


在A上执行:


ssh -N -f -L 2121:C:21 B
ftp localhost:2121 # 现在访问本地2121端口,就能连接C的21端口了
这里我们用到了SSH客户端的三个参数:
-N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
-f 告诉SSH客户端在后台运行
-L 做本地映射端口,被冒号分割的三个部分含义分别是
需要使用的本地端口号
需要访问的目标机器IP地址(IP: 234.234.234.234)
需要访问的目标机器端口(端口: 21)
最后一个参数是我们用来建立隧道的中间机器的IP地址(IP: 123.123.123.123)


我们再重复一下-L参数的行为。
-L X:Y:Z 将IP为Y的机器的Z端口通过中间服务器映射到本地机器的X端口。


在这条命令成功执行之后,我们已经具有绕过公司防火墙的能力,并且成功访问到了我们喜欢的一个FTP服务器了。


通过SSH隧道建立SOCKS服务器

如果我们需要借助一台中间服务器访问很多资源,一个个映射显然不是高明的办法。
幸好,SSH客户端为我们提供了通过SSH隧道建立SOCKS服务器的功能。


通过下面的命令我们可以建立一个通过123.123.123.123的SOCKS服务器。
ssh -N -f -D 0.0.0.0:1080 123.123.123.123 # 将端口绑定在0.0.0.0上
通过SSH建立的SOCKS服务器使用的是SOCKS5协议,在为应用程序设置SOCKS代理的时候要特别注意。


建立远程SSH隧道

现象我想在家里访问公司内网的电脑,这时从外到内访问显然是不行的,但从公司内往外访问是正常的。
所以就是用远程ssh隧道,先通过内网ssh到B,然后通过访问B的端口就可以访问内网的A了。


在A上执行:
ssh -N -f -R 2222:127.0.0.1:22 B
现在,在B机器上我们用下面的命令就可以登陆公司的A机器了。
ssh -p 2222 localhost


我们现在重点说说参数-R。该参数的三个部分的含义分别是:
远程机器使用的端口(2222)
需要映射的内部机器的IP地址(127.0.0.1)
需要映射的内部机器的端口(22)
例如:-R X:Y:Z 就是把我们内部的Y机器的Z端口映射到远程机器的X端口上。


实际上这里所说的本地隧道和远程隧道(-L,-R),实际上指的是ssh代理listen的端口在本地还是在远端。
如果在本地listen就是本地隧道,如果要是在远端listen一个端口就是远端隧道。


一些技巧

检查隧道状态

有些时候隧道会因为一些原因通信不畅而卡死,例如:由于传输数据量太大,被路由器带入stalled状态。这种时候,往往SSH客户端并不退出,而是卡死在那里。一种应对方法是,使用SSH客户端的ServerAliveInterval和ServerAliveCountMax选项。ServerAliveInterval会在隧道无通信后的一段设置好的时间后发送一个请求给服务器要求服务器响应。如果服务器在ServerAliveCountMax次请求后都没能响应,那么SSH客户端就自动断开连接并退出,将控制权交给你的监控程序。这两个选项的设置方法分别是在ssh时加入-o ServerAliveInterval=n和-o ServerAliveCountMax=m。其中n, m可以自行定义。


如何将端口绑定到外部地址上

使用上面的方法,映射的端口只能绑定在127.0.0.1这个接口上。也就是说,只能被本机自己访问到。如何才能让其他机器访问这个端口呢?我们可以把这个映射的端口绑定在0.0.0.0的接口上,方法是加上参数-b 0.0.0.0。同时还需要打开SSH服务器端的一个选项-GatewayPorts。默认情况下它应当是被打开的。如果被关闭的话,可以在/etc/sshd_config中修改GatewayPorts no为GatewayPorts yes来打开它。


自动连接和防断线脚本

Linux平台ssh默认不支持把密码作为参数,不过有sshpass可以搞定


http://sourceforge.net/projects/sshpass/files/latest/download


下载,解压,编译,把可执行文件拷贝到合适的目录,执行命令格式如下:


sshpass -p "password" ssh -D 7070 user@serverip


貌似ubuntu下可以直接apt-get install sshpass


然后写脚本autossh.sh,内容如下:



#!/bin/bash
while [ '' == '' ]
do
 ssh_d_process_num=`ps aux|grep -E 'ssh \-' |grep -v grep |wc -l`
 if [ "$ssh_d_process_num" == "0" ]; then
  /home/user/sshpass -p "password" ssh -D 7070 user@ServerIP &
 fi

 sleep 300
done
执行一下这个脚本就可以了。sleep 300代表300秒查看一次,可以根据需要调整。

动态域名

花生壳linux程序下载地址:
http://www.oray.com/peanuthull/download\_linux.php


IPv6 NAT MAP66


相关的RFC

RFC6296的标题是IPv6-to-IPv6 Network Prefix Translation,描述了IPv6下的NAT的实现要点,给出了一个合理的建议,
既保持了IP的无方向性,又可以满足NAT的语义,这就是IPv6之NAT stateless的缘由,你不能再指望像IPv4的NAT那样只需要配置一条rule,然后反方向的rule动态生成,
IPv6情况下,两个方向的rule都需要你自己手工来配置。


IPv6子网和NAT的关系

IP地址可以划分为几个段,包括网络前缀,子网标识,主机标识,这在IPv4和IPv6中没有什么不同。
IPv4的NAT为了节约IP地址,也就是说,可供映射的IP地址pool中的地址小于或者远远小于其内部主机的数量,因此很有可能多个内部主机被映射成了同一个外部IP地址,
这如何来区分它们,因此不得不引入诸如第四层协议,端口等信息了,也就是我们熟知的五元组信息,因此IPv4的NAT实现大多数都是基于五元组流的,这样就保证了内核保持的NAT信息项的唯一性,同时也引入了很多副作用。


IPv6地址持有将近128位可随意调配的位,鉴于地址空间的庞大,一般的单位都会被分配到一个拥有很大量地址的网段,
此网段拥有足够多的地址来和内网主机进行一一映射,也就是说可用于映射的IP地址pool容量巨大无比,
关键是这个一一映射如何来保持,既然不想再使用非IP层的信息来保持信息,那就要用纯IP层的信息了,这样对上层影响最小。
对于IPv4,经典NAT使用了五元组来保持流标识信息,而对于IPv6,则更加绝妙,它利用(而不是使用)了checksum的算法,丝毫不管这个checksum是谁的checksum,因为它根本就不改变数据包的checksum…


checksum无关性和自动转换

这个很好解释,考虑
a+b+c+d=X
其中X就是checksum,我们把a,b当成源IP地址的两部分,c,d当成目的IP地址的两部分,我们作源地址转换,将a和b都改变,比如a改变成了A,
试问将b改成多少才能保持checksum的值X不变,这其实很简单,就是一个简单的一元一次方程求解的问题。
IPv6的建议NAT实现也是这个原理,只不过上面的一元一次方程是实数域的,而这个是计算机布尔数域。
既然可以不触动第四层的checksum值,那么NAT对第四层协议的影响也就减小了,虽然它还是解决不了诸如ESP/AH等穿越NAT的问题。
基于以上算法,IPv6在做NAT的时候,在给定的子网网段内,可以自动生成一个新的IP地址供映射之用,从算法本身来看,冲突的可能性非常之小致于0,
上述的做法对于IPv4几乎是不可能的,因为IPv4地址空间太小了。
既然IPv6的NAT机制“自动”为一个连接选择了一个IP地址,那么当返回包到来的时候,如何来把地址转换回原来的呢?
我们知道,IPv6的NAT已经不再使用五元组来维护NAT映射信息,也不在内核维护这种信息,那么“转换回去”这件事就要完全靠算法本身了,
恰恰就是算法本身能将转换后的地址再转回原来的,其依据就是本小节最开始处给出的一元一次方程解的唯一性,
在IPv6的NAT实现中,算法只针对IP地址中16位的地址信息进行自动生成,而其它的则需要手工显式配置,
由于内网IPv6地址可以使用MAC地址映射成唯一的地址,由于一元一次方程解的唯一性,那么转换后的地址也是唯一的,将这一切反过来,最后还是能映射回原始的IP地址的。

Linux上的MAP66

Linux上,IPv6的NAT MAP66是一个基本遵循RFC6296建议的Linux实现,编译安装很简单,详见其README,和IPv4的iptables一样:
1.配置正向的转换规则,将源地址fdca:ffee:babe::/64网段的地址转换为2008:db8:1::/64网段的地址
ip6tables -t mangle -A POSTROUTING -s fdca:ffee:babe::/64 -o eth2 -j MAP66--src-to 2008:db8:1::/64
可以看出,没有显式指定任何具体地址,类似IPv4的MASQUERADE和IPv4的IP Pool
2.配置反向包的转换规则,将正向包被转换过的地址再转换回去
ip6tables -t mangle -A PREROUTING -d 2008:db8:1::/64 -i eth2 -j MAP66 --dst-to fdca:ffee:babe::/64
可以看出,也没有显式指定任何具体的地址,更值得一提的是,内核并不维护任何关于NAT映射的信息,因此MAP66也不再依赖ip(6)_conntrack。


安装

安装最好直接看官网:
https://code.google.com/p/goagent/


不过为了自己方便,我也自己记录一下。


在GAE注册一个appid,https://appengine.google.com/

  1. 修改local\proxy.ini中的[gae]下的appid=你的appid
  2. 双击server\uploader.bat(Mac/Linux上传方法请见FAQ),上传成功后即可使用了(地址127.0.0.1:8087)

对于linux
在server目录下,python uploader.zip


安装python-gevent

安装pyopenssl

这个一般都安装了


wget http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.13.tar.gz && tar zxvf pyOpenSSL-0.13.tar.gz && cd pyOpenSSL-0.13 && sudo python setup.py install

Chrome下如何使用goagent

Chrome可以安装switchysharp插件
然后导入local中的SwitchyOptions.bak配置文件,之后就可以选择自动切换模式,他会根据规则自动选择是否使用代理。

有时goagent无法使用,解决办法

可能是google_cn服务被屏蔽
我们可以在proxy.ini中将profile=google_cn改成google_hk
将[google_hk]段中的mode = http改为mode = https,重启goagent解决。

遗留问题

我现在使用的是2.1.12版本,发现的问题是google analytics总是提示cookiemismatch。
搜了半天也解决不了。


raid介绍


RAID 的两个关键目标是提高数据可靠性和 I/O 性能。
通过把相同数据同时写入到多块磁盘(典型地如镜像),或者将计算的校验数据写入阵列中来获得冗余能力,当单块磁盘出现故障时可以保证不会导致数据丢失。有些 RAID 等级允许更多地 磁盘同时发生故障,比如 RAID6 ,可以是两块磁盘同时损坏。在这样的冗余机制下,可以用新磁盘替换故障磁盘, RAID 会自动根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在 RAID 中的多个不同磁盘上,并发数据读写要大大优于单个磁盘,因此可以获得更高的聚合 I/O 带宽。当然,磁盘阵列会减少全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。


关键技术

RAID 中主要有三个关键概念和技术:镜像( Mirroring )、数据条带( Data Stripping )和数据校验( Data parity )
数据条带,将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本,这与镜像的多个副本是不同的,它通常用于性能考虑。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上数据进行读写操作, 从而获得非常可观的 I/O 性能提升 。数据校验,利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。 不同等级的 RAID 采用一个或多个以上的三种技术,来获得不同的数据可靠性、可用性和 I/O 性能。

数据校验

采用数据校验时, RAID 要在写入数据同时进行校验计算,并将得到的校验数据存储在 RAID 成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中,甚至校验数据也可以分块,不同 RAID 等级实现各不相同。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。校验技术相对于镜像技术的优势在于节省大量开销,但由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件 RAID 控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。
海明校验码和 异或校验是两种最为常用的 数据校验算法。海明校验码是由理查德 · 海明提出的,不仅能检测错误,还能给出错误位置并自动纠正。海明校验的基本思想是:将有效信息按照某种规律分成若干组,对每一个组作奇偶测试并安排一个校验位,从而能提供多位检错信息,以定位错误点并纠正。可见海明校验实质上是一种多重奇偶校验。异或校验通过异或逻辑运算产生,将一个有效信息与一个给定的初始值进行异或运算,会得到校验信息。如果有效信息出现错误,通过校验信息与初始值的异或运算能还原正确的有效信息。


可管理性

实际上, RAID 是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。对于外部主机系统来说, RAID 是一个单一的、快速可靠的大容量磁盘驱动器。这样,用户就可以在这个虚拟驱动器上来组织和存储应用系统数据。 从用户应用角度看,可使存储系统简单易用,管理也很便利。 由于 RAID 内部完成了大量的存储管理工作,管理员只需要管理单个虚拟驱动器,可以节省大量的管理工作。 RAID 可以动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些都可以 大大简化管理工作。


RAID等级

RAID0

RAID0 是一种简单的、无数据校验的数据条带化技术。
RAID0 的性能在所有 RAID 等级中是最高的。
不提供数据冗余保护,一旦数据损坏,将无法恢复。 因此, RAID0 一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。
../img/raid0.png

RAID1

RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50%
RAID1 与 RAID0 刚好相反,是为了增强数据安全性使两块 磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。 RAID1 拥有完全容错的能力.
../img/raid1.png

RAID2

RAID2 称为纠错海明码磁盘阵列,其设计思想是利用海明码实现数据校验冗余。海明码是一种在原始数据中加入若干校验码来进行错误检测和纠正的编码技术,其中第 2n 位( 1, 2, 4, 8, … )是校验码,其他位置是数据码。因此在 RAID2 中,数据按位存储,每块磁盘存储一位数据编码,磁盘数量取决于所设定的数据存储宽度,可由用户设定。图 4 所示的为数据宽度为 4 的 RAID2 ,它需要 4 块数据磁盘和 3 块校验磁盘。如果是 64 位数据宽度,则需要 64 块 数据磁盘和 7 块校验磁盘。可见, RAID2 的数据宽度越大,存储空间利用率越高,但同时需要的磁盘数量也越多。
海明码自身具备纠错能力,因此 RAID2 可以在数据发生错误的情况下对纠正错误,保证数据的安全性。它的数据传输性能相当高,设计复杂性要低于后面介绍的 RAID3 、 RAID4 和 RAID5 。
但是,海明码的数据冗余开销太大,而且 RAID2 的数据输出性能受阵列中最慢磁盘驱动器的限制。
../img/raid2.png

RAID3

使用专用校验盘的并行访问阵列,它采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘,数据按位可字节的方式交叉存储到各个数据盘中。 RAID3 至少需要三块磁盘,不同磁盘上同一带区的数据作 XOR 校验,校验值写入校验盘中。 RAID3 完好时读性能与 RAID0 完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力。
目前, RAID5 算法不断改进,在大数据量读取时能够模拟 RAID3 ,而且 RAID3 在出现坏盘时性能会大幅下降,因此常使用 RAID5 替代 RAID3 来运行具有持续性、高带宽、大量读写特征的应用。
../img/raid3.png

RAID4

RAID4 与 RAID3 的原理大致相同,区别在于条带化的方式不同。 RAID4按照块的方式来组织数据.
RAID4 提供了 非常好的读性能,但单一的校验盘往往成为系统性能的瓶颈。对于写操作, RAID4 只能一个磁盘一个磁盘地写,并且还要写入校验数据,因此写性能比较差。而且随着成员磁盘数量的增加,校验盘的系统瓶颈将更加突出。正是如上这些限制和不足, RAID4 在实际应用中很少见,主流存储产品也很少使用 RAID4 保护。

RAID5

RAID5 应该是目前最常见的 RAID 等级,它的原理与 RAID4 相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更高的性能。
当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他 RAID 等级一样,重建数据时, RAID5 的性能会受到较大的影响。
RAID5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,是目前综合性能最佳的数据保护解决方案。 RAID5 基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。
../img/raid5.png


有人可能担心RAID5的可靠性,我试过,稳定性很好,同步完成后,拷贝数据上去,然后,随意的掉电,RAID5 组上的数据都没事。


RAID6

前面所 述的各个 RAID 等级都只能保护因单个磁盘失效而造成的数据丢失。如果两个磁盘同时发生故障,数据将无法恢复。 RAID6 (如图 8 )引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。

RAID 组合等级

标准 RAID 等级各有优势和不足。自然地,我们想到把多个 RAID 等级组合起来,实现优势互补,弥补相互的不足,从而达到在性能、数据安全性等指标上更高的 RAID 系统。
实际得到较为广泛应用的只有 RAID01 和 RAID10 两个等级。
RAID01 兼备了 RAID0 和 RAID1 的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。 RAID01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。 RAID01 和 RAID10 内部都含有 RAID1 模式,因此整体磁盘利用率均仅为 50% 。
../img/raid10.png


linux上创建raid5

4个硬盘,每个硬盘都化分为一个区。
创建raid5


mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[a-d]1
创建RAID设备名为md0, 级别为RAID 5,使用3个设备建立RAID,空余一个做备用。
可以看来做raid只需要分区,所以一个硬盘可以分为多个分区,不同分区作为不同的raid type。


查看raid信息


mdadm --detail /dev/md0
513984 blocks [2/2] [UU]
The second line gives us some more information about the device. [2/2] [UU] tells us both partitions are used.


让RAID开机启动.配置RIAD配置文件


mdadm --detail --scan > /etc/mdadm.conf
修改下,格式,去掉devices后的=。
devices /dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1


如果其中某个硬盘坏了会怎么样呢?系统会自动停止这块硬盘的工作,然后让后备的那块硬盘顶上去工作。我们可以实验下.


mdadm /dev/md0 --fail /dev/sdc1
cat /proc/mdstat或者mdadm --detail
删除一个硬盘
mdadm /dev/md0 --remove /dev/sdc1


添加一个硬盘
mdadm /dev/md0 --add /dev/sdc1


OpenLDAP介绍


LDAP 入门

首字母缩略 LDAP 代表轻量级目录访问协议(Lightweight Directory Access Protocol)。
信息被集中存储在服务器上的 LDAP 目录中。LDAP 目录是一种数据库;然而,它不是关系数据库。
它的目录或数据库的结构与 UNIX 文件系统非常相似:
数据按层次存储;有“根”或“基本 DN”(专有名称,Distinguished Name);
目录被进一步细分成组织单元(Organization Units 或 OU);
在这些 OU 中是包含数据的项。
这种树-叶结构不仅使 LDAP 变得可扩展, 而且当进行简单的搜索或查询时,比传统的关系数据库更快。


LDAP 目录几乎可以存储所有类型的数据:电子邮件地址、DNS 信息、NIS 映射、安全性密钥、联系人信息列表和计算机名等。
可以通过 ACL(访问控制表,Access Control List)来控制对目录的访问。


LDAP 目录结构

DN

LDAP 目录树的“根”或顶部是基本 DN。基本 DN 通常有两种形式:organization=(例如,o=syroidmanor.com), 或者从组织的 DNS 域组件派生的 DN(dc=syroidmanor,dc=com)。

组织单元

在目录基本 DN 的下面是容器或组织单元(OU),它们从逻辑上对您的数据进行分隔或分组。


dc=foobar,dc=com
                ou=customers
                        ou=northamerica
                        ou=southamerica
                        ou=asia
                        ou=europe

个别项

项只是存储属性的地方。
属性是可用来将一种类型的信息存储在目录中的容器。
每个属性都有一种类型和一个或多个值。
LDAP 目录中的每个项都有唯一的 DN,每个 DN 都由两部分组成 ―“相对专有名称”(或 RDN)和对 LDAP 目录结构中存储记录的位置的引用。 几乎存储在 LDAP 目录中的所有数据都有一个唯一名称,这个名称通常存储在 cn 属性中。


对象类objectclass

对象类由 LDAP 目录使用来定义给定类型的对象可以有哪些属性。对象类还定义项必须有什么属性, 以及项可以有什么属性。所有对象类都从其父对象类继承需求,然后添加它们自己的需求。
对象类有五个组件:OID(对象标识)、唯一名称、父对象(SUP)、任何需要的属性(MUST)和 允许的属性列表(MAY)。
如:


objectclass ( 2.5.6.6 NAME 'person' SUP top STRUCTURAL
        MUST ( sn $ cn )
        MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

配置openLDAP

rootdn

rootdn 项控制谁可以对目录数据库进行写操作,以及他们要这样做所必须提供的密码。
您在 rootdn 项的 cn= 部分填充的任何项都是对数据库有完全读/写访问权的用户。
如果您打算存储在目录中的数据只有一点点机密性,则对密码进行散列处理。可以用 slappasswd 实用程序完成它,如下所示:



AC


access to dn=".*,dc=syroidmanor,dc=com" attr=userPassword
        by dn="cn=root,dc=syroidmanor,dc=com" write
        by self write
        by * auth
access to dn=".*,dc=syroidmanor,dc=com" attr=mail
        by dn="cn=root,dc=syroidmanor,dc=com" write
        by self write
        by * read
上面的配置仅允许 userPassword 属性的所有者修改项,但仅当所有者提供他或她的优先密码时才允许进行修改。 在所有其它情况下,只能出于认证目的来访问该项,而不能查看它。 第二个 access to… 项允许用户修改自己的电子邮件地址


插入数据

LDIF 方法


dn: uid=juser,ou=people,dc=syroidmanor,dc=com
uid: juser
cn: Joe User
givenname: Joe
sn: User
mail: juser@syroidmanor.com
objectClass: top
objectClass: mailRecipient
objectClass: person
objectClass: inetOrgPerson

openfiler 2.99创建raid


有人可能担心RAID5的可靠性,我试过,稳定性很好,同步完成后,拷贝数据上去,然后,随意的掉电,RAID5 组上的数据都没事。
OpenFiler读写性能很好,随便调整一下就能达到RAID5 下写130MB/S和读220MB/S的成绩,这个远远超过了FREENas的成绩。


创建raid5

一个磁盘用于安装系统,其他3块作为raid5.
进入root

设置gpt


parted /dec/sdb
mklabel
gpt

分区

整个磁盘化为一个分区,
mkpart primary 0 -0


设置raid标记

设置为raid分区
set 1 raid on


同样操作于
select /dev/sdc


在web上创建raid

Volumes > Software RAID:
Create the software RAID 5 with sdb1, sdc1 and sdd1.


Create the vg0 volume group with /dev/md0
Create the lv0 volume, using full space and XFS.


扩展

如果要再添加两块硬盘,


[root@localhost]# mdadm --add /dev/md0 /dev/sde1 add the two disks to /dev/md0
[root@localhost]# mdadm --add /dev/md0 /dev/sdf1

[root@localhost]# mdadm --grow /dev/md0 --raid-devices=5 set the RAID to use the two new disks

In the OpenFiler WEBinterface, Wait for /dev/md0 to be Clean and Synchronized, then:

[root@localhost]# pvresize /dev/md0 resize the physical volume /dev/md0
In the OpenFiler WEBinterface > Volumes > Manage Volumes > Edit properties of lv0 to use full capacity.


如果web上无法识别raid盘

首先需要把/dev/md0 mklabel为gpt
然后分区,mkpart primary ext2
设置lvm flag
set 1 LVM on


手动添加卷组:
vgcreate VG1 /dev/md0


测试速度

dd if=/dev/zero of=tmpfile bs=1M count=10000


优缺点

优点:


1、兼容性很好,几乎可以识别所有的常见硬件,哪怕识别不了也可以装个REDHAT的驱动,REDHAT的驱动几乎是每个厂商都会提供的,上面那台HP SERVER RAID卡就是装了READHAT的驱动搞定的;


2、性能强大,支持网卡捆绑,上门的PC-SERVER通过网络访问,可以实现RAID5的245MB/S的读写速度,和本地盘没啥区别,要不是受制于HP PCSERVER网卡数量不够的限制,网络服务应该还能实现更高的速度,本地测试RAID5超过400MB/S的读写速度;


3、支持卷管理功能,支持在线扩展功能,支持按用户空间限制配置;


4、内部带OPENLDAP,用户的认证通过OPENLDAP认证,安全性很高;


5、支持WEB管理和系统监控,管理方便。


缺点:


1、页面管理功能要是没用过肯定一头雾水,监控管理功能很一般,只能算有吧;


2、用户认证使用OPENLDAP,配置麻烦,我折腾了一个小时才搞定;


3、不支持BT电驴什么的,虽然可以安装但是无法和WEB页面集成,感觉还是很不爽


4、不知道为何精简了RPM命令和yum命令,要在上面装点东西很麻烦,要先装RPM才能进行下面的工作。
应该是改为了conary。