Linux系统学习(四)

RAID技术

RAID:磁盘阵列

 

优点:

提高磁盘IO能力,磁盘能够并行读写

提高耐用性,磁盘冗余来实现

 

实现方式:

级别:多块磁盘组成在一起工作的方式不同

外接式磁盘阵列:通过扩展卡提供适配功能

内接式磁盘阵列:集成到主板上的RAID控制器

Software RAID: 通过软件来实现RAID功能

 

级别:

RAID0

- 读写性能会提高

- 可用空间: N * MIN

- 没有冗余特性和容错特性

- 最少磁盘数量: 2

 

 

RAID1

- 读性能提升,写性能略有下降

- 可用空间: 1 * MIN

- 用容错能力

- 最少磁盘数量: 2

 

RAID4

- 读性能提升,写性能略有下降

- 可用空间:N * MIN

- 有冗余特性(有专门的备份盘)

- 最少磁盘数量: 2

 

RAID5

- 读写性能都会提高

- 可用空间: N-1 * MIN

- 有冗余特性(通过校验数据的方式:1个盘的空间)

- 最少磁盘数:4

 

RAID6

- 读写性能都会提高

- 可用空间: N-2 * MIN

- 有冗余特性(通过校验数据的方式:2个盘的空间)

- 最少磁盘数:4

 

 

RAID10 : 先做RAID1再做RAID0

- 读写性能都会提高

- 可用空间: N * min /2

- 有冗余特性

- 最少磁盘数: 4

 

RAID01 : 先做RAID0再做RAID1

- 读写性能会提高

- 可用空间:N * min /2

- 有冗余特性

- 最少磁盘数: 4

 

 

- 实现方式:

1. RAID:通过软件方式模拟实现

2. RAID:从物理服务器层面:通过RAID适配器实现RAID

 

 

LVM技术

LVM 逻辑卷管理: 在物理设备上进行一层抽象,允许生成逻辑存储卷,相比于物理存储管理更加灵活

LVM将存储虚拟化,不受限于物理设备,屏蔽硬件相关存储参数,不需要卸载文件系统来去调整卷大小

或者数据迁移等

 

优点:灵活/可伸缩的存储池/在线的数据分配/管理命令简洁/卷快照等等

 

基本术语:

物理存储介质: 系统上的/dev/sda

物理卷: PV  /dev/sda1 /dev/sdb1...

卷组: VG  由多个PV组成的存储资源池

逻辑卷: LV  VG中拿存储资源直接使用

