目录
一、磁盘简介
(一)、认知磁盘
1、磁盘分类
机械:HDD
固态:SSD
HDD内部结构
- 盘片(Platters):机械硬盘通常有多个盘片组成,每个盘片都是一个圆形的金属或玻璃基板,上面涂油磁性材料。
- 磁头(Read/Write Heads):每个盘片都有两个磁头,一个用于读取数据,另一个用于写入数据。磁头位于盘片上方和下方,通过磁性浮动臂和驱动器来移动。
- 磁道(Tracks):盘片被划分为多个同心圆轨道,称为磁道。每个磁道可以存储一定量的数据。
- 扇区(Spindle):盘片通过主轴连接在一起,并由电机驱动主轴转动。通常,硬盘的转速以每分钟转数(RPM)来表示,如5400RPM、7200RPM或10000RPM。
- 磁头臂(Actuator Arm):磁头臂是一个可移动的机械臂,上面安装有磁头。它通过电机和控制器的控制,可以在盘片上移动磁头。
- 磁头定位器(Head Positioner):磁头定位器负责精确定位磁头在盘片上的位置。它使用电磁力将磁头臂移动到正确的磁道上。
- 控制器(Controller):硬盘上的控制器是一个电子设备,负责控制硬盘的操作。他管理磁头的移动、数据的读写、错误检测和纠正等功能。
与传统硬盘相比,SSD固态电子盘具有的优势
SSD采用电子存储介质进行数据存储和读取的一种技术,拥有极高的存储性能,被认为是存储技术发展的未来新星。
第一、SSD完全的半导体化,不存在数据查找时间、延迟时间,数据存储速度快。
第二、SSD全部采用闪存芯片,经久耐用,防震抗摔,即使发生与硬物碰撞,数据丢失的可能性也能降到最低。
第三、得益于无机械部件及闪存芯片,SSD没有任何噪音,功耗低。
第四、质量轻,比常规1.8英寸硬盘重量轻20-30克,使得便携设备搭载多块SSD成为可能。
2、硬盘尺寸
LFF,3.5寸,一般见到的那种台式机硬盘的大小
2.5寸
1.8寸
3.5寸不可以更换为2.5寸的小硬盘,但2.5寸的却可以更换为3.5寸的
3、插拔方式
热插拔
非热插拔
4、硬盘接口
IDE=133MB/S,并行接口,早期家用电脑“并口”;
SATA(Serial ATA),SATA=6G,数据端口与电源端口是分开的,所以需要两条线,一条数据线,一条电源线;(长的电源线,短的数据线)"串口",支持热插拔;
SCSI,649MB/S,并行接口,早期服务器(小型计算机的接口);
SAS代替了scsi(Serial Attached SCSI),当前SAS接口居多 ,SAS=6G,电源线与数据线是一体化的,SATA标准是SAS标准的一个子集,两者是兼容关系,SATA硬盘可以插到SAS主板上,反之则不行;
5、硬盘设备命名
物理硬盘 /dev/sd[a-z]
KVM虚拟化:
/dev/vd[a-z] (半虚拟化驱动)
/dev/sd[a-z] (全虚拟化驱动)
(二)、磁盘分区方式
分区的目的:文件分类,将一块硬盘分成几个小块。用来根据使用存放不同的文件。
MBR格式
分区命令:fdisk
一共可以分4个主分区(4个主分区,扩展分区,逻辑分区) 例如:3主 +1扩展 (n逻辑)
MBR 只能分小于2TB的硬盘。
一块硬盘最多分4个主分区。也可以划分3个主分区和一个扩展分区,扩展分区下面可以划分多个逻辑分区。
GPT格式
分区命令:gdisk(parted---rhel6)
一共可以分128个主分区
GPT大于小于2TB都可以。最大超过目前硬件可以支撑的硬盘大小。
GPT格式分区就不存在扩展分区、逻辑分区的概念。
#注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!因为转换格式要格式化硬盘。
二、基本分区
首先给关机状态的虚拟机添加磁盘
这里在添加硬盘时多添加几块,方便后续练习实验;
[root@localhost ~]# lsblk #查看磁盘设备。当硬盘已经被添加,但是还没有格式化没有挂载的时候,使用lsblk查看硬盘信息;
NAME: 设备的名称
MAJ:MIN 主设备号:次设备号
RM: 设备是否可移动。0表示不可移动设备,1表示制度设备。
TYPE: 设备的类型。常见的类型包括disk(硬盘)、part(分区)、rom(制度存储设备)等。
1、fdisk
MBR 14个分区(4个主分区,扩展分区,逻辑分区)
[root@localhost ~]# fdisk -l /dev/sdb #查看磁盘分区信息
[root@localhost ~]# fdisk /dev/sdb #开始分区
- m:查看帮助
- n:新建分区
- w:保存退出
- p:打印分区信息
parteprobe /dev/sdb #更新磁盘分区表,手动让内核更新分区表。不需要重启;
lsblk #查看磁盘设备
如果在创建三个主分区后需要一个以上的分区,那么就需要在第二步的时候选择创建扩展分区,然后在扩展分区的基础上创建逻辑分区,这样就可以满足创建更多分区的需求;
MBR与GPT分区格式转换的方法:
[root@lnmt ~]# parted -s /dev/sdb malabel gpt #将/dev/sdb(MBR)格式转化成为(GPT)格式
[root@lnmt ~]# parted -s /dev/sdb malabel msdos #将/dev/sdb(GPT)格式转化成(MBR)格式
2、gdisk创建分区
[root@lnmt ~]# yum -y install gdisk #安装分区工具
[root@lnmt ~]# gdisk -l /dev/sdb #查看磁盘分区信息
[root@lnmt ~]# gdisk /dev/sdb #开始分区
[root@lnmt ~]# partprobe /dev/sdb #刷新分区表
3、创建文件系统(格式化)
[root@lnmt ~]# mkfs.ext4 /dev/sdb1 #格式化成ext4格式的文件系统
[root@lnmt ~]# mkfs.xfs /dev/sdb2 #格式化成xfs格式的文件系统
4、挂载mount使用
[root@lnmt ~]# mkdir /mnt/disk1 #创建挂载目录
[root@lnmt ~]# mount /dev/sdb1 /mnt/disk1/ #挂载
5、查看磁盘挂载与磁盘使用空间
-T 打印文件系统类型
-h 人性化显示,磁盘空间大小
6、取消挂载
[root@lnmt ~]# umount /mnt/disk1 #卸载硬盘
[root@lnmt ~]# umount -l /mnt/disk1 #强制卸载硬盘,即使目录有资源被进程占用,也可以卸载
[root@lnmt ~]# fuser 挂载点 #查找占用文件的进程pid然后杀死,再进行卸载
三、开机自动挂载
1、/etc/fstab文件实现开机的时候自动挂载
[root@lnmt ~]# blkid /dev/sdb1 #查看uuid和文件系统类型
/dev/sdb1: UUID="5be2ae51-a819-47e0-aeb6-eb75dcd0b6f4" TYPE="ext4"
[root@lnmt ~]# vim /etc/fstab
UUID=5be2ae51-a819-47e0-aeb6-eb75dcd0b6f4 /mnt/disk1 ext4 defaults 0 0
参数解释:
第一列:挂载设备
(1)/dev/sdb1
(2)UUID=设备的uuid RHEL6/7的默认写法,同一台机器内唯一的一个设备标识
第二列:挂载点
第三列:文件系统类型
第四列:文件系统属性
第五列:是否对文件系统进行磁带备份:0 #不备份
第六列:是否检查文件系统:0 #不检查
[root@lnmt ~]# mount -a #自动挂载
2、/etc/rc.d/rc.local开机自动挂载
这个配置文件会在用户登陆之前读取,这个文件中写入了什么命令,在每次系统启动时都会执行一次。也就是说,如果有任何需要在系统启动时运行的工作,则只需写入 /etc/rc.d/rc.local 配置文件即可;
[root@lnmt ~]# vim /etc/rc.d/rc.local
mount /dev/sdb1 /mnt/disk1/
[root@lnmt ~]# chmod +x /etc/rc.d/rc.local #添加执行权限
[root@lnmt ~]# reboot
四、文件系统分类
1、分类
本地文件系统,不能在网络上用——ntfs、xfs、ext2、ext3、ext4、fat32
网络文件系统,也可以在本地使用——nfs、glusterfs、hdfs、ceph
2、概念
作用:管理文件的一套系统。文件的编辑,拷贝,粘贴,移动等;
理解inode:inoed块、i节点--索引节点。专门存储inode信息。也就是是文件的属性-(也叫元信息).它是文件或目录在磁盘里的唯一标识,linux读取文件首先要读取到这个索引节点,每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
inode内容
文件的字数
文件拥有者的user id
文件的group id
文件的读、写、执行权限
我呢见的时间戳,共有三个:ctime(最近访问),mtime(最近改动),atime(最近更改)
链接数,即有多少文件指向这个inode
查看inode信息
[root@lnmt ~]# stat /etc/hosts
[root@lnmt ~]# ls -i /etc/hosts #-i:查看inode号
18003023 /etc/hosts
3、EXT
EXT 家族支持度最广:andirons
但创建文件系统(格式化)慢!
修复慢!
文件系统存储容量有限
4、XFS
XFS 同样是一种日志式文件系统:
高容量,支持大存储
高性能,创建/修复文件系统快
格式化快
五、LVM逻辑卷
1、LVM管理
LVM概念:LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上,文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。
LVM的特点
#传统分区的缺点:
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不宜改变。当一个分区空间已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中。
#当采用LVM时:
1,将硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
2,当硬盘空间不足而加入新的硬盘时,不必将数据从原硬盘迁到新硬盘,而只需把新的分区加入卷组并扩充逻辑卷即可。
3,文件系统建立在LVM上,可以跨分区,方便使用;
#使用LVM主要是方便管理、增加了系统的扩展性。可以跨分区,多个硬盘组合。
2、创建LVM
首先准备添加3块磁盘:可以是/dev/sdb这种没有分区的也可以是/dev/sdb这种已经分区了的
注意:如果没有pv命令,安装 #yum -y install lvm2
[root@localhost ~]# pvcreate /dev/sdb #创建pv
[root@localhost ~]# pvs / pvscan / pvdisplay #三种查看pv的方法
以上是第一步,创建物理卷;
[root@localhost ~]# vgcreate vg1 /dev/sdb #创建卷组,这里还可以-s来指定创建分区的PE大小
[root@localhost ~]# vgs / vgscan / vgdisplay #查看卷组
第二步:创建卷组;
[root@localhost ~]# lvcreate -L 2G -n lv1 vg1 #创建lv
[root@localhost ~]# lvcreate -l 200 -n lv2 vg1 #采用PE的方式创建一个lv
[root@localhost ~]# lvcreate -l free PE -n lv2 vg1 #PE的另一种写法
[root@localhost ~]# lvs / lvscan / lvdisplay #查看lv的三种命令
第三步:创建lv,这里我用了三种命令创建了三个lv;
-L:指定lv的大小;
-n:给创建的lv起一个名字;
-l 200 :指定PE数量来制定lv大小;
3、制作文件系统并挂载
[root@localhost ~]# mkfs.xfs /dev/vg1/lv1 #制作xfs的文件系统
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv2 #制作ext4的文件系统
[root@localhost ~]# mkdir /mnt/lv{1..2} #创建挂载点
[root@localhost ~]# mount /dev/vg1/lv1 /mnt/lv1 #挂载
[root@localhost ~]# mount /dev/mapper/vg1-lv2 /mnt/lv2 #挂载的另一种写法
挂载以后:df -hT #查看磁盘挂载信息
不过此时只是临时挂载,要想永久挂载就需要前文提到的修改系统文件以达到开机自己挂载,在这我也就不再多赘述了;
4、LVM逻辑卷扩容
4.1、VG管理
如果lv所在的vg有空间直接对lv扩容就可以了!
扩大VG vgextend
[root@localhost ~]# pvcreate /dev/sdc #创建新的物理卷
[root@localhost ~]# vgextend vg1 /dev/sdc #vg1卷组名,将/dev/sdc扩展到vg1中
扩大LV lvextend
[root@localhost ~]# lvextend -L 5G /dev/vg1/lv1 #这是指将lv1扩容到5G
[root@localhost ~]# lvextend -L +3G /dev/vg1/lv1 #这是指在原有基础上加3G
[root@localhost ~]# lvectend -l +200 /dev/vg1/lv1 #PE写法,在原有的基础上加200个PE
FS(file system)文件系统扩容
这里介绍xfs和ext4两种文件系统的扩容;
[root@localhost ~]# xfs_growfs /dev/vg1/lv1 #xfs文件系统扩容
[root@localhost ~]# resize2fs /dev/vg1/lv1 #ext4文件系统扩容
5、LVM逻辑卷缩容
重要提示:在进行任何磁盘操作前,请务必备份重要数据。操作错误可能导致数据丢失;
备份数据:再开始缩小逻辑卷之前,首先备份其中所有的数据,以防止数据丢失。
卸载逻辑卷:如果逻辑卷包含操作系统的根目录或者已挂载的其他重要目录,需要再进入单用户模式下或使用Live CD环境下卸载该逻辑卷。这是因为无法在线缩小当前正在使用的逻辑卷。
卸载文件系统:在缩小逻辑卷之前,确保已卸载文件系统。如果是ext2/ext3/ext4文件系统,可以使用 “umount /mnt/vg/lv”
检查文件系统:在缩小逻辑卷之前,最好使用文件系统检查工具检查文件系统是否有错误。对于ext2/ext3/ext4文件系统可以运行:“e2fsck -f /de/vg/lv”
缩小逻辑卷:使用lvresize命令来缩小逻辑卷。例如缩小到10G,可以运行:
lvresize --resizefs --size 10G /dev/vg/lv
重新挂载逻辑卷
验证操作:确认文件系统和逻辑卷已成功缩小到所需大小
请注意,缩小逻辑卷涉及风险,如果操作不当可能导致数据丢失。因此,再进行此操作之前,无比备份所有重要数据,并谨慎操作。如果你对这些步骤不确定或不熟悉,建议寻求专业人士的帮助。
六、交换分区
交换分区管理Swap--也叫虚拟内存
作用:提升内存的容量,防止OOM(Out of Memory)
现象是当内存不够的时候内核会随即杀死进程,它认为占用内存多的进程。(内核会先删除占用内存多的进程)
swap分区大小的设置规则:
再Linux系统,我们可以参照Redhat公司为RHEL5、RHEL6推荐的SWAP空间的大小划分原则,在你没有其他特别需求时,可以作为很好的参考依据。
内存小于4GB,推荐不少于2GB的swap空间;
内存4GB~16GB,推荐不少于4GB的swap空间;
内存16GB~64GB,推荐不少于8GB的swap空间;
内存64GB~256GB,推荐不少于16GB的swap空间;
1、查看当前的交换分区
[root@localhost ~]# free -m #查看内存
[root@localhost ~]# swapon -s #查看交换分区信息
2、增加交换分区
增加交换分区,可以是基本分区,LVM,File;
基本分区制作交换分区
[root@localhost ~]# fdisk /dev/sdd #分一个主分区出来
[root@localhost ~]# partbrobe /dev/sdd #刷新分区表
[root@localhost ~]# mkswap /dev/sdd1 #初始化
[root@localhost ~]# blkid /dev/sdd #查看UUID
[root@localhost ~]# vim/det/fstab #制作开机自动挂载
[root@localhost ~]# swapon -a #激活swap分区
[root@localhost ~]# swapoff /dev/sdd #关闭swap分区
file制作
[root@localhost ~]# dd if=/dev/zero of=/swap.img bs=1M count=2000
[root@localhost ~]# mkswap /swap.img #初始化
[root@localhost ~]# vim /etc/fstab #设置开机自动挂载
[root@localhost ~]# chmod 600 /swap.img #交换分区权限设置为600,默认为644权限不安全
[root@localhost ~]# swapon -a #激活
[root@localhost ~]# swapon -s #查看交换分区信息
七、mount详解
常见的挂载选项:
-o: 指定问价虚拟同属性
rw: 读写
ro: 只读
noexec: 不允许执行二进制文件
exec: 允许执行二进制文件
auto: mount -a 开机自动挂载
remount: 在线重新挂载
案例一、exec/noexec
[root@localhost ~]# mount /dev/vg1/lv1 /mnt/lv1 #挂载默认是有执行权限的
[root@localhost ~]# mount -o noexec /dev/vg1/lv2 /mnt/lv2 #设置不允许执行二进制文件
案例二、取消挂载
[root@localhost ~]# umount /mnt/lv2
[root@localhost ~]# umount -l /mnt/lv2 #强制卸载
八、磁盘阵列
1、RAID介绍
RAID即独立磁盘冗余阵列,通常简称为磁盘阵列。简单来说,RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能数据冗余的技术。
注意:所有服务器在安装操作系统之前必须先做RAID【常识】
最常见的RAID级别:0、1、5、6、10(10是1和0的组合)
1)raid0 --数据条带卷
最少需要两块磁盘,分别往每一块磁盘上写一部分数据;
优点:
- 读写速度快
- 磁盘利用率100%
缺点:不提供数据冗余,无数据校验,不能保证数据的正确性,存在单点故障。
应用场景:
1)对数据完整性要求不高的场景,如:日志存储,个人娱乐
2)要求读写效率高,安全性能要求不高的,如图像工作站
2)raid1 --镜像raid
通过磁盘数据镜像实现数据冗余,再成对的独立磁盘上产生互为备份的数据。一般需要两块盘,每块磁盘上都会存储一份完整数据。其数据安全性就会较高,但是磁盘空间利用率是比较低的。
优点:提供数据冗余,数据双倍存储安全性高支持容错。读速度快。
缺点:写速度慢,无数据校验。磁盘利用率不高。磁盘利用率:50%;
应用场景:
存放重要数据,如数据存储领域。
3)raid5
RAID5应该是目前最常见的RAID等级,它的校验数据分布在阵列中的所有磁盘上。RAID5的磁盘上同时存储数据和校验数据。当一个数据盘损坏时,系统可以根据其他数据块和对应的校验数据来重建损坏的数据。
raid5最少需要3块磁盘。
优点:
- 可以找回丢失的数据----数据可以通过校验计算得出
- 冗余磁盘----->(需要4块磁盘将其中一块做热备)当某一块磁盘坏掉后,冗余磁盘会自动替换上去
- 有校验机制
- 读写速度高
- 磁盘利用率高
缺点:磁盘越多安全性能越差
#定义:
RAID5是RAID0和RAID1的折中方案。RAID 5具有和RAID 0相似的数据读取速度,只是多了一个校验信息。
RAID 5的磁盘空间利用率吧比RAID 1高,存储成本相对较低,是目前运用较多的一种解决方案。
应用场景:安全性较高,如金融、数据库、存储等。
4)RAID 6
RAID 6是在RAID 5的基础上为了进一步增强数据保护而设计的一种RAID方式。
RAID 6引入双重校验的概念,至少需要四块磁盘,他可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。
优点:
- 容错,允许两块磁盘同时坏掉。读写快。
- 良好的随机读性能
- 有校验机制
缺点:
- 写入速度差
- 成本高
应用场景:对数据安全级别要求较高的企业
5)RAID 10(混合raid)
优点:
- 较高的IO性能
- 有数据冗余
- 无单点故障
- 安全性能高
缺点:成本稍高
应用场景:特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。
RAID类型 | 个数 | 利用率 | 优缺点 |
---|---|---|---|
RAID0 条带集 | 2+ | 100% | 读写速率最快,不容错 |
RAID1 镜像集 | 2 | 50% | 读写速率一般,容错 |
RAID5 带奇偶校验条带集 | 3+ | (n-1)/n | 读写速率快,容错,允许坏一块 |
RAID6 带奇偶校验条带集双校验dp | 4+ | (n-2)/n | 读写快,容错,允许坏两块 |
RAID10 RAID1的安全+RAID0的高速 | 4 | 50% | 读写速率快,容错 |
2、制作磁盘阵列
本次以RAID5为项目实验(3快硬盘)+热备(1块硬盘)
1)准备四块硬盘
[root@localhost ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 16 10月 4 13:20 /dev/sdb
brw-rw---- 1 root disk 8, 32 10月 4 13:20 /dev/sdc
brw-rw---- 1 root disk 8, 48 10月 4 13:20 /dev/sdd
brw-rw---- 1 root disk 8, 64 10月 4 13:20 /dev/sde
2)创建RAID
[root@localhost ~]# mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
-C #创建RAID
/dev/md #第一个RAID设备
-l5 #RAID5
-n #RAID成员的数量
-x #热备盘的数量
3)格式化,挂载
[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /mnt/raid0
[root@localhost ~]# mount /dev/md0 /mnt/raid0
[root@localhost ~]# cp -r /etc /mnt/raid0
4)查看RAID信息
5)模拟一块硬盘坏掉,并移除
终端一:
[root@localhost raid0]# watch -n 1 'mdadm -D /dev/md0 | tail' #watch持续查看
终端二:
[root@localhost raid0]# mdadm /dev/md0 -f /dev/sdb -r /dev/sdb #模拟坏了并移除
6)设置RAID开机生效
[root@localhost raid0]# mdadm -D -s
ARRAY /dev/md0 metadata=1.2 spares=1 name=localhost.localdomain:0 UUID=16981bf0:62771092:7c61c4c7:b79e00e5
[root@localhost raid0]# mdadm -D -s > /etc/mdadm.conf
3、raid 5删除操作
- 卸载raid挂载——umount /dev/md0
- 停止raid——mdadm -s /dev/md0
- 删除raid卷——mdadm --misc --zero-superblock /dev/sd{b..e}