逻辑卷的管理 LVM

LVM 逻辑卷管理LVM 逻辑卷管理 想象一个场景,某天你管理的服务器硬盘空间不足了,该怎么处理。当然是加硬盘,但若系统不允许关机,服务不能停,如何添加硬盘。此时我们可以在早期规划的时候就创建逻辑卷。逻辑卷可以在不影响系统运行的情况下弹性的扩展、压缩硬盘空间。 逻辑卷组成 如下图所示,逻辑卷的逻辑结构图,PV(physical volume)组成卷组VG(volume group),在卷组上可以创建逻辑卷LV(logical volume)。 PV (Physical Volume) PV 物理卷,就是硬盘或分区,和物理的硬盘有同样的功能,和普通硬盘的区别在于,它被标识为物理卷,有物理卷的管理参数,将来用它创建卷组用。 VG (Volume Group) VG 卷组,将多个物理卷集合为一个大的逻辑硬盘,类似于没有LVM功能的硬盘,为创建逻辑卷提供硬盘空间,普通硬盘上面分配空间是通过block块进行分配,而卷组中是通过PE进行分配,PE是逻辑卷中空间分配的最小单位,默认值为4M。 LV (Logical Volume) LV 逻辑卷,逻辑卷是在卷组的基础上将卷组分成不同大小的隔离空间,类似于非LVM中分区的概念。 逻辑卷的用途在于弹性的扩展,压缩磁盘空间。其并不具有容错能力和提高I/O性能的功能。 实验 一、 逻辑卷的创建 逻辑卷的创建步骤如下 创建物理卷 创建卷组 创建逻辑卷 创建文件系统 挂载文件系统 a. 准备实验环境 本实验中使用分区来创建物理卷,实际生产环境中一般使用整块硬盘来创建物理卷,我们创建4个分区/dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb4, 先使用3g分区创建逻辑卷,留一个分区到后面做扩展逻辑卷使用。 创建分区, 并将分区类型调整为8e(Linux LVM) # 使用fdisk分区 [root@zhubiaook ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xb0beda60.

RAID

RAID 独立磁盘冗余阵列RAID 独立磁盘冗余阵列 RAID 计算机发展初期,”大容量”硬盘相当昂贵,1988年加州大学伯克利分校的工程师们提出了使用多块廉价硬盘组合成”大容量”硬盘的解决方案,这便是RAID,所以早期RIAD称作Redundant Array of Inexpensive Disks,中文名:廉价冗余磁盘阵列。而随着后期的发展,将硬盘组合起来的RAID阵列卡并不便宜,甚至比硬盘本身还贵,所以RAID改名为Redundant Array of Independent Disks, 中文名:独立冗余磁盘阵列 RAID通过硬件的阵列卡(也有使用软件模拟,但一般情况不会这么做,性能太差)将多块容量相同的硬盘组合成一块逻辑的大硬盘。然后再在RAID盘上进行分区,装文件系统。这样做的目的是,配合不同的RAID级别,数据存储时,RAID先将数据分解成chunk(大小可以指定),然后并行的将chunk并行写入各个硬盘,读取也是并行的从各个硬盘中读取,提高了硬盘的I/O性能。其次还能实现存储数据的时候生成校验位,存储于某块或全部硬盘中,这样模块硬盘损坏,其上的数据也能通过其它硬盘计算而来,这是自动进行的,提高了硬盘的容错能力。总之使用RAID,配合不同的运行级别,将提高硬盘总体的I/O性能和容错能力。 RAID实现方式 外接RAID卡 主板集成RAID控制器 通过软件模拟 对于有硬件的RAID卡,可以在启动BIOS时按照硬件厂商提供的配置界面对RAID进行配置,然后再在RAID盘上安装操作系统。也可以先安装操作系统再配置RAID。 RAID级别 目前常用的RAID级别: RAID-0, RAID-1, RAID-5, RAID-6, RAID-10, RAID-01 RAID-0 条带卷 strip, 将数据分割成chunk, 存在不同的硬盘中,写入和读取时并行进行。 提升读写能力 无容错能力 最少磁盘数2 可用空间: n*min(disk1,disk2 …) RAID-1 镜像卷 mirror, 存储数据时,将数据复制一份存在另一块硬盘中。读取时并行进行。 降低写入能力,提升读取能力 可以同时坏一块硬盘 最少两块磁盘 可用磁盘空间: 0.5*n*min(disk1,disk2,disk3 … ) RAID-4 存储数据的时候,并行进行,并生成校验位, 其中一块磁盘做校验盘,通过计算可算出任意一块磁盘的数据,读取数据也是并行进行。RAID-4有一个天生的缺陷,由于该级别使用一块硬盘来存储校验位,实际生产经验得到,这块存储校验位的硬盘总比其它硬盘更容易损坏,可能是其I/O次数比其它硬盘多所致。 提高读写能力 可以同时坏一块磁盘 至少三块磁盘 可以空间: (n-1)*min(disk1,disk2 … ) RAID-5 为了改进RAID-4的缺陷,RAID-5各磁盘轮循做校验盘。 提高读写能力 可以同时坏一块磁盘 至少三块磁盘 可以空间: (n-1)*min(disk1,disk2 … ) RAID-6 RAID-6在RAID-5的基础上,存储数据的时候计算两份校验只,将校验验值存在不同磁盘中,各磁盘轮循做校验盘

