引导目录:
*磁盘分区
*分区工具
*磁盘格式化
*文件系统类型
*磁盘修复
*磁盘修复工具
*分区的挂载
*挂载实例
*RAID
*主要对RAID0、1、5进行介绍
*LVM(逻辑卷)
*逻辑卷的创建
*快照
通过近乎两周的磁盘管理学习,从对磁盘懵懂的认识,到对磁盘真正的了解,可谓收获颇深,快来看看小编学习的心路历程吧。
一、磁盘分区
磁盘的分区有两种类型:
*DOS分区方式
*GPT分区方式
在平常的windows系统之中,我们很熟悉C盘、D盘等各个字母开头的盘区,但是我们可能没有在意过,其实一个磁盘只能分4个区,分为主分区(primary)、扩展分区(extend),而我们平时看到的E、F、G、H..等盘区是在扩展分区上进一步创建的逻辑分区,其实DOS分区方式和MBR分区方式是同一种分区方式,通常我们的Windows分区都是采用的DOS分区方式,必须要有一个主分区,可以没有扩展分区,最都只能有一个扩展分区。通常我们采用“3主+1扩展”模式,扩展中可以在进行划分,分出逻辑分区,扩展分区相当于一个盒子,盒子中装了多个逻辑分区,其实扩展分区最多只能分32个逻辑分区。
而在Linux下可以支持DOS分区方式,也可以支持GPT分区方式,下面是分区方式的介绍:
DOS分区方式:
MBR(512字节) | 分区1 | 分区2 | 分区3 | 分区4 |
MBR区包含了boot loader(446字节)、分区表(64字节)、结束位(2字节)
GPT分区方式:
保护区MBR | EFI、分区表 | 分区1 | 分区2 | .......... | 分区128 | EFI、分区表 |
保护区其实只有结束位就可以,不存放正真的东西,主要是为了能使老系统能够识别到这是一个有分区信息的磁盘,不被识别人空分区。在保护MBR后有EFI头部信息,定义了PGT分区的一些信息,和128个分区的信息表。后面紧接着就是128个分区,GPT分区方式最多支持128个分区,而磁盘的最后面是存放着分区表的备份。
分区工具:
针对DOS分区方式有fdisk分区工具,该工具不能对GPT分区进行分区。分区命令格式为:
Fdisk /dev/sdx 直接进入交互式界面:
键入m会显示帮助信息,p打印输出当前的分区信息,n开始进行分区,会一步步提示你分区的步骤,小编这里进行简单的演示:
一定要记得保存退出,否则之前做的内容都前功尽弃。
针对GPT分区方式,有新的分区工具gdisk,该工具更适用于GPT分区方式,虽然能对DOS分区进行操作,进入后如果是对DOS分区的操作,会提示你这是一个无效的GPT分区,但是会自动把DOS分区转换位GPT分区,所以进行分区的时候一定要选择好分区工具,否则容易出错。
gdisk分区工具与fdisk分区工具的使用方法是一样的。这里就不进行演示了,因为两个工具的使用防辐射是一样的。
还有一个万能的分区工具: parted 该工具不仅可以对DOS的分区进行分区,还可以对GPT分区进行分区,在对一个空白的磁盘进行分区前,需要制定一个分区类型(DOS/GPT),在该命令的交互模式的分区中,是不用手动保存的,直接自动生效。所以在使用parted进行分区的过程中要格外的小心,不要分错了。小面小编进行演示:
如果实现已经有了分区类型,就不用再进行mklabel这一步了。
二、磁盘格式化(文件系统)
我们对磁盘进行分区之后,并不能直接进行使用,我们需要对分区进行格式化,其实格式化也就是为了指定一个文件系统。在Centos6中默认的文件系统是ext文件系统,在Centos7中默认的文件系统是xfs文件系统。
文件系统类型有:xfs ext2 ext3 ext4 vfat nfs swap .....
在Centos上我们主要使用到的文件系统是ext 和xfs两类文件系统,格式化磁盘的工具是:
mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.xfs mkswap mkfs.vfat ...
接下来小编进行实战演示:
格式化为ext文件系统:
mkfs.ext4 /dev/sda
mkfs -t ext4 /dev/sda
上面两种方式都可以对分区进行格式化,所执行的命令都是来自同样的命令,只是表现形式不一样。
没有格式化的分区是不能进行挂载的,所以需要对分区进行格式化才可以正常的使用。
ext文件系统格式化
xfs文件系统格式化
对ext文件系统的格式化和对xfs文件系统的格式化是不一样的。这里小编就不对文件系统进行分析了。三、分区文件系统的修复
文件系统的检测核修复:
*常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
!*注意:一定不要在挂载状态下修复
文件系统一旦损坏会报出超级快损坏,这个时候查看mount,就会显示该分区上的文件系统显示为no clean的标记。需要特别注意的是,修复的时候一定要在卸载分区的情况下进行。
fsck(File Syetem Check)
可修复的文件系统类型有:
ext2 、ext3、ext4、 xfs...
修复命令为:
fsck.ext2 fsck.ext3 fsck.ext4 fsck.xfs...
Fsck.ext4 /dev/sda
fsck -t FS_Type /dev/sda
选项:
-p :自动修复错误
-r :交互式修复错误
FS_TYPE一定要与分区上存在的文件类型相同
e2fsck:ext系列文件专用的检测修复工具
-y: 自动回答为yes
-f: 强制修复
接下来小编进行实战演示:
对ext4文件系统的修复
修复完之后的数据是不会丢失的,如果修复的过程中没有报错,可以直接进行挂载,文件依旧存在。四、分区的挂载
挂载:将额外文件系统与根文件系统某现存的目录建立起
关联的关系,进而使得此目录作为其他文件访问入口的行为。
卸载:为解除此关联关系的过程。
mount 挂载设备 挂载点
卸载时:可使用设备名,也可以使用挂载点
umount /dev/sdax
挂载点目录一般为空。如果挂载的目录为非空,则挂载点下原有文件在挂载后将会被临时隐藏。
挂载分区的参数有三个:分区号(/dev/sda1)、卷标名、分区UUID。只有UUID是唯一的,所以采用UUID进行挂载是最可靠的。
如果想要永久挂载,也就是开机能够自动挂载,需要将挂载的信息写入文件,记录挂载信息的文件是/etc/fstab, 该文件规定了开机自动挂载的分区信息
/etc/fstab文件中的格式为如图所示:
fstab文件的截图
第一列是被挂载的设备,可以使用设备名,也可以使用设备的卷标,也可以使用设备的UUID,推荐使用UUID,因为卷标可能会重名,设备名也是可能重名的,而设备的UUID是唯一标识该设备的,所以使用UUID最靠谱,及时设备名变了,而不会影响系统识别挂载的信息。
第二列是挂载点(mount point)
第三列是挂载分区的文件系统类型。
第四列是默认开启的一些工能
defaults:相当于rw, nosuid, dev, exec, auto, nouser, async
如果有没有默认开启的功能,可以直接加在default的后面。
第五列的数字是,转存频率:0 表示不转存,1 表示每天转存,2 表示每隔一天转存。
第六列是自检次序:0 不自检 1 自检,2 、3 。。。 首先自检;一般只有rootfs才用1。
我们可以直接将挂载信息写入到/etc/fstab 文件中,然后执行mount -a 强制系统重新读取/etc/fstab,当对该文件修改过后可以使用该命令对挂载信息重新读取。
查看挂载的信息:
df 查看当前挂载的情况
mount只敲该命令是查看/etc/mtab文件,显示当前已经挂载的所有设备。
mount 设备名 挂载点
-t 指定文件系统类型
-r 只读挂载
--remount,ro|rw 也会更新/etc/fatab中的选项,如果与指定的冲突,则remount后指定的优先。
-n 隐藏挂载信息不显示,但在/proc/mounts中可以查到
-a 读取/etc/fstab,挂载其中文件中修改了,而系统中没有挂载的设备
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B --bind 目录挂载目录(用处非常多,比较实用)
小实验:
1、同一个设备挂载到不同的挂载点
可以同时显示出来,并且两个文件夹中的数据同步,因为挂载的是同一个硬盘。
2 、一个挂载点挂载不同的设备。
将显示最新挂载的那一个,旧的挂载点将被隐藏,但不是不存在。当新的挂载点卸载掉的时候,旧的挂载点将会重新生效。
五、RAID(磁盘阵列)
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。
我们这里只针对RAID0 RAID1 和RAID5 进行说明。
1、RAID0 又名条带卷,多个磁盘进行并排串联,数据分块分别存放到不同的串联的磁盘上,可以同时读写,所以提升了读写能力,但是容错能力降低,无论那一块盘坏掉,那么数据就会丢失。
RAID0 特点:读写能力提升、无容错能力、最少两块盘,总大小为所有磁盘大小之和,不支持热备盘。
2、RAID1 又名镜像卷,多个磁盘进行串联,数据在每一块盘上都存放一份,所有,除了第一块盘之外 所有的盘都相当于备份盘。所以容错能力大大提升。
RAID1 特点:读写能力降低,容错能力大大提升,最少两块盘,总大小始终为一块盘的大小,以容量最小的那块磁盘为准,支持热备盘。
3、RAID5 RAID 5不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。对于RAID 5来说,大部分数据传输只对一块磁盘操作,并可进行并行操作。在RAID 5中有“写损失”,即每一次写操作将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。
RAID5特点:读写能力提升,容错能力提升,最少三块盘,总大小为减去一块盘的总大小之和。
创建RAID的命令:
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}
-C --create /dev/mdx 创建名为mdx的raid
-a yes 当没有所指的/dev/mdx设备时, 自动创建该设备
-l --level n 所要创建的raid等级
-n n 该raid的数据盘有多少个成员
-x n 该raid的热备盘有多少个 raid0 不支持-x
-c 值 指定chunk大小,仅限raid0 raid5
/dev/sdx.... 指定raid的成员盘。
raid的要求是:硬盘的大小要相同,否则,按最小的硬盘计算空间。
raid也是一种真是的硬盘,可以分区,像正常的磁盘一样,可以通过格式化后进行挂载,RAID就相当于一整块的磁盘,可以对RAID进行分区,分区之后,可以进行格式化,格式化之后可以进行正常的挂载使用。分区和格式化方法与普通的磁盘是一样的。
删除RAID
umount 首先要进行卸载挂载点
mdadm -D /dev/md2 先查一下,该raid由哪有成员组成
mdadm -S /dev/md2 禁用该RAID
mdadm --zero-superblock /dev/sdf4 清空磁盘分区中的raid信息
mdadm /dev/md0 -f /dev/sdd 模拟将/dev/md0 raid中的sdd坏掉
mdadm /dev/md0 -r /dev/sdd 将/dev/md0 raid中的sdd 拔掉
mdadm /dev/md0 -a /dev/sdd 向/dev/md0 增加设备sdd 如数据盘不够,则加为数据盘,如够,加为热备盘
mdadm -G /dev/md0 -n 6 -a /dev/sdh 将/dev/md0的数据盘设置为6个,并将/dev/sdh加入为数据盘。
mdadm -A /dev/md1 /dev/sdb /dev/sdc 当没有将md1信息保存至mdadm.conf时,只能手动指定raid成员
mdadm -D -s > /etc/mdadm.conf 将所有的raid成员信息保存至mdadm.conf文件
mdadm -D -s /dev/md0 >> /etc/mdadm.conf 仅将md0的信处追加保存至mdadm.conf文件
mdadm -A /dev/md1 从/etc/mdadm.conf中读取成员信息,并仅激活md1
mdadm -A -s 从/etc/mdadm.conf中读取成员信息,并激活所有的raid
生成配置文件:mdadm –D –s >> /etc/mdadm.conf
v 停止设备:mdadm –S /dev/md0
v 激活设备:mdadm –A –s /dev/md0 激活
v 强制启动:mdadm –R /dev/md0
v 删除raid信息:mdadm --zero-superblock /dev/sdb1
在创建完RAID后,需要将raid的信息到如到/etc/mdadm.conf,这样在下次开机启动之后,raid的创建信息才不会丢失,查看所有raid的信息的命令是:
mdadm -D -s 可以在后面指定某一个raid,单独显示某一个raid的信息。
六、LVM管理
LVM(逻辑卷管理器)的重点在于可以弹性的调整filesystem的容量!而并非在于数据的存储效率及安全上面。LVM可以整合多个实体partition在一起,让这些partition看起来就像是一个磁盘一样!而且,可以在未来新增会移除其他的实体partition到这个LVM管理的磁盘当中。
LVM的主要作用就是可以弹性的扩展分区的空间。
下面小编附上LVM的整个逻辑概念图:
从从上面的结构图中,我们可以看出,最底层是有真是的物理磁盘,或者磁盘分区也是可以的。由disk进行创建为pv(物理卷),VG(卷组)有若干个pv组成,pv就相当于一个小的块,VG相当于整个磁盘,由块组成了一整块大磁盘,才vg之上可以动态的分出分区来lv,lv才是最终的逻辑卷。
LVM的整个管理一共有三个步骤:
PV的管理工具:
pvcreate /dev/md1 /dev/md2 创建物理卷,可指定多个
pvremove /dev/sda1 删除物理卷,可指定多个
Pvmove /dev/sda1 /dev/sda2 将物理卷/dev/sda1上的数据移动到物理卷/dev/sda2上。
Pvscan 扫描当前的系统中所有的pv
Pvchange 修改pv的状态。
-an /dev/sda 将/dev/sda处于非激活状态
-ay /dev/sda 将/dev/sda开启激活状态
Pvs 简单罗列pv信息
Pvdispaly 显示pv的详细信息。
VG的管理工具:
vgcreate vgmage26 /dev/md0p1 /dev/md1
-s 8M 指定PE大小,默认4M
vgchange -s 8M 更改PE大小
vgreduce vgmage26 /dev/md1 缩减卷组vgmage26
vgextend vgmage26 /dev/md1 扩展卷组vgmage26
vgremove vgmage26 删除卷组mage26
vgs 简单罗列pv信息
vgdispaly 显示pv的详细信息。
Lv的管理工具:
显示逻辑卷 lvs Lvdisplay v
创建逻辑卷 lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg v
删除逻辑卷 lvremove /dev/VG_NAME/LV_NAME
实验1:扩展逻辑卷
1.先检查需要扩展的大小,VG是否有足够可用空间
如果不够则
pvcreate /dev/md2
vgextend vgmage26 /dev/md2
2.如足够则扩展逻辑卷大小
lvextend -L 1G/+1G /dev/vgmage26/lvmage26_01
lvextend -l +100%FREE /dev/vgmage26/lvmage26_01
3.扩展文件系统大小
resize2fs /dev/vgmage26/lvmage26_01
或 resize2fs /dev/vgmage26/lvmage26_01 500M 只增加到500M的文件系统
如果是xfs文件系统 用xfs_growfs
xfs_growfs /dev/vg01/lv01
lvextend -L +500M -r /dev/vgmage26/lvmage26_01 可在lvextend 时加-r 直接一步到位,先扩展逻辑卷大小后直接增加文件系统大小
实验2、减小逻辑卷大小 仅支持Ext文件系统
1.umount /mnt/lvmage26_01
2.e2fsck -f /dev/vgmage26/lvmage26_01
3.resize2fs /dev/vgmage26/lvmage26_01 300M
该命令中的300M,必须放在lv的后面。
4.lvreduce -L 300M /dev/vgmage26/lvmage26_01
5.mount
注意:该实验中,如果少了第二步,或者少了第三部,都是可以实现逻辑卷的减小,但是会损坏磁盘中的数据,需要重新格式化。所以按步骤来,最后就不需要再重新格式化了,直接可以挂载,数据还存在。
实验3:将某块盘从LVM中分离出来
1.先确保数据不在这块PV上
用pvs查看
2.如果在这块PV上,则将数据转移到同卷组的其他PV上
pvmove /dev/pv1名 /dev/pv2名(可以不指定)
在数据迁移的时候,业务不会断,可以在被挂载的目录中增加或减少数据。热移动(已实验验证)
3.将pv从Vg中移出
vgreduce vg名 /dev/pv名
4.删除该盘的pv属性
pvremove /dev/pv名
当pv中有被vg占用的磁盘的时候,是不能直接并强制移除该pv的,只能将空pv从vg中移除,
pv已经从vg中移除,可以执行:pvremove /dev/sdbx
pv还没有从vg中移除,可以:
pvremove /dev/sdbx --force --force
两次--force就可以强制移除了。
实验4:将LVM迁移到其他主机
1.将数据移到目标磁盘对应的PV上。(该磁盘不要有其他与该PV无关的分区)
pvmove /dev/pv1名 /dev/pv2名
vgreduce vg名 /dev/pv(多余) 移动除要移动的PV以外的其他PV
2.确保要迁移的VG名与目的系统没有同名的VG
vgrename vgmage26 vg02
lvrename /dev/vg02/lvmage26_01 /dev/vg02/lv01 (非必须)
3.umount /mnt/lvmage26_01/
4.vgchange -an vg02 禁用VG上的所有LV
5.vgexport vg名 导出卷组
关机(如果支持热插排,则不用关机),拔硬盘,插到目标主机上。
6.pvscan 扫描系统上的pv
vgscan 扫描系统上的vg
lvscan 扫描系统上的lv
vgimport vg名 导入vg
vgchange -ay vg名 激活vg
7.mount /dev/vg名/lv名 /mnt/ 重新挂载lv
!*思想总结:
LVM的迁移其实就是把本机中的逻辑卷上的数据迁移到另一台机器上,并且保证逻辑卷还存在
迁移要看你怎么迁移了,如果你想就把本逻辑卷直接迁移走,不想再备份数据或倒腾
取消该逻辑卷的挂载,umount /dev/vgxx/lvxx
查看目的主机上是否有重名的逻辑卷或重名的卷组,若有需要修改一个,否则就会导致有两个重名但UUID不同的卷组,要命的是卷组重名,这个比较烦人,逻辑卷重名只要卷组不同,还是可以区分开的。
如果有重名:vgrename oldvgname newvgname
如果没有改重名的名字,到目的主机上会有两个重名的卷组,会导致使用中系统无法区分开,这个时候可以在目的主机上执行:vgrename vg-uuid newvgname
使用vg的UUID进行唯一匹配进行改名。可以vgdisplay查看vg的uuid。
在导出之前还有个需要注意的地方,迁移的卷组如果还有其他与移动的硬盘无关的磁盘,这个在迁移到别的主机上的后,会扫描到卷组中有缺失的pv,系统会报错,在对该vg进行操作的时候,会提示错误信息,可以加上-f,强制执行。
比如:vgimport vgname -f
或者可以执行:
vgreduce --removemissing 将缺失的pv移除,就是将vg上没有识别到的pv清除掉。
需要将vg导出,但导出之前首先要让vg上的lv全部处于非激活状态(inactive):
vgchange -an vgname (如果不指定vg名,会将所有的卷组全部置为非激活装态)
导出vgexport vgname
关机进行移除。
添加到另一个主机上,使用pvscan lvscan vgscan 进行扫描识别到系统中的pv lv vg。
扫描到之后进行vg导入:vgimport vgname
激活: vgchange -ay vgname
就可以挂载lv 了。
mount /dev/vgxx/lvxx /mountdir
疑难杂症:
同一主机上重名卷组名:使用卷组的uuid进行改名:
vgrename uuid newvgname
同一卷组上有其他识别到的pv,使用vgreudce 将卷组上缺失的pv移除
vgreduce --removemissing --force newjiakevg
实验小发现:
如果在敲卷组的时候不能进行自动补齐,有两种可能:
1、卷组上没有创建逻辑卷
2、卷组被致于非激活状态。
3、除了格式化为ext文件系统的逻辑卷可以在centos6和centos7系统之间进行友好的迁移,在centos7中格式化为xfs文件系统的逻辑卷迁移到centos6上之后,不能进行正常的挂载,有报错。centos6中格式化为xfs文件系统的逻辑卷迁移到centos7中,挂载正常。
逻辑卷管理器快照:
快照概念:快照是存放源文件系统中的文件信息,存储的是文件iNode号对应的数据源。
快照定义的是某一时刻系统的状态,如果对系统快照之后,系统中的原有数据减少了的时候,快照会将删除减少的数据,存放到快照文件中,以备恢复快照使用。如果增加的数据,就不会再存放到快照中了。恢复快照的时候,快照文件中没有记录的文件数据就会自动删除。
逻辑卷很脆弱,一旦空间沾满就会崩溃。所以提前规划好快照空间。
由于快照区与原本的lv共用很多PE的区块,因此快照区与被快照的lv必须在同一个vg上,系统恢复的时候的文件数量不能搞与快照区的实际容量。对逻辑卷创建的快照要与该逻辑卷同卷组。
快照是一个特殊的逻辑卷,同创建逻辑卷的方法一样。
lvcreate -L +size -s -p r -n snap-name /dev/vgxx/lv01
-s:指定该逻辑卷为快照区
-p:设定该快照逻辑卷只可读
快照也是一个逻辑卷所以可以被挂载,
mount /dev/vgxx/snap-name /dir
恢复快照的时候,必须将快照与被快照的逻辑卷全部卸载,不能占线。
卸载完之后执行:
lvconvert --merge /dev/vgxx/snap-name
快照的删除同样需要保证快照不被挂载,然后执行逻辑卷删除的方法:lvremove /dev/vgxx/snap-names
小编通过实验得出:
当有快照的逻辑卷不支持在线扩展,逻辑卷的在线扩展是在逻辑卷的激活状态下进行的。有快照就不支持在线扩展。只有先删除快照,扩展完后再创建快照(可以提前备份快照)。