一.总结
1.概念
NIS:Network Information Servic
NIS的主要版本是NIS+,但是,sun公司没有开源
NFS:Network File System 网络文件系统
NFS最新版版本是第4版,现在的主流版本是第三版。
RPC验证对方的网络是否存在与否的
命令模板:rpcinfo -p ip --->可以验证服务器或者本机得ypserv或者ypbind是否存在
2.认证
我们登录系统靠的是login程序
我们的认证信息到哪里匹配,是有nsswich文件决定的
account information:账号信息
获取账号信息的方法:local file(本地文件),nis,ldap(轻量级目录访问协议),winbindd,hesiod
auothentication
local file, nis, kerbors, ldap, smb, winbindd, smartcard
3.PAM:Pluggable Authentication Module 可插入式认证模块
这个模块是系统自带的
PAM是实现用户的认证是靠的PAM模块,
PAM模块存放在/lib/security/目录中,以pam开头的
在/lib/security/目录的模块是被某个应用程序来用的
那个软件需要用到pam模块,就回去找对应的模块。
那些软件需要使用那个pam模块来定义,是靠/etc/pam.d/目录下的与软件同名的文件来定义的
eg:vim /etc/pam.d/login ---->这个文件就是定以用户登录系统的时候用到的调用PAM模块的文件
4.# system-config-authentication --->可以打开并配置NIS的图形界面
或者:setup 和上面实现的一样的结果
5.# getent passwd ---->用来查看是否可以建立正常的连接了
# ypwhich ---->用来返回nis域名服务器是谁
# ypdomain --->返回nis的域名
# yptest --->同上面的几个命令一样,可以测试nis是否配置的用户是否可以通过认证
# rpm -ql yp-tools --->查看我们的nis可用的命令有哪些
二.Raid & Mdadm (249页)
1.raid是什么?
答:独立冗余整列,就是几块盘通过某种机制连接起来,当作一块盘来用。
r:redundant即冗余,就是当一块或者多块盘坏掉了,不会影响整体盘的使用
2.raid是有级别之分的,即level:级别只是表示连接方式不同,没有高下之分。
常见的级别:0,1,5,6,10
3.我们靠什么把这些磁盘连接起来,如何连接?
1)根据磁盘的硬件和软件的不同,我们的磁盘连接又称为硬raid和软raid之分
2)硬件raid通过raid卡来实现的,内核识别我们硬件raid的芯片卡的时候,必须要有该芯片的驱动;
以硬件实现的raid设备在/dev/目录下通常是以sd*开头的,被识别成类似SCSI设备的文件系统,因此,以sd开头
3)如果我们靠软件实现的raid,把硬盘连接起来,通常是靠kernel中的软件连接起来的;
用这种方式连接起来的硬盘通常在/dev/目录下是以md开头的文件系统
4.软raid的管理工具:mdadm
mdadm这个工具是工作在用户空间的工具,可以直接和工作在内核中的md的模块打交道,通知md怎么去串连这些磁盘,我们这里提到的磁盘不一定是这一整块磁盘,可以是一个分区,基于分区的意义是不大的
5.raid的常见级别的意义:
raid
0:实现磁盘性能提升的;就是在存数据的时候,将数据存到不同磁盘上,速度会快一倍(理论的);缺点:一块硬盘坏掉了,整个数据都不能用了;
1:镜像卷;提高数据的安全性,就是将数据同时存入两块磁盘,磁盘利用率是50%,写速度降低,读速度速度提升的
4:至少需要三块磁盘;就是将整个组合磁盘分成不同的块,一般比我们磁盘上的块大,然后,将不同块得数据存入到1号盘和2号盘;3号盘不存数据,是用来存入1块和2块的奇偶校验码的,校验码一般和他们的数据块是一样大的;但是,4模式是有一个很显著的缺陷的,就是3号磁盘很可能会成为系统瓶颈的,
5:至少需要三块磁盘,但是,存储方式不同于4模式,存储方式:将数据库轮流存储到每块磁盘上,校验码轮流存储到到每块磁盘上,是按顺序存储的,就是校验磁盘是轮流做的,不像4模式那样只将一块磁盘来做校验磁盘的;利用率是n-1/n;当用户访问某个数据的时候,一块磁盘坏掉了,用户是还可以访问的,另外两块磁盘会计算出数据来给用户的;但是,5模式有一个很大的缺陷,就是当同时坏掉两块磁盘的时候,整个raid磁盘就完了,这将是致命的;所以,5模式最多只允许坏掉一块盘。
6:至少需要4块磁盘,两块磁盘用来存校验码,存储方式同5模式的存储方式,轮流存储;最多允许坏掉两块盘;
5模式的改进:就是在5模式的基础上,用一块空闲的磁盘做备份,就是加入有一块盘坏掉了,它马上顶上去;
**从0和1级别我们可以看到各有优缺点,我们可以同时利用着两个模式,连接4块硬盘,来利用他们的优点:
1)连接模式是,分别将两块磁盘用1模式连接起来,组成A和B磁盘,再将A和B磁盘用0模式连接起来,组成一块大磁盘,这种两件模式的利用率依然是50%;我们称这种模式为10模式,叫一零模式;
6.网络存储
1)目前常用的网络存储有三种:
DAS:直接附加存储;就是通过总线直接和硬盘连接起来的
NAS:网络附加存储;就是通过网络来传输的,需要另一台主机
SAN
2)目前来讲,我们的md模块支持以下模式:
LINEAR模式:线性模式,即,就是将我们的磁盘简单的串连起来,当一块磁盘存满了,就会将数据自动存入到下一块磁盘
RAID0
RAID1
RAID4
RAID5
RAID6
RAID10
四.mdadm的使用方法和相关信息
1.mdadm就是创建软raid的工具,mdadm是个模式化工具
2.mdadm就是管理MD,即aka
3.语法模板:mdadm [mode] <raidevice> [options] <component-devices>
解释:[mode] :表示指定模式,可省略
<raidevice>:指定对那个raid设备进行操作,不可省略
[options]: 指定选项,mdadm有很多选项,有些事特有的,有些是共有的
<component-devices>:指定组成那些raid的设备
MODES:常用模式
Assemble:装配模式:就是我们将从一台主机上的raid设备放到另一台主机上,让其扫描并将raid启动起来的模式
Create:创建模式:指的是将几块硬盘创建成raid设备
Follow or Monitor:监控模式:监控一个raid的工作中的设备的工作状态的,只对raid1,4,5,6,10。有磁盘冗余的raid进行监控
Grow:增长模式,即:加盘了
Manage:管理模式
OPTIONS for mode:常用的选项
-A,--assemble
-C,--create
-F,--follow,--monitor
-G,--grow
-V,--verbose,必须和--detail --scan 和--examine结合着用
-s,--scan,扫描/proc/mdstat来查找到有多少个磁盘的
-S, 将某块raid设备停掉
-D,--detail 查看raide设备的详细信息
-r 移除磁盘
Options for create,or grow
-n,raid-devices= 用于指定当前raid有多少块活动的设备个数
-x,--spare-devices= 用于指定spare磁盘的个数的,刚好与-n相反,
-c,--chunk= 用户定义一次吞吐的总量叫chunk,2的n倍
-l,--level= 指定级别,即raid级别
-p,--layout= configures the fine details of data layout for raid5,and raid10 arrays,and controls the failure modes for faulty
五.我们现在基于分区创建raid0的步骤:(250页)
1.我们要创建raid0,首先要建的两个分区要是一样大。
2.我们建两个分区,这两个分区最好在不同的硬盘上,这样才会有效果
注意:我们分区完成之后,用t修改磁盘的类型,如下:
t
7 ---->这是指定那块分区
l ---->查找到Linux raid auto这一项,并修改它的类型为这个类型,即fd
fd
注意:这样的分区时不能直接格式化的,
3.做完上面的步骤之后,我们就可以创建raid0了
# partprobe
# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda7 /dev/sda8
注释:-C 就是创建模式,在创建之前要看一下/dev/有没有raid设备,然后开始编号
-a 表示是否在创建raid0时候,如果没有/dev/md0设备文件的时候,是否创建这个设备文件
-l 指定级别
-n 指定活动的磁盘个数,也可以是分区
/dev/sda7 /dev/sda8 这里表示对那些设备做raid
# cat /proc/mdstat --->查看我们做的raid设备是否成功
4.我们做的这个raid设备怎么用呢?下面需要格式化了
# mkfs -t ext3 -L RAID0 /dev/md0
注意:这里必须格式化的是md0设备
5.下面就是挂载了,和我们平常的挂载是一样的
# mkdir /mnt/data
# mount /dev/md0 /mnt/data/
# df -lh --->这时候,我们查看的raid设备/dev/md0要比我们实际的要小,这是很正常的
六.我们做raid1的步骤
1.我们划分出来三个df格式的分区,步骤和上面的一样。
2.# partprobe
3# mdadm -C /dev/md1 -a yes -l 1 -n 2 -x 1 -c 32 /dev/sda9 /dev/sda10 /dev/sda11
解释:我们用到了三块磁盘,而,-n只指定了2块磁盘,是因为-n是指定活动的磁盘,但是,/dev/sda11是用来备份的磁盘,处于不活动状态,所以在这里不指出来;而是用-x指出备份磁盘的个数;-c指定一次的吞吐量。
4.# cat /proc/mdstat
5.# mdadm --detail /dev/md0 --->我们这里用--detail查看raid设备的详细信息
6.然后同上,格式化、挂载之后就能用了
七.我们创建raid5,用三块磁盘的,并加入一块spare磁盘的模式
1.创建三个分区,同上
2.开始创建没有spare的 raid5模式
# mdadm -C /dev/md2 -a yes -l 5 -n 3 /dev/sdb{1,2,3}
# cat /proc/mdstat
3.加一块spare磁盘
# mdadm -a /dev/md2 /dev/sdb5
4.删除上面加的spare磁盘
# mdadm -r /dev/md2 /dev/sdb5
5.下面我们试一下我们的raid5有没有冗错的功能
1)我们在这里先格式化、挂载
# mkfs -t ext3 /dev/md2
# mount /dev/md2 /mnt/md2/
# cp /etc/fstab /mnt/md2/ --->是为让磁盘里有数据
2)下面我们模拟磁盘坏掉了
# mdadm --set-faulty /dev/md2 /dev/sdb1
# mdadm -D /dev/md2 --->可以查看到我们sdb1已经坏掉了,而且放在一边闲着了
3)下满看一下我们的磁盘还可以访问吗?
# ls /mnt/md2 --->这个可以看到我们的数据还是在里面的
6.下面我们将我们的冗错盘加入raide5中,
# mdadm -a /dev/md2 /dev/sdb5
# mdadm -D /dev/md2 --->这里我们在做完上面的一步之后,马上进行这一步,就可以看到,md5正在重建中,等一会再用此命令,就会显示md5已经同步了。
7.下面我们移除坏的磁盘
# mdadm -r /dev/md2 /dev/sdb1
八.重新加载阵列
1.当我们不想用这个阵列时,我们可以手动给它停了
# umount /mnt/md2/
# mdadm -S /dev/md2
2.我们现在又想重新装配上来
# mdadm -A /dev/md2 /dev/sdb{5,2,3}
3.这时候,我们发现一件很困难的事,就是当我们重新装配我们卸载的raid设备时候,就需要记住我们的设备名称,因为我们的系统没有给我们记录。
4.下面我们定义一个文件来记录我们的raid设备是哪些
文件的格式:如下
1)首先我们要定义那些设备是raide设备,我们需要用DEVICE来定义一下
echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > mdadm.conf --->这里就是向mdadm.conf文件中写入我们系统上的raid设备需要的分区,
解释:DEVICE指定/dev/hd*[0-9]这些设备为raid设备,
2)而后扫描一下系统上所有活动的raid设备,并保留下来
mdadm --detail --scan >> mdadm.conf
3)实现上面我们1)和2)的实验步骤
# vim /etc/mdadm.conf --->创建该文件并编写
内容:
DEVICE /dev/sdb5 /dev/sdb2 /dev/sdb3
然后再将mdadm扫描的信息发送到mdadm.conf文件中
# mdadm --detail --scan >> /etc/mdadm.conf
# vim /etc/mdadm.conf
内容如下:
DEVICE /dev/sdb5 /dev/sdb2 /dev/sdb3 /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10
ARRAY /dev/md0 level=raid0 num-devices=2 metadata=0.90 UUID=57108a6a:8026acb5:3d204178:30370c63
ARRAY /dev/md2 level=raid5 num-devices=3 metadata=0.90 UUID=75e647e4:86cd1909:ea93831d:26a31e1b
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 spares=1 UUID=390cbec4:cfcdc7bd:b5317f44:66072f8d
解释:第一行的内容为下面的三个raid设备用到的分区,需要手动写入
下面的三行是,我们扫描到我们系统的raid设备,并通过输入重定向进来的内容
5.下面我们来用上面我们定义的/etc/mdadm.conf文件,看一下它的作用
首先,我们先停掉我们的一个raid设备,停之前必须先卸载掉
# mdadm -S /dev/md1 /dev/md2 --->我们这里停两块设备
扫描我们定义的/etc/mdadm.conf配置文件,让其重新启动我们上面停止的raid设备
# mdadm -A --scan
6.软raid的扩展功能
eg:# mke2fs -j -b 4096 -E stride=16 /dev/md0
解释:-j:是将磁盘格式化ext3格式的文件系统
-b:指定磁盘块大小
-E:指定raid的扩展属性的
stride:是由chunk/block算出来的值,不是随便指的,注意:chunk和block在算的时候,单位必须相同,如:都用k
指定stride的好处:可以增加磁盘的读写性能,因为磁盘 每次读写的时候都需要计算一遍这个值,如果写了,就会直接读取这个值了。
九.逻辑卷的理论知识:LVM:Logical Volume Management
1.LVM类似于md这种驱动的,实现了逻辑意义上将多块块设备组织起来当作一个设备来使用的抽象的层次,所以我们说LVM是Abstract Layer,这个层次隐藏了底层硬件细节,而输出给用户更高层次的逻辑设备,类似于我们的软raid,但是,不完全相同,LVM包括raid,LVM可以做在raid上,还可以做在基本的分区上,只要是个块设备就行了。如果基于软raid上做LVM,就是基于一种逻辑层上的另一种逻辑层。
2.LVM支持比普通文件系统更好的功能,包括:可以动态的扩展磁盘空间,只要磁盘上有空间,还可以动态的缩小LVM磁盘空间,而且不用改变磁盘里的文件;还可以在用户看来是一块一存储空间来自多块磁盘;
3.Lvm有两个重要版本:Lvm1和Lvm2,我们今天广泛使用的是Lvm2。
4.Lvm如何在层次上实现的?
1)Lvm有三个重要的概念:Lv, pv, vg
2)如何连接着三个概念,并发挥功能的呢?
答:Lvm是基于块设备,所以可以是一个分区,还可以是整块磁盘设备。所以我们可以在分区的时候,直接将分区创建成pv格式的就行了,pv是有一堆的PE组成的,pv只是标志这是一个Lvm可用的设备;还要用一个命令创建成一个叫pv的设备,pv叫Pysical Volume,PE叫Pysical Extends(即,物理的磁盘区,类似与软raid的chunk);
多个pv组合起来就创建成了vg(Volume Group),vg将我们底层的pv(即,不同磁盘设备或者分区)显示给用户一个大的存储空间。所以说vg是可以增加和缩减的,只要我们在底层设备pv上增减或者删除pv就好了;
卷组就相当于我们磁盘上面得逻辑分区,不可以直接来使用,所以我们需要在vg的基础上创建lv(Logical Volume),lv和我么基本磁盘上的分区意义差不多,可以使用,但是,它不同以基本磁盘,它可以增加和缩减的;
5.在这三个层次上有三组非常相似的命令
pvdisplay,vgdisplay,lvdisplay
pvscan,vgscan,lvscan
pvcreate,vgcreate,lvcreate
pvremove,vgremove,lvremove
vgextend,lvextend
vgreduce,lvreduce
十.创建lv的步骤
1.创建pv的步骤
1)创建两个分区,但是需要修改分区类型为:8e Linux LVM
t
1 --->这里指的是哪一个分区
8e
2)这时候,我们创建的磁盘就可以让逻辑卷(LV)使用了
# partprobe
3)下面我们创建pv(物理卷)
# pvcreate /dev/sdc1
# pvcreate /dev/sdc2
创建好了pv之后,我们可以查看一下
# pvdisplay
2.创建vg(卷组)
# vgcreate myvg /dev/sdc1 --->myvg是我们给卷组起的名字,/dev/sdc1是我们指定为那个分区创建卷组
# vgdisplay
3.创建lv
# lvcreate -L 100M -n lv1 myvg
# lvdisplay
# lvdisplay myvg --->只显示某个卷组中的逻辑卷
这里会显示一行为Current LE 25;这里的LE与PE一样的功能;
显示的 LV Name /dev/myvg/lv1这一行表示我们的lv的路径
4.下面格式化我们的逻辑卷和挂载
# mkfs -t ext3 /dev/myvg/lv1 --->这里的路径就是我们lvdisplay显示出来的LV Name 后面的路径
# mount /dev/myvg/lv1 /mnt/data/
到这里我们的一个lv可以使用了
***************************************************************************************************************
5.下面我们增加lv的容量
我们这里先cp一些数据到我们的lv磁盘中去,证明我们添加lv的容量之后数据不会丢失
# cp /etc/fstab
我们扩展lv的命令:
lvcreate -L 200M /dev//mgvg/lv1 ---->表示将我们的逻辑卷扩展到200M
lvcreate -L +200M /dev//mgvg/lv1 ---->表示将我们的逻辑卷增加200M
下面的是小l,和上面的作用是一样的,只是小l是以PE为单位增加的
lvcreate -l 200M /dev//mgvg/lv1
lvcreate -l +200M /dev//mgvg/lv1
这里我们为我们的lv增加100M
# lvextend -l +25 /dev/myvg/lv1
# df -lh ---->我们这时候发现我们的lv并没有增加
我们查看到我们的磁盘并没有增大,是因为我们只增加了我们的物理边界,而没有增加我们的逻辑边界,而逻辑边界是在格式化的时候创建的,所以我们看到的lv的容量并没有增加。
我们这里增加逻辑边界
# resize2fs -p /dev/myvg/lv1 --->这时候,我们就会发现我们的lv容量变成了200M
我们做完了这些,重新访问我们的数据,发现我们的数据可以正常的访问
6.当我们的lv扩展到最大了,所有的vg已经使用完了,这时候,我们想要扩展lv就必须先扩展vg
# vgextend myvg /dev/sdc2
****************************************************************************************************************
7.当我们的磁盘分区分大了,可以不损失数据的情况下缩减lv
1)lv的缩减刚好与文件系统的扩展刚好相反,先缩减逻辑边界,然后再缩减物理边界
2)lv的缩减必须先卸载和检查(fsck:File System Check,叫文件系统一致性检查工具)
8.我们缩减lv的步骤
1)先检查文件的一致性,在检查之前必须卸载,检查工具可以使e2fsck或fsck
# umount /mnt/data/
# e2fsck -f /dev/myvg/lv1 --->这里的-f是强制性检查的 2)缩减逻辑边界
# resize2fs /dev/myvg/lv1 100M --->这个命令与我们扩展逻辑边界的时候多了最后面的参数,表示我们的文件系统缩减到100M
3)接下来,我们可以缩减我们的物理边界
# lvreduce -L 100M /dev/myvg/lv1
这时候,我们就实现了缩减lv的效果了
**************************************************************************************************************
9.缩减卷组:实际就是拿走pv,但是,在拿走pv之前,必须将数据拿走
1)pvremove 是删除物理卷的命令
pvmove 是移走数据的命令
2)移动数据
# pvmove /dev/sdc1
3)移完数据之后,开始缩减我们的pv了
# vgreduce myvg /dev/sdc1
# pvdisplay ----->可以看到sdc1没有卷组了
4)看一下我们的数据有没有受到影响
5)我们还可以将/dev/sdc1移出pv
# pvremove /dev/sdc1
到这里我们缩减卷组可以结束了
**************************************************************************************************************
十一.lv的备份和快照
1.在linux上传统的备份工具是dump,只能备份ext2/3的文件系统,不能备份文件
dump
-level# 这里表示-0或者-1等数字,指定备份级别的,级别有[0-9],0表示完全备份,大于0的表示增量备份。
eg:0 1 2 6 3 4 2这些备份级别表示后面的备份级别值备份比自己前面一个低的级别这段数据,对前面的解释:4的时候表示备份的是3到4这段时间的数据,最后面的2表示备份1到2这段时间段的数据。
-f file 指将备份存放的文件,可以是普通文件,也可以是设备文件
-u 表示自动更新/etc/dumpdates文件的;我们备份的级别存放在/etc/dumpdates文件中去
2.恢复数据:restore
restore
-r 表示重建文件系统
-f 指定从什么位置拷贝数据
3.创建快照的命令lvcreate,这个和创建lv的命令是一样的,只是选项不一样
-L, --size 指定创建的快照卷是多大
-c, --chunksize 指定chunk的大小
-n, --name 指定我们创建的快照名字
-s, --snapshotp 表示创造的卷的类型是快照卷
4.创建快照的步骤
# lvcreate -L 10M -s -n snap-lv1 /dev/myvg/lv1
# lvdisplay ---->可以查看到我们创建的快照卷
下面就需要挂载我们创建的快照卷,注意:这里一定要只读挂载
# mount -o ro /dev/myvg/snap-lv1 /mnt/snap/
注意:这里的快照一定不要将存储的数据超过快照卷,否者会崩溃的
5.对快照卷备份
# cp /etc/inittab /mnt/snap/
这时候就可以将我们的快照卷移除了
# umount /mnt/snap/
# lvremove /dev/myvg/snap-lv1
下面我们做一个测试
# umount /mnt/data/
# rm -rf /mnt/data/*
恢复快照
# cd /mnt/data
# restore -rf /tmp/lv1.backup
十二.Xen虚拟化技术
1.Xen is a virtual machine monitor(hypervisor) Xen是虚拟机监视器
2.Xen是工作在底层硬件之上,而且能够导出许多假的,但是可以模拟出一个完整的计算机给其他guesos的软件。
有了hypervisor以后,可以把一个物理机硬件模拟出来好几个,每一个硬件之上都可以装一个操作系统,这就是Xen
3.Xen实际就是一个层次,可以虚拟计算机上的硬件,并且调用计算机硬件的层次
4.我们的cpu是分四个层次的空间,像同心圆,最核心的空间运行的是内核,最外面的一层空间运行的是用户,即用户空间;中间两层空间是没有用的;但是,Xen在用到CPU时,最核心一层空间放的是Xen,次层运行的是虚拟出来的一个一个虚拟机;
在Xen的架构下,我们的虚拟出来的虚拟机有一台叫做特权虚拟机(hypervison),其它的叫非特权虚拟机,特权虚拟机就是用来管理其它非特权虚拟机用的,非特权虚拟机不能看见其它非特权虚拟机,而特权虚拟机却能看见所有的虚拟机;所以,我们可以通过特权虚拟机管理其它虚拟机,如:开启,关闭其它虚拟机;这就是虚拟化;
5.目前有5中虚拟化技术:
Emulator 模拟器
Full Virtualization 全虚拟化
Paravirtualization 半虚拟化
Library virtualization 库虚拟化
Application virtualization 应用虚拟化
6.关于Emulator
Emulator其实也是一个虚拟机软件,更我们刚才将的架构差不多的,但是模拟器模拟出来的虚拟机可以让我们的虚拟机CPU和真实的CPU不同,靠中间的一个软件来转换命令,让真实的cpu可以执行不同cpu的命令
7.关于Full Virtualization
与模拟器(Emulator)对应,完全虚拟化装的虚拟机和看到的平台这真实的完全一样,在虚拟机上执行的命令,需要先通过hypervisor,然后再提交给真实的硬件运行。
8.关于Paravirtualization
在半虚拟化中,我们的hypervisor导出一个修改的操作系统,除了一些特殊的指令,其它指令可以直接在物理cpu上执行。所以速度要比Full Virtualization快很多。
9.关于Library virtualization
可以将windows的库拷贝到linux上,运行windows的软件,例如:Wine
10.关于Application virtualization
将我们的系统限制在一个目录中运行,并将所需的东西,如:DNS,DHCP....等拷贝到这个目录中