磁盘配额 quota

磁盘配额 quota磁盘配额 quota 对于多用户的Linux系统而言,磁盘空间总是很宝贵的,若某用户过度占用磁盘将影响其他用户的使用,若磁盘空间耗尽将会影响系统的正常运行。征对此种情况,我们可以通过磁盘配额限制普通用户最大能使用的磁盘空间。 quota 常用情况 /home/ 限制家目录的空间 httpd server 限制网站空间 ftp server 限制网络共享空间 mail server 限制邮件空间 磁盘配额quota限制的方式 通过属主限制 当用户添加了quota, 该用户创建的的文件所占的空间必须遵守限额规定。即对文件的属主生效。 通过属组限制 当属组添加了quota,主组是该组的用户所创建的文件所占的空间必须遵守限额的规定。即对文件的属组生效。 quota 限制方法 限制block,磁盘容量,一般使用这种方式 限制inode,创建文件的数量 柔性劝导(soft),硬性规定(hard),宽限期限(grace period ) 柔性劝导(soft): 当磁盘空间使用超过soft(block/inode)规定的值时将在每次用户增加磁盘空间的时候均提醒用户,在未超过硬性规定值之前,不禁止用户增加使用空间。 硬性规定(hard): 当磁盘空间超过硬性规定值之后,用户将无法再增加磁盘的使用空间。 宽限期限(grace period ): 设置soft和hard的目的在于提前提醒用户空间将快使用完,而宽限期限是当用户使用的空间在soft和hard之间时,再增加日期的限定,当超过此日期(从超过soft的时间开始算起),用户能使用的最大空间将是soft设定的值。 实验 这里的磁盘配额针对单独的分区做限制,默认新分区未启用磁盘限额的功能,我们需在挂载分区时添加磁盘配额特性,并启用该功能。其次还需在分区所挂载的目录下生成限额数据库(quota.user, quota.group 分别征对用户和用户的主组),我们新建两个用户(user1, user2)和组(grp1),将用户user1,user2的主组设定为grp1,然后对这两个用户和组添加quota磁盘空间限制,测试用户和组在启用配额的分区空间的限制 第一步 配置实验环境 关闭SELinux 不关闭SELinux,将无法生成磁盘配额数据库,所以我们这里将其关闭 #停用SELinux [root@zhubiaook work]# setenforce 0 #修改配置文件,禁止开机启动SELinux [root@zhubiaook work]# cat /etc/selinux/config | grep "^SELINUX=" SELINUX=permissive 创建用户和组 #创建组grp1

源码安装 rpm & yum

