硬盘知识,RAID,LVM,系统启动过程

硬盘类型

硬盘分区MBR,GPT知识

因为磁盘第一个扇区有512字节,MBR占446个字节,分区表(dpt)只占用64个字节,所以主分区最多四个(16*4=64byte)主分区表记录着分区的基本信息逻辑分区信息,liunx第一个逻辑分区一定是从sdb5开始(sdb4如果划分逻辑分区则代表整个逻辑分区不显示。)
硬盘知识,RAID,LVM,系统启动过程_第1张图片
硬盘知识,RAID,LVM,系统启动过程_第2张图片
gpt分区格式
硬盘知识,RAID,LVM,系统启动过程_第3张图片
1、保留MBR,GPT的分区方案,硬盘的第一个物理扇区,仍然是一个前面讲过的MBR,这个MBR主要是出于软件兼容性的考虑,对GPT分区方案本身来讲,其实没有啥意义。
2、GPT分区表头,这个在保留MBR之后,也就是占用第二个物理扇区,GPT分区表头中,定义了分区的数量,基本上,你可以认为GPT分区的数量是没有限制的;
3、GPT分区表,从第三个扇区开始,是实际的分区表。请注意:每个扇区可以保存4个分区信息,说明每个分区的分区信息占用的空间是128个字节。
4、从3中,我们知道每个分区的信息占用了四分之一个扇区,也就是128字节的空间,对比一下MBR分区方案中,每个分区的信息只有16个字节,所以GPT分区方案,有充足的空间去存储分区的开始位置及总的容量等,基本上,不用考虑对分区容量的限制。
5、从3中,我们知道,GPT分区方案,分了多少个区,就在分区表中有多少个分区信息。然而实际情形并不是这样,事实上,如图中所示:如果你使用windows操作系统,通常GPT分区表占用32个扇区的空间,可以保存128个分区信息,用不到的空间会被保留,实际使用了多少分区信息与保留了多少分区信息,在2中的GPT分区表头中设置。我们的电脑,通常不会有超过10个的分区,所以GPT分区表中的空间,90%以上都是保留空间,其实就是被浪费了。
6、接下来的两个部分,很简单,分别是GPT分区表,及GPT分区表头的备份。

以上就是GPT分区方案的大致内容,其实也不算复杂了。对普通用户而言,其实需要了解的GPT最重要的特点是:使用GPT分区方案,没有硬盘容量不能超过2TB大小的限制,这是GPT区别于MBR的特点与优点!

现在,可能你会觉得如何使用MBR与GPT了:硬盘容量小于或等于2TB时,用MBR或GPT都行;硬盘容量大于2TB时,用GPT。这种说法没错,但实际情况比这个要复杂些。windows32位系统不支持gpt格式。


系统启动过程

Centos6

  1. 加载 BIOS 的硬件信息,跟据设定取得第一个可开机引导设置,如:光驱,硬盘,网络,USB; 如果是硬盘为第一引导。
  2. 读取硬盘中 MBR 的 boot Loader 就是 grub引导
    GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。
    MBR的硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。
    磁盘默认一个扇区大小为:512字节。MBR由以下3部分组成:164+446+2=512
    第一部分是:主引导程序(boot loader)占446个字节。主引导程序,它负责从活动分区中装载,并运行系统引导程序。
    第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。每个分区表项长16个字节,16
    4=64字节。为分区项1、分区项2、分区项3、分区项4。64字节只存4个分区表。
    第三部分是MBR有效标识位,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。
  3. 依据 boot loader 的设定,到引导分区加载 Kernel ,Kernel 会开始侦测硬件并加载驱劢程序;
  4. 在硬件驱动成功后,Kernel 会主动执行 init 程序,而 init 会取得 run-level 信息;
  5. init 执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的作业环境 (如网络、时区等);
  6. init 执行 run-level 下各个服务并启动 (script 方式);
  7. init 执行开机后自动运行脚本 /etc/rc.d/rc.local 文件;
  8. init 执行虚拟终端机控制程序 mingetty 来启动 login 程序,最后就等待用户登入啦;
    硬盘知识,RAID,LVM,系统启动过程_第4张图片

