聊一聊磁盘---接口、格式、分区、LVM
前言:“磁盘”这个词语相信大多数人并不陌生,磁盘就是指利用磁记录技术存储数据的存储器,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘,即软盘,如今常用的磁盘是硬磁盘,即硬盘。本文主要对磁盘几个重要属性做下介绍,包括磁盘接口、磁盘格式、磁盘分区以及最后单独讲解的LVM分区。
一、磁盘接口:
1.什么是磁盘接口?
磁盘接口是磁盘与主机系统间的连接部件,作用是在磁盘缓存和主机内存之间传输数据。不同的磁盘接口决定着磁盘与计算机之间的连接速度,在整个系统中,磁盘接口的优劣直接影响着程序运行快慢和系统性能好坏。常见的硬盘接口分为IDE、SCSI、SATA、mSATA、M.2、SATA Express、PCI-E及U.2等。下面介绍几个最常用的接口。
IDE接口:IDE出现的比较早,SATA则出现的比较晚。以前,很多硬盘都是IDE接口的;而现在,硬盘接口几乎SATA是标配置,市场上几乎没有IDE接口的硬盘了。以下是样例图。
SATA接口:现在最主流的接口都是SATA接口,家用pc,低端服务器都用的SATA,之所以能够取代IDE接口,是应为SATA接口的性能比IDE接口的性能好的多,速度也大大超过IDE接口,还支持热拔插。如果主板比较古董,可以通过转换设备进行转换。使用SATA接口磁盘记得bios开启AHCI模式。以下是样例图。
mSATA接口:该接口是主要用在笔记本上,比如商务本,超极本,主流笔记本等。以下是样例图。
M.2接口:是Intel为超极本量身定做的新一代接口标准,以取代原来的mSATA接口。无论是更小巧的规格尺寸,还是更高的传输性能,M.2都远胜于mSATA。M.2接口一般分为两种,在购买M.2 SSD的时候是需要注意内部协议的。一种是走传统的SATA AHCI协议,与普通SATA固态硬盘性能没有差别;另一种则是使用全新的NVMe协议,可以提供SSD高达3000MB/s以上的性能,可谓天差地别。以下是样例图。
SCSI接口:SCSI是Small Computer System Interface(小型计算机系统接口)的缩写,使用50针接口,外观和普通硬盘接口有些相似。它由SCSI控制器进行数据操作,SCSI控制器相当于一块小型CPU,有自己的命令集和缓存。SCSI接口速度快,并且由于主要用于服务器,因此硬盘本身的性能也比较高,硬盘转速快,缓存容量大,CPU占用率低,扩展性远优于IDE硬盘,并且支持热插拔。它由于性能好、稳定性高,因此在服务器上得到广泛应用。同时其价格也不菲,正因它的价格昂贵,所以在普通PC上很少见到它的踪迹。以下是样例图。
2.说下SATA和SCSI区别:
1)sata其实是scsi体系里抽取出的一部分,也就是说scsi能兼容sata,但sata反过来就不行。使用SATA接口磁盘记得bios开启AHCI模式。
2)scsi本质上还是为服务器准备的磁盘系统,它非常强调所有的控制可以由scsi体系自己完成(相当于自己集成了小型cpu),不需要主机cpu控制,所以scsi非常省资源,而sata需要主机cpu介入控制传输过程。
3)现在主流的是台式机用sata,服务器用scsi,一些低端的服务器/工作站用企业级的sata。
3.上面有介绍通过磁盘接口外观分辨磁盘接口类型,那么在Linux系统层面如何查看磁盘接口类型呢?
#scsi/sata磁盘
ls /dev/sd*
#IDE磁盘
ls /dev/hd*
说明:a-z 表示设备的序号,如sda表示第一块scsi硬盘,sdb就是第二块……最后的数字n 表示每块磁盘上划分的磁盘分区编号
注意:hda一般是指IDE接口的硬盘,hda一般指第一块硬盘,类似的有hdb,hdc等
sda一般是指SATA接口的硬盘,sda一般指第一块硬盘,类似的有sdb,sdc等
现在的内核都会把移动硬盘,U盘之类的识别为sdX的形式
二、磁盘格式:
自从PC推广应用以来,为了实现对磁盘文件的管理,已先后出现过多种硬盘分区格式,它们各自具有不同的优缺点与兼容性,使用者可根据电脑的配置,硬盘容量的大小以及操作系统的种类来选用合适的文件系统。windows下磁盘格式主要有FAT16、FAT32、NTFS 等,最新格式为exFAT,其中NTFS用于windows系统硬盘,FAT系列用于U盘。mac下磁盘格式一般分为以下三种,HFS+、FAT32以及exFAT,其中HFS+为mac系统所用格式。linux下的格式为ext系列,ext4,ext3等和xfs以及tmpfs。
1.linux中对于磁盘文件格式xfs、ext4、ext3,我该选择谁?还有tmpfs格式是什么?
centos7.0开始默认文件系统是xfs,centos6是ext4,centos5是ext3。
①ext3和ext4的最大区别在于,ext3在fsck(file system check, 用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查)时需要耗费大量时间(文件越多,时间越长),而ext4在fsck时用的时间会少非常多。ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的日志文件系统,是ext3文件系统的后继版本。ext4的文件系统容量达到1EB,而文件容量则达到16TB,这是一个非常大的数字了。对一般的台式机和服务器而言,这可能并不重要,但对于大型磁盘阵列的用户而言,这就非常重要了。ext3目前只支持32000个子目录,而ext4取消了这一限制,理论上支持无限数量的子目录。
②xfs是一种非常优秀的日志文件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的文件系统技术。xfs是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB。xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs,另外xfs经过很多年发展,各种锁的细化做的也比较好。
③tmpfs(temporary filesystem)是Linux特有的临时文件系统,一种基于内存的文件系统,相当于将内存一小部分用来虚拟成硬盘,当然了tmpfs 数据在重新启动之后不会保留。默认情况下,tmpfs会mount到/dev/shm目录。使用tmpfs,就是说你可以使用这个目录,这个目录就是tmpfs,如你写临时文件到此目录,这些文件实际上是在VM中。要使用tmpfs,您要在内核配置时,启用“Virtual memory file system support”。为防止tmpfs使用了全部VM,有时候要限制其大小。例如要创建一个最大为32 MB的tmpfs文件系统,键入:
mount tmpfs /dev/shm -t tmpfs -o size=32m
添加到 /etc/fstab,以便于服务器重启后自动挂载:
tmpfs /dev/shm tmpfs size=32m 0 0
再例如将所有/tmp目录下的文件都写在内存中,并分配给/tmp目录1G内存空间
mount -t tmpfs -o size=1g none /tmp
添加到 /etc/fstab,以便于服务器重启后自动挂载:
#说明:在/etc/fstab中,第一列指明了需要被挂载的设备名。因为没有涉及到真实设备,所以在此列将其配置为none。
#接下来的两列为指定挂在目录与被挂载的文件系统类型,在本例中配置被挂载目录为/tmp,文件系统类型为ramfs。需要为内存文件设置容量参数;
#在本例中将其设置为1G。因为文件系统并不存在于磁盘上,所以最后两列只需配置参数为0。
none /tmp ramfs size=1g 0 0
总结:最终的选择还是在xfs和ext4之间,网上也有人对俩种文件格式做了测试比较,认为小文件较多的情况下用xfs,小文件较少的情况下用ext4,同时ext系列文件系统内部结构相对简单一些,出问题后恢复相对容易,在性能的使用上,其实差不多。
2.Linux如何查看磁盘格式?
df -Th
三、磁盘分区(理论类):
硬盘分区实质上是对硬盘的一种格式化,然后才能使用硬盘保存各种信息,在创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即为MBR或gpt)和引导记录备份的存放位置。传统的是mbr分区(对应bios),当前推行的是GPT分区(对应UEFI)
1.mbr分区:
mbr分区中分为主分区、扩展分区和逻辑分区。逻辑分区必须建立在扩展分区之上,而mbr分区支持不超过2T的硬盘。
分区作用:
①主分区:主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot分区最好放在主分区上;
②扩展分区是不能使用的,它只是做为逻辑分区的容器存在的,先创建一个扩展分区,在扩展分区之上创建逻辑分区;
③我们真正存放数据的是主分区和逻辑分区,大量数据都放在逻辑分区中。
注意:
主分区+扩展分区 最多只能有4个
主分区最少是1个
扩展分区可以是0个,最多是1个
扩展分区不能直接使用,扩展分区必须首先创建成逻辑分区才能使用
逻辑分区可以是0个 1个 多个
主分区和扩展分区之间无法互相扩容
2.gpt分区:
GPT没有主分区和扩展分区的概念(mbr中扩展分区之所以存在,是因为分区个数的限制问题,既然在GPT中,分区个数几乎没有了限制,那么这些概念当然就模糊起来了。),它是为了弥补mbr磁盘的不足诞生,支持超过2T以上的硬盘。简单的说,都是主分区,最多128个(包括一些被系统做了标记,隐藏起来的)。
一般操作系统如 win7 64位及以上、centos6及以上支持gpt+uefi引导。
四、磁盘分区(实践类):
1.如何查看Linux磁盘分区是mbr还是gpt?
fdisk -l
如上图红框标记,如果红框处是“dos”,则磁盘分区为mbr;如果红框处是“gpt”,则磁盘分区为gpt;
2.mbr分区中如何查看磁盘主分区和逻辑分区情况?
fdisk -l
如上图红框标记一行表示扩展分区,此行上面几行是主分区,下面行是逻辑分区。
3.mbr和gpt格式的Linux如何用命令行工具对新加磁盘做分区划分?
4.mbr+bios和gpt+uefi安装系统时如何分区?
mbr:一般设置引导主分区为 /boot : 500 MiB ;swap分区为 内存俩倍大小;剩余给 / 或者做逻辑分区或者做LVM;
gpt: 一般设置引导主分区为 /boot/efi :500 MiB ;swap分区为 内存俩倍大小;剩余给 / 或者做LVM;
5.创建好分区的Linux设备在跑业务了,如何在不断业务的情况下给磁盘分区扩容或缩减?
这种情况需要分非LVM和LVM俩个场景(后面会着重介绍LVM)。
具体操作详情可以见我另一篇博客:https://www.cnblogs.com/cyrus0w/p/13194028.html
LVM(重点)
什么是LVM?
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。
为什么要使用LVM?
Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在分区划分好之后就无法改变其大小,当一个分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,只能采用重新分区/建立文件系统,或把分区中的数据移到另一个更大的分区中,或采用符号连接的方式使用其它分区的空间,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小,你能不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样能减少操作成本,LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
LVM工作机制?
LVM就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
LVM模型如下图:
逻辑卷管理概念?
物理卷(PV, Physical Volume)
物理卷就是指磁盘,磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数。当前LVM允许你在每个物理卷上保存这个物理卷的0至2份元数据拷贝.默认为1,保存在设备的开始处.为2时,在设备结束处保存第二份备份.
卷组(VG, Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。能在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(LV, Logical Volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/home或/usr等)。
1.centos7安装系统时如何划分LVM?
图形界面很简单,这里省略;
我习惯用kickstart+pxe安装系统,这里贴一下kickstart相关参数:
#swap分配为跟内存俩倍,asprimary为主分区,注意mbr引导下主分区数目和扩展分区数目总和不能超过4,此参数可选
part swap --asprimary --fstype="swap" --size=500 --ondisk=sda
part /boot --asprimary --fstype="ext4" --size=500 --ondisk=sda
#--size=1 --grow参数是以剩余所有空间来分区
#这句在不创建lvm时使用
part / --fstype="ext4" --size=1 --grow --ondisk=sda
#----------------------以下是创建lvm逻辑卷---------------------
#创建第一个物理卷PV分区,序号是01,大小为剩余所有空间,此卷下放置/以及对/home /var /opt /tmp 分别设置卷大小
part pv.01 --size=1 --grow --ondisk=sda
#创建一个逻辑卷组名,名字为vg_mvtech,包含在物理卷PV.01
volgroup vg_mvtech pv.01
#创建一个LV逻辑卷,挂载到/ ,从vg_mvtech组中创建,大小为10000M,LV的名字是lv_root
logvol / --fstype=ext4 --vgname=vg_mvtech --size=20000 --name=lv_root
logvol /home --fstype=ext4 --vgname=vg_mvtech --size=200 --name=lv_home
logvol /var --fstype=ext4 --vgname=vg_mvtech --size=200 --name=lv_var
logvol /opt --fstype=ext4 --vgname=vg_mvtech --size=100 --name=lv_opt
logvol /tmp --fstype=ext4 --vgname=vg_mvtech --size=1 --grow --name=lv_tmp
#----------------------以上是创建lvm逻辑卷---------------------
2.如何判断系统是LVM分区的?
df -h查看,如图红框中带有/dev/mapper/...的即为LVM分区:
或者fdisk -l查看,如图红框中写明的“LVM”:
3.一般安装操作系统的时候已经将根分区、home分区、var分区进行了LVM逻辑卷划分,那如果当初是标准安装的系统(非LVM),后期如何对多余空间安装LVM呢?
参考:https://blog.csdn.net/qq_27281257/article/details/81603410
延伸一个“活动分区”概念:
Windows中还有活动分区,就是对某个或多个主分区设置为活动分区。启动操作系统的文件都装在这个分区,Windows 系统下一般被默认为C盘,多盘符多系统可以再另外设置其余主分区盘符为活动分区。