程序包管理: 源码安装 rpm & yum程序包管理: 源码安装 rpm & yum 操作系统上的程序都是程序员通过工具开发出来的,程序员直接编写的文本称为源码,计算机只能识别二进制文件,所以程序员编好的源码要能在计算机上运行需编译为二进制文件。 通过源码来安装首先要部署好系统环境,然后将源码编译为二进制文件,然后再将二进制文件及运行该程序的一些配置文件放到指定的目录下,这对于没有编程经验的人来说是很痛苦的一件事。系统厂商为了解决编译所给客户带来的麻烦,在与我们相同的系统环境上完成编译,并将二进制文件,配置文件,程序安装默认路径,程序相关信息打包压缩到一个文件中,发布到网络上或光盘中提供给用户下载,用户只需要将该文件下载下来,用系统厂商提供的安装工具进行安装即可完成软件的部署。对于CentOS系统,给系统厂商给我们提供的编译好的程序是以.rpm结尾的压缩文件,安装工具有rpm和yum,两者的关系后文件介绍。 源码安装 在网络上有很多开源程序是通过源码的方式发布的,若此时又没有编译好的压缩包,或者未针对我们使用的系统编译的程序包,那我们只能自己下载源码,自己编译。 我们以一个C语言编写的源码为例演示,程序开发、编译、运行的过程 编译过程如下: 程序源码(hello.c) --预处理--> 预处理程序(hello.i) --编译--> 汇编程序(hello.s) --汇编--> 目标程序--链接--> 可执行文件 首先安装好c语言编译工具gcc,gcc可以将源码一步就编译为可执行文件,但此处为了演示编译的过程,我们按上面的编译过程分步操作。 [root-yum.repos.d] $ yum -y install gcc 上面是通过yum工具安装gcc编译工具,对于yum安装的方式后文介绍 a. C语言源码 我们用C语言,打印一句经典的话”hello world!” [root-c] $ cat hello.c #include <stdio.h> //声明头文件 int main() //程序入口 { printf("hello world!\n"); //打印"hello world!" return 0; } b. 预处理 gcc中 -E选项是用来生成预处理程序 [root-c] $ gcc -E hello.c -o hello.i [root-c] $ ls

文件查找 locate & find

文件查找(find, locate)文件查找(find, locate) 在Linux文件系统中快速、准确的搜索到自己想要的文件是运维人员的一项基本能力 在Linux系统中主要使用find和locate来查找文件,两者的区别如下 locate 基于数据库索引进行查找,查找文件速度快,是模糊查询,查找不够精确,同时数据库自动更新周期为每天一次,导致不能实时查找,可以通过手动更新数据库来达到实时查找,不过更新数据库将会搜索整个磁盘,耗费系统资源,当系统繁忙时是一件危险的操作。 find 命令选项特别多,可以根据各种条件精确查找文件,通过搜索磁盘进行查找,属于实时查找,由于搜索磁盘,速度比locate慢。 locate locate [options] keyword locate 查找包含关键词或正则表达式匹配的文件路径或文件名,然后输出文件的完整路径,所查找的文件需具有读、执行权限。 常用选项 -i | –ignore-cate #查找文件时忽略大小写 -r | –regexp REGEXP #使用基本正则表达式匹配文件路径 -n NUM #输出搜索到的前N个匹配的路径 实例 查找家目录下面包含.txt的文件 [centos7@root math]# locate ~/*.txt /root/1.txt /root/3.txt /root/dest.txt /root/destination.txt /root/passwd.txt /root/shadown.txt /root/source.txt 查找/etc/目录下面结尾包含config,且路或文件名中包含数字的文件 locate -r "/etc/.*[[:digit:]]\+.*config$" <=使用正则表达式进行匹配 /etc/dconf/db/distro.d/10-authconfig /etc/selinux/targeted/active/modules/100/authconfig /etc/setuptool.d/98netconfig /etc/setuptool.d/99authconfig /etc/setuptool.d/99kbdconfig /etc/setuptool.d/99mouseconfig /etc/setuptool.d/99sndconfig /etc/setuptool.d/99timeconfig /etc/sysconfig/ip6tables-config 查找家目录下以m开头的文件,忽略大小写 [centos7@root math]# locate -i ~/m <= -i忽略大小写

bash 脚本编程基础–变量