PE: 物理卷被划分成PE的基本单元(每个PE默认为4MB

LE: 逻辑卷被划分成LE的基本单位(同一个卷组中 LEPE相同的)

 

环境准备:

├─sdb1            8:17   0    5M  0 part

├─sdb2            8:18   0    5M  0 part

└─sdb3            8:19   0    5M  0 part

 

 

 

PV管理工具

pvcreate命令: 创建PV

使用方式: pvcreate <devices...>

[root@test ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3

 

pvs命令: 显示pv的相关信息

pvdisplay命令:显示PV的详细信息

 

 

VG管理工具

vgcreate命令:创建VG

使用方式: vgcreate <vg_name> <pvs...>

[root@test ~]# vgcreate vg_test /dev/sdb1 /dev/sdb2

 

vgs命令:查看vg相关信息

vgdisplay命令:查看vg详细信息

 

vgextend命令:扩展vg大小

[root@test ~]# vgextend vg_test /dev/sdb3

vgreduce命令:缩减vg大小

 

 

vgremove命令:删除vg

 

 

LV管理工具:

lvcreate命令:创建lv

使用方式: lvcreate -L #[mMg...] -n [name] <vg_name>

 

lvs命令:显示lv相关信息

 

lvdisplay命令:显示lv详细信息

[root@test ~]# lvdisplay /dev/vg_test/lv_test1

 

lvsremove命令: 删除lv

使用方式:

1. lvremove <vg_name> <lv_name>

2. lvremove </path/to/lv>  

path: [root@test ~]# cat /dev/vg_test/lv_test

 

[root@test ~]# lvremove vg_test lv_test1

 

扩展逻辑卷:

lvextend -L [+]#[MmGg] <lv_name|path/to/lv>

resize2fs <lv_name|/path/to/lv>

 

缩减逻辑卷:

umount /path/to/lv

lvreduce -L [+]#[MmGg] <lv_name|path/to/lv>

e2fsck -f /path/to/lv

resize2fs /path/to/lv

mount

 

快照功能:

lvcreate -s|--snapshot -L|--size Size[m|UNIT] LV

使用方式:

lvcreate -L Size[MmGg...] -s -n <Snapshot_name> <lv_name>

 

[ -p|--permission rw|r ] 设置快照权限

 

 

 

 

计划任务

 

Linux计划任务:

未来某个时间执行一次任务: at batch

周期性运行某个任务: crond

 

at命令  

[root@test ~]# at --help

at: invalid option -- '-'

Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...

       at [-V] [-q x] [-f file] [-mMlbv] -t time

       at -c job ...

       atq [-V] [-q x]

       at [ -rd ] job ...

       atrm [-V] job ...

       batch

 

用法说明: at [options] [time|batch] [job]

 

options:

-f : 指定执行文件

 

times:

HH:MM [YY-mm-dd]

moon,midnight...

tomorrow

now+#[min,hours,seconds....]

 

batch命令:

让系统自动选择空间时间去执行指定任务

 

实例:

cat 1.sh

echo "hello"

 

at now +1 minutes -f 1.sh # 1分钟后执行1.sh文件里的内容

 

atq命令: 可以去查看当前的任务队列

3 Thu Feb 13 03:16:00 2020 a root

 

Linux系统则是由crond服务来控制的;在Linux系统上面非常多的计划任务

都基本采用crond方式,因此crond服务默认是开机自启的;另外,由于用户可以

自定义计划任何,所以提供了crontab命令

 

 

Linux下的任务调度分为两类:

系统任务调度

用户任何调度

 

系统任务调度:系统周期性要执行的工作,比如定期写系统数据到磁盘中

 

[root@test ~]# systemctl status crond # 查看crond服务是正常运行的

 

[root@test ~]# cat /etc/crontab 就是系统任何调度的配置文件

SHELL=/bin/bash # 默认系统调度任务采用的shell程序

PATH=/sbin:/bin:/usr/sbin:/usr/bin # 默认系统调度任务采用的命令路径

MAILTO=root # 默认本地邮件服务用户

 

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name  command to be executed

 

分钟 小时  星期  执行用户(默认是root用户) 执行任务(命令|脚本)

 

 

举例: 执行用户root  执行任务: echo "hello"

时间表示法:

1. 特定值

给定时间有效取值范围的值

 

2. *

给定时间上有效取值范围的所有值,表示“每....

 

实例1root用户在每天晚上9.30执行指定任务

30 21 * * * root echo "hello"

 

3. 离散取值

#,#,# .....

 

实例2root用户在每周一周五晚上8点执行执行任务

 

0 20 * * mon,fri root echo "hello"

 

4. 连续取值

实例3zhangsan用户在每个月1-9晚上8点执行任务

 

0 20 1-9 * * zhangsan echo "准备还花呗"

 

5. 在执行时间范围上,定义步长

/# : 指定步长

 

实例4zhangsan5分钟执行指定任务

 

*/5 * * * * zhangsan echo "hi"

* */3 * * * zhangsan echo.sh # 3小时执行一次

 

用户任务调度:

crontab命令定义:每个用户都有专用的crontab文件: /var/spool/crond/Username

 

crontab命令:

[root@test cron]# crontab --help

crontab: invalid option -- '-'

crontab: usage error: unrecognized option

Usage:

 crontab [options] file

 crontab [options]

 crontab -n [hostname]

 

常用参数:

-u user:  指定执行用户,默认是root

-l: 列出任务列表

-e: 便器任务

-r: 移除任务

-i: 同-r参数,交互式

 

实例:

[root@test cron]# crontab -e # 将计划任务写到指定文件中

[root@test cron]# cat /var/spool/cron/root

* * * * * echo "hello"

 

计划任务场景:

日志: 只保留7天内的日志(使用计划任务在每天0点删除7天前的日志即可)

* * * * * find /var/log/java/*.log -atime 7 -delete | -exec rm -rf {}\;

 

备份: 备份指定数据/mydata/

10 0 * * * tar -czxf /backup/mydata.zip.tar /mydata/

 

posted @ 2020-04-27 10:55  喜欢玩基金的运维哥  阅读(158)  评论(0编辑  收藏  举报