vim /etc/inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)

id:3:initdefault: #这里决定系统启动的级别

/etc/rc.d/rc.sysinit shell脚本作用:系统初始化: 像:主机名 和/etc/fstab 都在这里指定了,完成了包括mount分区 激活swap 加载modules等重要的工作.

启动对应级别下的服务如: init 3 级别
/etc/rc.d/rc3.d/(这里的程序/服务S开头的全部开机执行;K开头的表示开机不执行,表明了关机时顺序)
rcn.d (n为1到6) 是对应于不同的runlevel下起不同的服务. 这些目录下都是一些符号连接, 连接到/etc/rc.d/init.d下的一些文件.以S开头的表示要启动, 以K开头的不启动.

在这里插入图片描述
#S10表示network是第10个启动的服务。 所以init是顺序启动系统,需要一个一个服务启动成功,再执行下一步操作,启动系统比较慢。而centos7中的systemd可以并行启动多个服务,启动比较快。

 vim /etc/init.d/network

#! /bin/bash

# network Bring up/down networking

# chkconfig: 2345 10 90
看有chkconfig的那一行, 2345表示在runlevel 2 3 4 5下被启动, 10是为此服务的启动顺序, 90为关机时,关闭此服务的顺序。
硬盘知识,RAID,LVM,系统启动过程_第5张图片
所有服务都运行成功后,设置开机自动执行某个命令: /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 18 2012 /etc/rc.local -> rc.d/rc.local

运行mingetty命令,打开tty1-6
硬盘知识,RAID,LVM,系统启动过程_第6张图片

runlevel #查看系统启动级别
N 3

centos7系统启动过程及相关配置文件

CentOS7启动顺序

  1. UEFi或BIOS初始化,运行POST开机自检
  2. 选择启动设备
  3. 引导装载程序, centos7是grub2
  4. 加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
  5. 加载内核选项
  6. 加载initramfs初始化伪文件系统
  7. 内核初始化,centos7使用systemd代替init
  8. 执行initrd.target所有单元,包括挂载/etc/fstab
  9. 从initramfs根文件系统切换到磁盘根目录
  10. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  11. systemd执行sysinit.target初始化系统及basic.target准备操作系统
  12. systemd启动multi-user.target下的本机与服务器服务
  13. systemd执行multi-user.target下的/etc/rc.d/rc.local
  14. Systemd执行multi-user.target下的getty.target及登录服务
  15. systemd执行graphical需要的服务

硬盘知识,RAID,LVM,系统启动过程_第7张图片
find /boot/ -name *img* #查看启动相关的IMG文件。
/boot/grub2/i386-pc/core.img
/boot/grub2/i386-pc/boot.img

Systemd运行原理-了解一下
Systemd概述: systemd即为system daemon [ˈdi:mən] 守护进程,是linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。
与多数发行版使用的System V风格init相比,systemd采用了以下新技术: (1) 采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能; (2) 用Cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息
Systemd配置文件:
/usr/lib/systemd/system/ #这个目录存储每个服务的启动脚本,类似于之前的 /etc/init.d/
/run/systemd/system/ #系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system/ #管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行

注意: 对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启

systemctl daemon-reload 

总结:centos5-6-7 3个系统版本启动过程
硬盘知识,RAID,LVM,系统启动过程_第8张图片
管理系统服务

