第三周作业
1. 图文并茂说明raid0,raid1, raid10, raid01, raid5等原理。
独立硬盘冗余阵列(RAID,Redundant Array of Independent Disks)简称磁盘阵列。RAID层级不同,数据会以多种形式分散在各个硬盘。
RAID-0以chuck单位,读写数据,因为读写可以并行处理,所以在所有的RAID级别中,速度最快,但是RAID-0没有冗余功能,也不具备容错能力。一个磁盘损坏所有数据都会丢失。
读写性能提升
可用空间:所有磁盘之和
磁盘利用率:100%
无容错能力
最少磁盘数:1+
RAID-1
两组以上的多个磁盘相互为镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID-0相同。另外写入速读有微小的降低。
读性能提升,写性能有所下降
可用空间:磁盘空间/2
磁盘利用率:50%
有冗余能力
最少磁盘数量:2+
RAID-5
数据以块为单位分布到各个硬盘上。RAID 5不对数据进行备份,而是把数据和与其相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
读写性能提升
可用空间N-1
有容错能力:允许最多一块硬盘损坏
最少磁盘数:3+
RAID01
多块硬盘先实现RAID0,在组合成RAID1
读写性能提升
可用空间:磁盘总数/2
容错能力:做raid0的块不能损坏,raid1的镜像可以损坏
最少磁盘数:4+
RAID10
多块硬盘先实现RAID0再实现RAID1
读写性能提升
可用空间:磁盘总数/2
容错能力:每组镜像最多只能坏一块
最少磁盘数:4+
2. 创建一个至少有两个PV组成的大小为20G的名为testvg的VG,要求PE大小为16M,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
首先在虚拟机上添加两块20G的硬盘,启动虚拟机
lsblk
然后创建PV物理卷
创建VG
根据图上显示,两个20G组成的testvg已经完成
创建testlv
创建文件系统
挂载到/users文件夹下
(开机启动就挂载可以配置fstab)
3. 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d/目录至自己的家目录。
4. 扩展testlv至7G,要求archlinux用户的文件不能丢失
实现逻辑卷的空间扩展
实现文件系统的扩展
5. 收缩testlv至3G,要求archlinux用户的文件不能丢失
重新挂载
6. 对testlv创建快照,并尝试基于快照备份数据,验正快照的功能
#根据/dev/testvg/testlv 文件大小创建一个3G大小名为testsnap的快照
lvcreate -L 3G -s -n testsnap -p r /dev/testvg/testlv
#然后删除/dev/testvg/testlv 挂载下的一些东西验证快照功能
cd /users/archlinux/
rm -rf ./*
umount /users
lvconvert --merge /dev/testsnap
mount -a
7. 创建10G的RAID1,要求CHUNK为128K,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sdb{1,2,3}
由于我一直提示当前等级不能制定chunk大小所有就没有指定
mkfs.ext4 /dev/md0
blkid /dev/md0
mkdir /backup
mount /dev/md0 /backup/
mount | tail -n 1
blkid /dev/md0
修改fstab设置开机自动挂载
8. 创建一个可用空间为10G的RAID10设备,要求CHUNK为256K,文件系统为ext4,开机可自动挂载至/mydata目录
1.mdadm -C
/dev/md1
-a
yes
-l 10 -n 4 -c 256
/dev/sd
{d,c,e}2
/dev/sde3
2.mkfs.ext4
/dev/md1
;
mkdir
/mydata
3.
mount
/dev/md1
/mydata/
4.blkid
5.
echo
"53776859-7494-46dc-897d-654be1cf5444 /mydata ext4 default 0 0"
>>
/etc/fstab
9. 静态配置网卡IP,centos/ubuntu实现
/etc/sysconfig/network-scripts/ifcfg-xxx
修改配置文件如下:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.1.114
PREFIX=24
GATEWAY=192.168.1.115
DNS1=114.114.114.114
10. 图文并茂解释TCP/IP 3次握手4次断开。
三次握手:
- 第一次握手:客户端给服务端发一个 SYN 报文,客户端的发送能力。
- 第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,服务端的接收、发送能力。
- 第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文服务器收到 ACK 报文之后,此时,双方已建立起了连接。客户端的接收、发送能力正常,服务器接收能力正常
四次挥手:
- 第一次挥手:客户端发送一个 FIN 报文。此时客户端停止发送数据,等待服务端的确认。(客户端:事情弄完了,发送结束报文)
- 第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。(服务器:收到结束的报文,反馈需要释放资源)
- 第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。(服务器:资源释放完毕,反馈结束报文)
- 第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,需要过一阵子以确保服务端收到自己的 ACK 服务端收到 ACK 报文之后。(客户端:收到服务器结束的报文,发送报文,断开连接)
11. 网卡绑定bond0的实现
查看系统内核是否支持bonding
cd /boot
cat config-3.10.0-1127.el7.x86_64 | grep -i bonding
停止NetworkManager服务
systemctl stop NetworkManager
systemctl disable NetworkManager
加载bonding模块
odprobe --first-time bonding
创建三个网卡配置文件:
[oetsky@localhost network-scripts]$ cat ifcfg-ens33
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[oetsky@localhost network-scripts]$ cat ifcfg-ens36
BOOTPROTO=none
NAME=ens36
DEVICE=ens36
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[oetsky@localhost network-scripts]$ cat ifcfg-bond0
TYPE=bond
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond0
DEVICE=bond0
ONBOOT=yes
IPADDR=192.168.1.123
PREFIX=24
BONDING_OPTS="mode=1 milimon=100 fail_over_mac=1"
加载bond0接口到内核(没有bonding.conf文件的使用vi命令新建一个。
[root@localhost network-scripts]# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=1 miimon=100
加载模块或者重启系统
modprobe bonding
检查模块是否加载成功
lsmod | grep bonding
重启网络
systemctl restart network
查看网卡绑定信息
cat /proc/net/bonding/bond0
12. 实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有
- 安装mysql
- 安装apache
- 免密钥登陆主机
当前我们只实现免密钥登陆主机
3)通过函数封装每个功能
4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
5)支持输入一批主机免密钥,使用数组 实现