LVM
LVM:Logical Volume Manager,逻辑卷管理(主要用于动态扩容)
屏蔽了底层磁盘布局,便于动态调整磁盘容量。
LVM相对传统分区方式的有下列优点:
- 空间利用率高
- 可以在线扩展容量
- 数据备份方便
- 可随意定义逻辑卷卷标
注意:/boot分区用于存放引导文件,不能应用LVM机制!
LVM机制的基本概念:
- PV(Physical Volume,物理卷) –》(普通分区/磁盘)
- 整个硬盘,或使用fdisk等工具建立的普通分区。包括许多默认4MB大小的PE(Physical Extents,基本单元)。
- VG(Volume Group,卷组) –》(很多个PV组成VG)
- 一个或多个物理卷组合而成的整体
- LV(Logical Volume,逻辑卷) –》(从VG(多个磁盘)分割出的一块空间)
- 从卷组中分割出的一块空间,用于建立文件系统。
- LE(Logical Extents,逻辑单元)与PE大小相同并一一对应
怎么建立
通过命令建立:
功能 | 物理卷管理 | 卷组管理 |
scan 扫描 | pvscan | vgscan |
create 建立 | pvcreate | vgcreate |
display 显示 | pvdisplay | vgdisplay |
remove 删除 | pvremove | vgremove |
extend 扩展 | 无 | vgextend |
reduce 减少 | 无 | vgreduce |
建立命令的用法:
- pvcreate 设备名
- vgcreate 卷组名 物理卷名1 物理卷名2
- lvcreate -L 大小 -n 逻辑卷名 卷组名
LVM应用实例
推荐步骤:PV–》VG–》LV–》格式化–》挂载使用文件系统
创建的时候:PV–》VG–》LV的顺序安装。
删除的时候:只能按照 LV–》VG–》PV的顺序删除。
PS:
问题:破坏lvm类型分区的/文件系统的时候,修复不了。(#fsck /dev/sdc3 -y –》修复超级块)
解决:首先破坏/dev/sda2不正确,牵涉到pv的问题,pv创建vg,然后创建lv ,破坏了sda2对应的pv就等于破坏了swap分区和/分区对应的lv,应该去破坏lv,不是直接破坏磁盘的sda2分区。然后去修复lv就可以了。
实际操作实验:
**删除的时候:只能按照 LV–》VG–》PV的顺序删除。
先用sda,创建标准分区的/boot分区。**
然后新建PV,在sda和sdb都创建。
创建VG卷组、LV逻辑卷
装完之后,进去,重启系统。
用命令建立pv、vg、lv
需求:拿4块(3块,1块用来扩容)磁盘给自己新建一个PV、VG、LV。
新建pv /dev/sd[cde] -》新建vg:vg_ent -》建2个lv:lv_music和lv_vedio
步骤:
①#pvscan
#扫描pv(物理卷):
#pvdisplay --》查看pv信息
#pvcreate /dev/sd[cde] #创建pv
②#vgscan #扫描卷组
#vgdisplay #查看一下所有的卷组
# vgcreate vg_ent /dev/sdc /dev/sdd /dev/sde #创建vg_ent(娱乐卷组)
#vgscan #查看一下
③# lvscan #扫描lv
# lvcreate -L 10G -n lv_music vg_ent
#从vg_ent卷组创建lv_music的逻辑卷,大小为10G
# lvcreate -L 49G -n lv_vedio vg_ent
# lvdisplay /dev/vg_ent/lv_music #查看创建好的lv_music
④# mkfs.ext4 /dev/vg_ent/lv_music #格式化
# mkfs.ext4 /dev/vg_ent/lv_vedio
⑤# mkdir /music
# mkdir /vedio
# mount /dev/vg_ent/lv_music /music #挂载使用
# mount /dev/vg_ent/lv_vedio /vedio
⑥开机自动挂载
#vi /etc/fstab
/dev/vg_ent/lv_music /music ext4 defaults 0 0
/dev/vg_ent/lv_vedio /vedio ext4 defaults 0 0
卷组扩容vg_ent
- ①# pvcreate /dev/sdf #添加一块PV(物理卷)
#pvscan #看一下所有pv
- ②# vgextend vg_ent /dev/sdf #扩展vg_ent这个vg
- ③#vgdisplay #能看到明显多了20个G(/dev/sdf的20个G)
逻辑卷扩容
# lvextend -L +10G /dev/vg_ent/lv_music
#为lv_music扩10个G
但是,此时虽然扩了lv,但是df -Th,会发现,没有挂载上。
需重新识别一下:
# resize2fs /dev/vg_ent/lv_music
再次df -Th,会看到已经识别了。
给根分区扩容
pvcreate –》vgextend –》lvextend –》resize2fs
(此时LogVol_employ 挂载在/,所以:)
# pvcreate /dev/sd[gh] (因为已有卷组和逻辑卷,所以不用再建!!)
# vgextend qipihu /dev/sd[hg]
# lvextend -L +30G /dev/qipihu/LogVol_employ
# resize2fs /dev/qipihu/LogVol_employ
思考
假如系统启动不了,需要进入营救模式,进去后是否能读取磁盘里的数据?
1.系统的分区:标准分区,如何读取?
标准分区不存在激活的问题!
2.系统的分区:lvm,如何读取?
进营救模式–》
vgchange -ay vg_ent #激活卷组vg_ent
vgchange -an vg_ent #停用卷组vg_ent
lvscan #查看lv的状态
vgchange 命令
用于修改卷组的属性,经常被用来设置卷组是处于活动状态还是非活动状态。处于活动状态的卷组无法被删除,必须使用vgchange命令来将其设置为非活动状态。
- vgchange -ay vg_ent #激活卷组vg_ent
- vgchange -an vg_ent #停用卷组vg_ent
- lvscan #查看lv的状态
注意:不激活卷组,使用不了lv!
raid 磁盘阵列(容错性)
磁盘阵列(Redundant Arrays of Independent,RAID),独立磁盘构成的具有冗余能力的阵列。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
- 硬件RAID (常用,有raid卡或raid芯片)
- 速度快,性能好,支持热插拔
- 需专门的RAID磁盘阵列卡,价格昂贵,还需配合相应的驱动
- 软件RAID(企业基本不用)
- 使用mdadm软件仿真磁盘阵列功能–》企业一般不用软raid,因为耗得是本身的内存。
- 无需专门硬件,性价比较好
- 设备文件标识是/dev/md0
根据可靠性、性能和成本对RADI划分了等级:
- RAID0、RAID1、RAID5、RAID6、RAID10、RAID01
RAID0:条带(striping):
(2块以上)三个盘依次写数据,非常快的读写速度;万一三个之一的盘坏了,就不能读取数据了
RAID1:镜像(mirroring):
两个盘同时写数据,如果其中一个坏了,无所谓。写入慢。
RAID4:带校验的条带:
在条带的基础上,添加了校验值。只允许坏一块。(能推出来)
RAID5:条带+分布校验:
大于=3块。允许坏2块。
校验值分布在每一块上!
RAID6:条带+分布校验+分布校验
大于=4块。允许同时坏2块。
RAID10:镜像+条带
大于=4块。允许同时坏2块。
RAID01:条带+镜像(不常用,没啥用)
RAID配置总结:
级别 | RAID0 | RAID1 | RAID5 | RAID6 |
---|---|---|---|---|
磁盘数 | >=2 | 2 | >=3 | >=4 |
容错功能 | 无 | 有 | 有 | 较强 |
读写速度 | 最快 | 写入慢 | 较快 | 较快 |
磁盘空间利用 | 100% | 50% | n-1 | n-2 |
使用RAID的场景:
- 数据库文件存放在磁盘上,raid6。
什么时候配置这个raid6?
- 在机器开机的时候进入专门的配置程序,类似于bios界面,创建raid就可以了。 不懂就打客服电话~
PS:
可以把8块磁盘做一个raid6,然后另外8块做一个raid6。
然后把两个raid6做成2个pv
把2个pv做成一个vg
再在vg下面做出n个lv即可。(lvm和raid技术的结合)
计划任务at命令
使用at命令调用atd进程设置在某个特定的时间,执行一次任务。
# atq
查询有无执行的计划任务,如果已经执行是看不到的
#at now + 5 minutes -f /root/1.sh
五分钟后执行1.sh
/var/spool/at –》#存放at制定的计划任务的。
计划任务
创建和管理在指定时间自动执行的任务。
注意事项:
- 要使任务计划在指定时间自动运行,计划任务的服务必须是启动的 。
# service atd status
atd (pid 2299) is running...
# service crond status
crond (pid 2288) is running...
—》背后一定要有一个守护进程来管理这个事情。
atd 和crond进程,它们是每1分钟去检测一次,是否有计划任务要执行。
不能做到每1秒钟检测一次,除非自己写脚本。—》while循环和sleep 1
如何理解服务和背后的守护进程的关系?
答:服务相当于一个项目,守护进程相当于完成这个项目的负责人,需要一直盯着。
所以今后学习的过程中一个服务的背后都会有一个相关的守护进程来执行。
周期计划任务crontab命令
使用crontab命令调用crond进程,设置按固定的周期(如每天、每周等)重复执行预先计划好的任务。属于周期性的计划任务。
服务名称:/etc/init.d/crond
主要设置文件:
用户定义的设置,位于文件:/var/spool/cron/用户名
# service crond restart
启动crond命令
cron服务配置文件:/etc/crontab (不怎么关注)
cron服务的日志文件:/var/log/cron
计划任务crond进程每分钟去检测一次有哪些任务要去执行,去/var/spool/cron目录下检测。
crontab的配置文件
# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin #注意:今后写脚本让crontab去自动执行的时候,尽量写命令的绝对路径!
MAILTO=root
HOME=/
# For details see man 4 crontabs
# 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
(每小时、每天、每星期、每月定期执行的任务脚本分别存放在这些目录中 )
crontab的日志文件
# cat /var/log/cron
查看此文件就可以知道计划任务是否执行
# crontab -l
#1 12 * * * echo "hello"
在计划任务的前面加一个#号,就是注释这个计划任务,不会再执行了
PS:
在centos下,run-parts命令位于/usr/bin/run-parts,内容是很简单的一个shell脚本,就是遍历目标文件夹,执行第一层目录下的可执行权限的文件。
管理cron计划任务
- 编辑计划任务:crontab -e [-u 用户名]
- root用户可以管理指定用户的计划任务。普通用户只能管理自己的计划任务。
- 查看计划任务:crontab -l [-u 用户名]
- 删除计划任务:crontab -r [-u 用户名]
cron命令含义:
时间周期设置 | 任务内容设置 |
---|---|
50 3 2 1 * | run_command |
分钟 小时 日期 月份 星期 | 命令的绝对路径 |
字段:
- 分钟 :取值为从0到59之间的任意整数
- 小时:取值为从0到23之间的任意整数
- 日期 :取值为从1到31之间的任意整数
- 月份 :取值为从1到12之间的任意整数
- 星期 :取值为从0到7之间的任意整数,0或7代表星期日
命令 :要执行的命令或程序脚本
时间数值的特殊表示法:
- * 表示该范围内的任意时间
- , 表示间隔的多个不连续时间点
- - 表示一个连续的时间范围
- /n指定间隔的时间频率
eg:
0 17 * * 1-5
周一到周五的每天17:00
30 8 * * 1,3,5
周一周三周五的每天的8:30
0 8-18 * * *
每天的8-18点整
0 12 */3 * *
每隔3天的12点整
练习:
1.root用户
①每天早上7:50自动开启sshd服务
②每隔5天的12点整清空一次FTP服务器公共目录/var/ftp/pub
③每周六的7:30时,重新启动httpd服务
④每周一、三、五的17:30时,打包备份/etc/httpd目录
答案:
crontab -e
①50 7 * * * /sbin/service ssh start
②0 12 */5 * * /bin/rm -rf /var/ftp/pub
③30 7 * * 6 /sbin/service httpd restart
④30 17 * * 1,3,5 /bin/tar -czvf httpd.tar.gz /etc/httpd
2.jerry用户
每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件。
crontab -e -u jerry
55 23 * * 7 /bin/cp /etc/passwd /home/jerry/pwd.txt
练习2:(面试真题)
某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
①在下午4:50删除/abc目录下的全部子目录和全部文件;
②从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
③每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
④在下午5:55将IDE接口的CD-ROM卸载(假设CD-ROM的设备名为hdc);
⑤在早晨8:00前开机后启动。
crontab -e
① 50 16 * * * /bin/rm -rf /abc/*
② vim 2.sh
cat /xyz/x1|awk '{print $1}' >>/backup/bak01.txt
0 8-18 * * * /bin/bash 2.sh
③ 50 17 * * 1 /bin/tar -czvf /backup.tar.gz /data
④ 55 17 * * * /bin/umount /dev/cdrom
⑤ 0 8 * * * /bin/mount /dev/cdrom /mnt
PS: 启动服务: 方法1:#service sshd start 方法2:#/etc/init.d/sshd start
crontab计划任务注意事项:
- 资源分配不均
- 多个计划任务同时运行
- 安全检查
- 防止有非法计划任务
- 周和日、月不可同时并存
- 容易导致计划任务时间混乱
注意:普通用户有计划任务,但是普通用户没登录,但是,计划任务会执行!! 计划任务执行与否跟用户登不登录没有关系!!
周期计划任务实验:
1.为root用户编写计划任务:
每周2、4、6的10点到17点的每隔5分钟自动将passwd、shadow这2个重要系统文件备份到 “备份的日期和时间.tar.gz”这种名称的文件里(例如:201202011615.tar.gz),备份文件放到/lianxi/目录下面。
答案:
#vim tar_date.sh
#!/bin/bash
d=$(date +%Y%m%d%H%M)
tar -czvf /lianxi/$d.tar.gz /etc/passwd /etc/shadow
#crontab -e
*/5 10-17 * * 2,4,6 /bin/bash /lianxi/tar_date.sh
anacron
作用:弥补cron在系统关机后不能执行计划任务的问题。
缺点::不能替代cron
按天、周或月为单位去检查系统未进行的cron任务,目录: /var/spool/anacron
开机时自动运行,然后将未执行的计划任务执行一遍后,anacron 就会自动停止
配置文件:/etc/anacrontab
小结:
执行一次的计划任务:
- at、batch
循环执行的计划任务
- crontab
为循环计划任务收拾残局的
- anacron