- centOS6 CentOS7
启动 service name start systemctl start name.service
停止 service name stop systemctl stop name.service
重启 service name restart systemctl restart name.service
状态 service name status systemctl status name.service
重载或重启服务(先加载,再启动) - systemctl reload-or-restart name.service
- centOS6 CentOS7
设定某服务开机自启 chkconfig name on systemctl enable name.service
设定某服务开机禁止启动 chkconfig name off systemctl disable name.service
查看所有服务的开机自启状态 chkconfig --list sysls temctl list-unit-files --type service
用来列出该服务在哪些运行级别下启用和禁用 chkconfig sshd –list ls /etc/systemd/system/*.wants/sshd.service
查看服务是否开机自启 - systemctl is-enabled name.service

服务状态
systemctl list-unit-files #显示状态
• loaded:Unit配置文件已处理
• active(running):一次或多次持续处理的运行
• active(exited):成功完成一次性的配置
• active(waiting):运行中,等待一个事件
• inactive:不运行
enabled:开机启动
disabled:开机不启动
static:开机不启动,但可被另一个启用的服务激活

运行级别
centos6下Linux运行级别0-6的各自含义
0: 关机模式
1:单用户模式 ,用于破解root密码
2:无网络,支持的多用户模式
3:有网络支持的多用户模式(一般叫字符界面,工作中最长使用的模式)
4:保留,未使用
5:有网络支持,支持图形界面,支持的多用户模式(图形界面)
6:重新引导系统,及重启
可以在不同级别下,设置服务是否随系统启动运行。在centOS7上运行级别的含义已经和之前不同了,已由.target来代替运行级别,我们可以称target为目标态,我们可以通过target定制更符合我们工作运行环境。

 ls /usr/lib/systemd/system/*.target

硬盘知识,RAID,LVM,系统启动过程_第9张图片
发现在runlevel2-4 都是调用multi-user.target这个unit。所以在centos7上runlevel2-4是一个意思
systemctl list-unit-files --type target #查看所有target的状态
systemctl list-dependencies runlevel3.target #查看3级别Unit 的所有依赖。Unit 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启
动 A 的时候,同时会去启动 B。也可以理解也3运行级别下都开启哪些服务
切换终端命令
Init 0 ----------> systemctl poweroff 关机
Init 1 ----------> systemctl isolate rescue.target 单用户
Init 3 ----------> systemctl isolate multi-user.target 字符界面
Init 5 ----------> systemctl isolate graphical.target 图形化
Init 6 ----------> systemctl reboot 重启

systemctl set-default name.target 修改开机进入的target
ll /usr/lib/systemd/system/default.target #查看默认启动target 。

grub2和grub区别-了解
在centOS6上,我们的grub文件是**/boot/grub/grub.conf**
在centOS7使用grub2,配置文件改成**/boot/grub2/grub.cfg**了,但是功能还是大致一样的都是用于加载内核的,不过在centOS7上设置默认启动项发生了一些变化。
centos7修改内核启动顺序

vim /etc/default/grub

GRUB_TIMEOUT=5 #开机时 grub 默认5秒后启动内核
GRUB_DISTRIBUTOR="$(sed ‘s, release .*$,g’ /etc/system-release)"
改:GRUB_DEFAULT= saved
为:GRUB_DEFAULT= 1 #这里我们改成1,0代表第一个内核,1代表第二个,以此类推。
uname -r #查当前系统内核
entos6修改内核启动顺序-了解

vim /boot/grub/grub.conf

改:10 default=0
为:10 default=1


进入centos7 紧急模式恢复root密码

首先重启,按↑↓键,进入如下界面,选择第一项,按下e键进行编辑
在此界面找到ro这一项,改为rw init=/sysroot/bin/sh (或在utf-8后加)
按ctrl+x 启动到单用户模式
硬盘知识,RAID,LVM,系统启动过程_第10张图片

硬盘知识,RAID,LVM,系统启动过程_第11张图片
emergency [iˈmɜ:dʒənsi] 紧急
换根,修改密码
chroot命令用来在指定的根目录下运行指令
。chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以/,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/位置

硬盘知识,RAID,LVM,系统启动过程_第12张图片
Centos6 修改密码

  • 第一步:启动系统时,在进入系统前,读秒的时候,按任意键出现这个界面,然后按e键进入到下面界面

  • 第二步:选择kernel选项,再按e 进入到下面界面

  • 第三步:在quiet后面加上single参数或是加1(数字1),然后按回车,回到下面的界面

  • 第四步:按b键启动系统,进入到下面界面

  • 第五步:在此界面可以直接用passwd修改密码。

  • 第六步:输入两次密码,重启系统即可完成密码的重置