bash 脚本编程基础–变量bash 脚本编程基础–变量 shell脚本语言是实现Linux/UNIX系统自动化运维的重要工具 bash 基础知识介绍 shell 与 shell 脚本 shell shell位于操作系统最外层,是用户与操作系统交互的工具。shell 是一种命令解释器,将用户输入的命令解释给操作系统执行,并处理操作系统的各种输出结果。 shell脚本 当我们将多条命令保存到文件中,便可方便、快速的执行多条命令。该文件便是shell脚本,shell脚本里不仅可以包含多条命令,还可以使用变量,流程控制语句(选择、循环、顺序)。 程序编程风格 程序是由指令+数据组成,程序编程风格有两种,过程式和对象式。 过程式:以指令为中心,数据服务于指令,面向过程首先分析解决问题的所有可能情况,然后将这些解决方法整理成各个步骤,然后按步骤通过调用函数等方式顺序执行。 对像式:以数据为中心,指令服务于数据,面向对象是将一切事物看做对象,甚至解决问题的思维也抽象成对象,对象并不是解决问题的具体方法,而是解决问题的模板,解决具体问题再将对象实例化。 shell脚本属于过程式编程风格,过程式编程语言有如下特点 顺序执行 选择执行 循环执行 编译执行与解释执行 计算机只能识别二进制的文件,执行二进制指令,所有人类编好的程序源码(文本文件)必须翻译成二进制数据后,计算机才能理解。翻译的方式有两种,一种是由编译器将源码翻译成目标二进制文件后由计算机统一执行,这个过程称为编译执行;另一种是每输入一行命令,解释器就解释执行一行命令,这个过程称为解释执行。解释执行操作方便,但执行效率相对较低。C,C++,JAVA都是编译执行,Bash脚本是解释执行。 另外需澄清的一点是,低级语言与高级语言之间并不存在好坏之分,所谓低级与高级是指相对于人类而言,还是相对机器而言,越接近机器的语言越低级,越接近人类的语言越高级。高级语言让人类更容易理解,但执行效率相对较低,而低级语言反之。比如汇编语言相对C语言属于低级语言,而C语言相对Python是低级语言,但他们的执行效率汇编是最高的。 变量、变量名与内存的关系 所有程序在未启动为进程之前都是存储在磁盘上的文件,CPU要执行程序,必须把程序启动为进程,即将磁盘上的程序包括数据加载到内存中,然后按程序的流程执行指令。显然CPU要能够从内存中将指令和数据读取到CPU内部才能执行它,CPU必然要知道要从内存中的哪块区域去读取下一条要执行的指令。为了达到此目的,内存将自己划分成了许多区域,每块区域都有一个地址编码,CPU就是根据该编码找到指令和数据的。内存中的某些区域的数据可能会要经常被使用到,我们可以记住这些区域的地址,使用到的时候就可以按地址去查找,这些区域便是变量,变量其实就是内存区域。这些地址都是数字,对于计算机而言很容易,但对人类来说简直就是痛苦,就像人们喜欢记住网站的域名,不喜欢记网站服务器的IP地址一样,所以我们将这些地址起一个名字,便是变量名。实际上为了安全起见,操作系统一般也不允许我们编写的代码里自己规划、使用内存空间,而是由操作系统分配给我们。 创建bash脚本 创建脚本的一般步骤为 编写脚本,一般使用vim作为编写脚本的编辑器 调试脚本 bash -n script_name #检查语法 bash -x script_name #调试 #如下为一个四则运算,判断用户输入的数字及运算符是否符合要求,符合要求再进行运算 #!/bin/bash #--------------------------------------------- # Author: zhuenbiao # File Name: arithmetic_operation.sh # Create Time: 2017-07-28 22:50:08 # Last Modified: 2017-07-28 22:50:08

文本三剑客之 grep

文本三剑客之 grep文本三剑客之 grep 正则表达式是一钟特殊的字符串模式,用于匹配一组字符串,正则表达式的宗旨是文本资源为我所用。正则表达式是vim, grep, sed, awk等重多强大文本处理工具的重要组成部分。正则表达式因”坑”多而闻名,其实是对正则的掌握不到位所致。各工具中正则的语法有所差别,我们将介绍在Linux系统上处理文本的三个重要工具grep, sed, awk。 本文首先介绍grep grep, sed, awk grep(包括egrep): 主要用来过滤文本 sed: 文本编辑 awk: 文本分析处理 正则表达式分类 在Linux系统中,正则表达式分为两类: 基本正则表达式 扩展正则正则表达式 正则表达式的组成 正则表达式一般由匹配字符,次数控制字符,位置控制字符,分组字符,普通字符组成,除了普通字符外的字符都叫元字符,元字符不再表示字符字面意义,而表示控制或通配功能。 基本正则表达式 字符匹配 用来表示通配功能 字符 作用 . 匹配任意单个字符 [] 匹配指定范围内的任意单个字符 [:lower:] 匹配小写字母, 同a-z,但与匹配路径的通配符不一样喔 [:upper:] 匹配大写字母,同A_Z [:alph:] 匹配所有大小写字母,同a-z,A-Z [:digit:] 匹配数字,同0-9 [:xdigit:] 匹配十六进制数字 [:alphnum:] 匹配所有字母和数字, 同a-z,A-Z,0-9 [:blank:] 匹配空白字符(空格和制表符) [:space:] 匹配水平或垂直空白字符(比[:blank:]包含的范围广) [:cntrl:] 匹配不可打印的控制字符(退格、删除等) [:print:] 匹配可打印字符 [:punct:] 匹配标点符号 [:graph:] 匹配可打印的非空白字符 匹配次数