实战-加密grub防止黑客通过单用户系统破解root密码
基于centos6进行grub加密
grub-md5-crypt #生成grub秘钥
Password: 123456
Retype password: 123456
$1$oaqo5$3d/cmTosm68jTw6o1wCu31 #这是生成的秘钥
vim /boot/grub/grub.conf #打开grub配置文件
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$oaqo5$3d/cmTosm68jTw6o1wCu31 #插入md5秘钥
title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)
root (hd0,0)
reboot重启按p测试。

基于centos7进行grub加密
grub2-mkpasswd-pbkdf2 #生成pbkdf2秘钥
Reenter password: 123456
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.8F355BAB512AFB7B8C990A1FEB887B8F2F3F1C54467E9B9F0535F2268E1FFC5F4E8D33F7633D7FBEC25B2039C6D8B3226A90528D4883AB9B99E391A4965D069F.DDE992693BE2C09FFEEC1149120B6B84DBAB933DE6CF7BFF718E1DDC858AB73EE32CFF45EB7F06AC45AA6792E91C4CD09E2B445FC288C47E79F537DBBABAD756

vim /etc/grub.d/00_header #在最后后面添加如下内容,这个用户名可以换成自己的用户名
cat < set superusers=‘aiwen’
password_pbkdf2 aiwen grub.pbkdf2.sha512.10000.8F355BAB512AFB7B8C990A1FEB887B8F2F3F1C54467E9B9F0535F2268E1FFC5F4E8D33F7633D7FBEC25B2039C6D8B3226A90528D4883AB9B99E391A4965D069F.DDE992693BE2C09FFEEC1149120B6B84DBAB933DE6CF7BFF718E1DDC858AB73EE32CFF45EB7F06AC45AA6792E91C4CD09E2B445FC288C47E79F537DBBABAD756
EOF

grub2-mkconfig -o /boot/grub2/grub.cfg #更新grub信息

重启按e,输入用户名和密码测试成功


实战-通过CD进入救援模式-重装grub修复损坏的系统
修复centos7启动
使用场景: 修复MBR,主要出现在安装双系统时,后安装的系统把原来系统的MBR删除了,需要修复。
第一步:在centOS7下破坏硬盘的前446字节: (或者直接把/boot删除,这样内核也会删除需要重新生成内核)
[root@CT731 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=446
446+0 records in
446+0 records out
446 bytes (446 B) copied,0.000758682 s,588 kB/s
第二步:将centos7系统光盘挂载到虚拟机光驱上,,重启计算机,修改BIOS引导顺序,让光盘启动。

硬盘知识,RAID,LVM,系统启动过程_第13张图片
上面有三项,我们选择第三项进入troubleshooting故障排除界面 ,进入第三项后,点击第二项,进入救援模式的centos的系统
硬盘知识,RAID,LVM,系统启动过程_第14张图片
然后我们进入如下模式,选择1,继续进行,接下来,我们就会进入到一个shell模式中,需要切换根目录,进行系统修复:chroot /mnt/sysiamge
如删除boot 挂载iso镜像到mnt目录下,安装内核文,先安装内核然后安装grub文件。

硬盘知识,RAID,LVM,系统启动过程_第15张图片

硬盘知识,RAID,LVM,系统启动过程_第16张图片
在这里插入图片描述


centos6 修复boot启动
光盘启动挂载后,安装内核文件,安装grub文件,还需要创建一个grub.cfg文件,centos7有命令创建,6需要手动创建

vim /boot/grub/grub.cfg

default=0
timeout=5
title centos6_lay
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=UUID=31be738e-9719-4ff4-80bf-bf3338cb36c9
initrd /initramfs-2.6.32-696.el6.x86_64.img

1.在内核启动过程中,把/boot当作是自己的/
2.root=UUID=31be738e-9719-4ff4-80bf-bf3338cb36c9
是告诉启动程序,系统真正的/ 位置
3.grub 把vmlinux(内核文件)和initrd(虚拟的根文件系统)读到内存
然后,initrd已只读方式挂载根,去获取
/lib/modules/2.6.32-696.el6.x86_64/下的内核模块


centos7系统断电系统无法挂载分区

https://blog.csdn.net/helloanthea/article/details/51728128

xfs_repair -v -L /dev/dm-0   #清除日志再挂载

这是一步有风险的操作,在执行之前最好先使用xfs_dump、xfs_restore备份你的分区,既可以备份成一个文件也可以备份到另一块硬盘:


磁盘阵列RAID

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,以硬件
RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
RAID的创建有两种方式:软RAID(通过操作系统软件来实现)和硬RAID(使用硬件阵列卡);在企业中用的最多的是:raid1、raid5和raid10。不过随着云的高速发展,供应商一般可以把硬件问题解决掉。

RAID类型 说 明 最低磁盘个数 空间利用率 各自的优缺点
RAID0 条带卷 2+ 100% 读写速度快,不容错
RAID1 镜像卷 2 50% 读写速度一般,容错 n-1
RAID5 带奇偶校验的条带卷 3+ (n-1)/n 读写速度快,容错,允许坏一块盘
RAID6 带奇偶校验的条带集,双校验 4+ (n-2)/n 读写快,容错, 允许坏两块盘
RAID10 RAID1的安全+RAID0的高速 4 50% 读写速度快,容错 n/2
RAID50 RAID5的安全+RAID0的高速 6 (n-2)/n 读写速度快,容错

硬盘知识,RAID,LVM,系统启动过程_第17张图片
硬盘知识,RAID,LVM,系统启动过程_第18张图片
硬盘知识,RAID,LVM,系统启动过程_第19张图片
硬盘知识,RAID,LVM,系统启动过程_第20张图片
硬盘知识,RAID,LVM,系统启动过程_第21张图片
当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
异或运算
是用相对简单的异或逻辑运算(相同为0,相异为1)

RAID硬盘失效处理
一般两种处理方法:热备和热插拔
热备:HotSpare
定义:当冗余的RAID组中某个硬盘失效时,在不干扰当前RAID系统的正常使用的情况下,用RAID系统中另外一个正常的备用硬盘自动顶替失效硬盘,及时保证RAID系统的冗余性
全局式:备用硬盘为系统中所有的冗余RAID组共享
专用式:备用硬盘为系统中某一组冗余RAID组专用

热插拔:HotSwap
定义:在不影响系统正常运转的情况下,用正常的物理硬盘替换RAID系统中失效硬盘。

软RAID:通过操作系统实现
Linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它会在应用层给我们提供一个应用程序的工具mdadm ,mdadm是linux下用于创建和管理软件RAID的命令。
硬盘知识,RAID,LVM,系统启动过程_第22张图片
mdadm -C -v /dev/md0 -l 0 -n /dev/sdb /dev/sdc #创建一个raid0
mdadm -D /dev/md0 #查看raid信息。
mdadm -Dsv > /etc/mdadm.conf #生成配置文件
mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[d,e,f] #创建一个raid1 并添加一块热备份盘
mdadm -Dsv > /etc/mdadm.conf #生成配置文件
mdadm -D /dev/md1 #查看raid信息同步状态等。
mdadm -f /dev/md1 /dev/sde #把sde硬盘设为故障盘模拟故障,sdf会自动顶替位置。
mdadm -r /dev/md1 /dev/sde #移除故障盘。
mdadm -a /dev/md1 /dev/sde #添加新硬盘到阵列
mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 -c32 /dev/sd{f,g,h,i} #创建raid5 一块热备盘 chunk大小为32K。
mdadm -D /dev/md5 #查看
停止阵列
mdadm -Dvs > /etc/mdadm.config #停止前确保已经保存配置
mdadm -D /dev/md5 #停止前查看数据是否同步完成
Consistency Policy : resync #数据已经同步完
mdadm -S /dev/md5 #停止md5阵列
激活MD5阵列
adadm -As #重新激活md5阵列
扩展RAID5磁盘阵列
mdadm -G /dev/md5 -n 4 -c 32 #将md5阵列数量重新设为4块,chunk为32位,
备注:阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。对于raid5来说,只能增加成员盘,不能减少。而对于raid1来说,可以增加成员盘,也可以减少。
mdadm -C v /dev/md10 -l 10 -n 4 /dev/sd{d,c,f,g} #创建raid10
cat /proc/mdstat #查看阵列信息
删除RAID所有信息及注意事项
umount /dev/md0 /raid0 #如果你已经挂载raid,就先卸载。

mdadm -Ss #停止raid设备

rm -rf /etc/mdadm.conf #删除raid配置文件
mdadm --zero-superblock /dev/sd{d,c,f,g} #清除物理磁盘中的raid标识
参数:–zero-superblock : erase the MD superblock from a device. #擦除设备中的MD超级块

硬raid
把两块磁盘做raid1,然后把后面的磁盘都做成raid5
raid1是镜像卷,安装系统用,一块坏了,不影响系统运行。 raid5存数据
如果服务器主板不支持硬raid , 可以用raid卡
硬raid如果阵列卡坏了 怎么办?
如果更换的RAID卡,与原卡规格型号相同,则不会有什么问题。若两卡规格型号不同,需要重新安装新卡驱动程序。这时就会有不确定的可能性,如驱动程序差别不大时,RAID盘组合顺序正常,硬盘原数据可正确读写;若驱动程序结构差别较大,则可能发生读写错误。
因此,要尽量选购与原卡规格相同的产品,以确保数据安全。

LVM逻辑卷

LVM的工作原理
LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

LVM常用的术语
物理存储介质(The physical media):LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
物理卷PV(physical volume) :物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身;
卷组VG(Volume Group) :一个LVM卷组由一个或多个物理卷组成 
逻辑卷LV(logical volume) :LV建立在VG之上,可以在LV之上建立文件系统
PE(physical extents) :PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB
LE(logical extent) : LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应

最小存储单位总结:

名称 最小存储单位
硬盘 扇区(512字节)
文件系统 block(1K或4K )# mkfs.ext4 -b 2048 /dev/sdb1 ,最大支持到4096
raid chunk (512K) #mdadm -C -v /dev/md5 -l 5 -n 3 -c 512 -x 1 /dev/sde{1,2,3,5}
LVM PE (4M) # vgcreate -s 4M vg1 /dev/sdb{1,2}

LVM主要元素构成
硬盘知识,RAID,LVM,系统启动过程_第23张图片
总结:多个磁盘/分区/raid-》多个物理卷PV-》合成卷组VG-》从VG划出逻辑卷LV-》格式化LV挂载使用

LVM优点
使用卷组,使多个硬盘空间看起来像是一个大的硬盘
使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
在使用逻辑卷时,它可以在空间不足时动态调整它的大小
在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
允许创建快照,可以用来保存文件系统的备份。
RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源。

功能 PV管理命令 VG管理命令 LV管理命令
scan 扫描 pvscan vgscan lvscan
create 创建 pvcreate vgcreate lvcreate
display显示 pvdisplay vgdisplay lvdisplay
remove 移除 pvremove vgremove lvremove
extend 扩展 vgextend lvextend
reduce减少 vgreduce lvreducev
查看卷名 简单对应卷信息的查看 扫描相关的所有的对应卷 详细对应卷信息的查看
物理卷 pvs pvscan pvdisplay
卷组 vgs vgscan vgdisplay
逻辑卷 lvs lvscan lvdisplay

LVM创建步骤:
1.创建pv (物理卷)
2.创建vg(卷组)
3.创建lv(逻辑卷)格式化,使用挂载
pvcreate /dev/sdb #创建物理卷pv,可以指定多个设备
pvs #查看所有物理卷
pvdisplay /dev/sdb #查看物理卷pv详细信息。PE大小等(默认4m)
vgcreate vg01 dev/sdb #穿件vg卷组,可以后面可以跟多个pv
vgs #查看所有卷组
vgdisplay /dev/vg01 #查看卷组详细信息
lvrcreate -n lv01 -L 1G vg01 #创建逻辑卷(lv)-n 指定名称 -L 指定大小 -l 指定le的个数 le=pe 默认4M
ls -l /dev/vg01/ #查看逻辑卷位置,
lv01 lv02  #是软链接
mkfs.xfs /dev/vg01/lv01  #格式化逻辑卷
mount /dev/vg01/lv01 /lvo1 #挂载逻辑卷使用

指定PE大小用的参数: -s ,如果存储的数据都是大文件,那么PE尽量调大,读取速度快
vgcreate -s 16M vg02 /dev/sdc #创建一个vg组pe大小为16M每个,PE的大小只有为2的幂数,且最大为512M

VG扩容
vg扩容的场景:vg卷组中的空间不了够,需要添加新的硬盘进来
vgs #查看vgs可用的容量
pvcreate /dev/sdd #创建PV物理卷
vgextend vg01 /dev/sdd #把sddpv添加到vg01组中
pvs #查看pv情况。
gvs #查看vg情况

LV扩容
首先,确定一下是否有可用的扩容空间,因为空间是从VG里面创建的,并且LV不能跨VG扩容,扩容后还要针对文件系统扩容

ext4文件系统扩容使用命令语法: resize2fs 逻辑卷名称
xfs文件系统扩容使用命令语法: xfs_growfs 挂载点

vgs #查看vg可用的容量
lvextend -L +30m /dev/vg01/lv01 #对lv01扩容+30M 。
说明:在指定大小的时候,扩容30m和扩容到30m是不一样的写法
扩容30m ====> -L +30M
扩容到30m =====> -L 30M
resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用
lvextend -L 80M -r /dev/vg01/lv01 #将lv01扩到80M -r 参数一步到位,不用重新设置文件系统。

LVM缩小
LVM可以动态增加,也可以动态缩小,但是XFS不支持动态缩小,所以我们无法实现基于xfs的动态缩小。btrfs文件系统支持在线缩小

VG的缩减,要保证你的物理卷是否被使用,是因为它无法缩减一个正在使用的PV
cp -r /boot/grub /lv01 #复制一些数据到/lv01里
vgreduce vg01 /dev/sdb #把sdb硬盘移出vg01组
Physical volume “/dev/sdb” still in use #提示错误,因为sdb在使用中
如果sdb是一个磁盘阵列,而这个磁盘阵列使用年代太久,我们必须移出怎么办?
把sdb数据迁移到同一个vg组的未分配的pv中(其他硬盘)。
pvmove /dev/sdb /dev/sde #把数据同步到sde中。
vgreduce vg01 /dev/sdb #移除成功
创建LVM流程:
pvcreate创建pv -> vgcreate创建卷组 -> lvcreate创建逻辑卷 -> mkfs.xfs lv 格式化-> mount挂载
删除LVM流程:
umount卸载 -> lvremove lv移出卷组中所有逻辑卷-> vgremove vg移出卷组-> pvremove 移出pv
lvremove/dev/vg02/lv02 #移除lv
vgremove vg02 # 移除组
pvremove /dev/sdb #移除pv物理卷
使用SSM工具为公司的邮件服务器创建可动态扩容的存储池 (了解)
yum -y install system-storage-manager #安装ssm工具
ssm list dev #列出设备信息
ssm list pool #列出储存池信息,vg
实战场景:公司要搭建一台邮件服务器,考虑到后期公司发展规模扩张,需要你创建一个名为mail 的LVM存储池,并在其上创建一个名为mail-lv,初始大小为1G的lvm卷,格式化为xfs文件系统,并将其挂载/mail-lv目录下。此存储池中的空间后期要可以动态扩容。

 ssm  create  -s  lv大小  -n  lv名称  --fstype  lv文件系统类型 -p 卷组名  设备 挂载点

自动把设备变成pv,创建vg , lv ,格式化文件系统, 自动挂载

   ssm create -s 1G -n mail-lv --fstype xfs -p vg01 /dev/sd{b,c} /mail-lv

你可能感兴趣的:(linux基础)