Linux磁盘系统——磁盘系统简介

摘要:本文主要学习了Linux系统中有关磁盘的一些知识。

文件系统

说明

硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。新买来的硬盘,通常要对其进行分区并格式化。分区就如同把一个大柜按照要求分割成几个小柜子。格式化就好比在每个小柜子中打入隔断,决定每个隔断的大小和位置,然后在柜门上贴上标签,标签中写清楚每件衣服保存的隔断的位置和这件衣服的一些特性。

在格式化的过程中会向硬盘中写入文件系统。因为不同的操作系统,管理文件的方式也不尽相同(给文件设定的属性和权限也不完全一样),因此,为了使硬盘有效存放当前系统中的文件数据,就需要将硬盘进行格式化,令其使用和操作系统一样(或接近)的文件系统格式。

不同的文件系统,其运作模式和操作系统的文件数据有关。

虚拟文件系统

文件系统指文件存在的物理空间。在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构。

Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存。

Virtual File System(虚拟文件系统)使得Linux可以支持多个不同的文件系统,由于系统已将Linux文件系统的所有细节进行了转换,所以Linux核心的其它部分及系统中运行的程序将看到统一的文件系统。

Linux的虚拟文件系统允许用户同时能透明地安装许多不同的文件系统,虚拟文件系统是为Linux用户提供快速且高效的文件访问服务而设计的。

文件系统类型

minix:在Minix操作系统上使用的文件系统,Linux上运行的第一种文件系统。它有很多限制:64M分区大小限制,短文件名,唯一时间戳等等。只有软盘或者RAM中可能用的到。

ext:minix文件系统的复杂扩展,Linux中最早的文件系统,由于在性能和兼容性上具有很多缺陷,已经被ext2文件系统完全取代。

ext2:是ext文件系统的扩展,可以给Linux的文件系统提供最佳支持(主要是速度和CPU使用上),支持最大16TB的分区和最大2TB的文件。

ext3:是ext2文件系统的扩展,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性,支持最大16TB的分区和最大2TB的文件。

ext4:是ext3文件系统的扩展。ext4在性能、伸缩性和可靠性方面进行了大量改进,支持最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块的概念、快速FSCK、日志校验、无日志模式、等。它是CentOS 6的默认文件系统。

xfs:xfs是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB。它是CentOS 6的默认文件系统。

swap:swap是Linux中用于交换分区的文件系统(类似于Windows中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的2倍,但是不要超过2GB。它是Linux的必需分区。

nfs:nfs是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源。

iso9660:光盘的标准文件系统。Linux要想使用光盘,必须支持iso9660文件系统。

fat:就是Windows下的fatl6文件系统,在Linux中识别为fat。

vfat:就是Windows下的fat32文件系统,在Linux中识别为vfat。支持最大32GB的分区和最大4GB的文件。

ntfs:就是Windows下的ntfs文件系统,不过Linux默认是不能识别ntfs文件系统的,如果需要识别,则需要重新编译内核才能支持。它比fat32文件系统更加安全,速度更快,支持最大2TB的分区和最大64GB的文件。

ufs:Sun公司的操作系统Solaris和SunOS所采用的文件系统。

proc:Linux中基于内存的虚拟文件系统,用来管理内存存储目录/proc。

sysfs:和proc一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs。

tmpfs:也是一种基于内存的虚拟文件系统,不过也可以使用swap交换分区。

硬盘分区

含义

磁碟的组成主要有磁碟盘、机械手臂、磁碟读取头与主轴马达所组成,而资料的写入其实是在磁碟盘上面。磁碟盘上面又可细分出磁区(Sector)与磁轨(Track)两种单位,其中磁区的物理量设计有两种大小,分别是512B与4KB。

整个磁碟的第一个磁区特别的重要,因为他记录了整颗磁碟的重要数据。早期磁碟使用的分割格式称为MBR(Master Boot Record)格式,但是由于近年来磁碟的容量不断扩大,造成读写上的一些困扰,甚至有些大于2TB以上的磁碟分割已经让某些作业系统无法存取,因此后来又多了一个新的磁碟分割格式,称为GPT(GUID Partition Table)。

分区格式

1)MBR

早期的Linux系统为了兼容于Windows的磁碟,因此使用的是支持Windows的MBR(Master Boot Record)的方式来处理开机管理程序和分割表。而开机管理程序纪录区与分割表则通通放在磁碟的第一个磁区,这个磁区通常是512B的大小(旧的磁碟磁区都是512B),所以说,第一个磁区512B会有这两个数据:

主要开机记录(Master Boot Record,MBR):可以安装开机管理程序的地方,有446B。
分割表(Partition Table):记录整颗硬碟分割的状态,有64B。

由于分割表所在区块仅有64B容量,因此最多仅能有四组分区,每组分区记录了该区段的启始与结束的磁柱号码,可以通过扩展分区的方式增加分区的个数。

一个磁盘最多只能有一个扩展分区,扩展分区不能够格式化,里面可以分出逻辑分区。逻辑分区的区号从sda4开始,前面3个分区是保留给主分区使用的,第4个分区sda4代表扩展分区。

2)GPT

因为最新的磁盘的扇区有可能为4K,因此GPT为了和MBR相兼容,使用了逻辑区块位址(Logical Block Address,LBA)来代替扇区,GPT将磁碟所有区块以此LBA(预设为512B)来规划,第一个LBA称为LBA0(从0开始编号)。

LBA0中446字节存储开机管理程序,而在原本的分割表的纪录区内,仅放入一个特殊标志的分割,用来表示此磁碟为GPT格式。

LBA1纪录了分割表本身的位置与大小,同时纪录了备份用的LBA区块放置的位置。

在LBA2区块到LBA33区块,每个LBA可以记录四个分区信息,因此可以记录32*4=128个分区信息。每个LBA为512B,因此每个分区使用128B来记录,用64B来记录分区的起始或结束LBA,因此一个分区理论最大为2^64*512B=2^33TB。

开机流程中的开机检测程式

基本上,目前的主机系统在载入硬体驱动方面的程序,主要有早期的BIOS与新的UEFI两种机制。

1)BIOS

BIOS是一个写入到主机板上的一个程序,是开机时电脑系统会主动执行的第一个程序。

接下来BIOS会去分析电脑里面有哪些储存设备,我们以硬碟为例,BIOS会依据使用者的设定去取得能够开机的硬碟,并且到该硬碟里面去读取第一个磁区的MBR位置。MBR这个仅有446B的硬碟容量里面会放置最基本的开机管理程序,此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。

2)UEFI

如果你的分割表为GPT格式的话,那么BIOS也能够从LBA0的区块读取第一阶段的开机管理程序码。如果你的开机管理程序能够认识GPT的话,那么使用BIOS同样可以读取到正确的作业系统核心。

换句话说,如果开机管理程序不懂GPT,那自然就无法读取核心档案,开机就失败了。

由于LBA0仅提供第一阶段的开机管理程序,因此如果你使用类似GRUB的开机管理程序的话,那么就得要额外分出一个BIOS Boot的分割槽,这个分割槽能够放置其他开机过程所需的程序。在CentOS当中,这个分割槽通常占用2MB左右而已。

为了解决这个问题,因此就有了UEFI(Unified Extensible Firmware Interface)这个统一可延伸程序界面的产生。UEFI直接从预启动的操作环境加载操作系统,简化开机过程有效提高启动速度。

另外,与BIOS模式相比,虽然UEFI可以直接取得GPT的分割表,不过最好依旧拥有BIOS Boot的分割槽支援。同时,为了与Windows兼容,并且提供其他第三方厂商所使用的UEFI应用程式储存的空间,你必须要格式化一个vfat的档案系统,大约提供512MB到1G左右的容量,以让其他UEFI执行较为方便。

硬盘分区的好处

1)方便管理和控制

首先,可以将系统中的数据(也包括程序)按不同的应用分成几类,之后将这些不同类型的数据分别存放在不同的磁盘分区中。由于在每个分区上存放的都是类似的数据或程序,这样管理和维护就简单多了。

2)提高系统的效率

给硬盘分区,可以直接缩短系统读写磁盘时磁头移动的距离,也就是说,缩小了磁头搜寻的范围;反之,如果不使用分区,每次在硬盘上搜寻信息时可能要搜寻整个硬盘,所以速度会很慢。另外,硬盘分区也可以减轻碎片(文件不连续存放)所造成的系统效率下降的问题。

3)使用磁盘配额的功能限制用户使用的磁盘量

由于限制用户使用磁盘配额的功能,只能在分区一级上使用,所以,为了限制用户使用磁盘的总量,防止用户浪费磁盘空间(甚至将磁盘空间耗光),最好将磁盘先分区,然后在分配给一般用户。

4)便于备份和恢复

硬盘分区后,就可以只对所需的分区进行备份和恢复操作,这样的话,备份和恢复的数据量会大大地下降,而且也更简单和方便。

挂载硬件设备

为什么要挂载

Linux系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在Linux看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。

因此产生的问题是,当在Linux系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。

什么是挂载

挂载,指的就是将设备文件中的顶级目录连接到Linux根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。Linux系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。

根目录下的/dev/目录文件负责所有的硬件设备文件,事实上,当U盘插入Linux后,系统也确实会给U盘分配一个目录文件,就位于/dev/目录下,但无法通过目录文件直接访问U盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)。

Linux磁盘系统——磁盘系统简介的更多相关文章

  1. Linux系统磁盘管理

    1 Linux磁盘管理体系简介 Linux磁盘管理分为五个步骤:首先在服务器上添加相应的硬盘(如/dev/sda.sdb.sdc等),对全新的服务器(即没有操作系统)做硬RAID0.RAID1.RAI ...

  2. Linux学习日记之磁盘与档案系统

    主要定义 磁盘的物理组成磁盘主要由圆形磁盘(多张).机械手臂.磁头等组成.每张磁盘都有不同的磁道,半径相同的磁道组成了磁柱,沿着中心划线可将磁盘分成若干扇区,每个扇区的大小是512Bytes. 磁盘分 ...

  3. Linux系统——磁盘管理

    磁盘结构 (1)硬盘的物理结构 磁头:每面一个磁盘 盘片:硬盘有多个盘片,每个盘片2面 (2)硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇形区存放512字节的数据 磁道:统一盘片不同半径的同心 ...

  4. linux 系统磁盘管理体系

    目录 linux 系统磁盘管理体系 一.磁盘的基本概念 二.磁盘的内部结构 三.磁盘的外部结构 四.磁盘的接口及类型 五.fdisk磁盘分区实践 六.gdisk 分区 七.parted 高级分区工具. ...

  5. Linux系统磁盘分区、删除分区、格式化、挂载、卸载、开机自动挂载的方法总结

    Linux系统按照MBR(Master Boot Record)传统分区模式: 注意:传统的MBR(Master Boot Record)分区方式最大只能分2T容量的硬盘,超过2T的硬盘一般采用GPT ...

  6. Linux系统磁盘管理(lvm逻辑卷管理)

    linux系统用户常遇到的一个问题就是如何精准的评估分区的大小,已分配合适的磁盘空间:普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文 ...

  7. linux 系统磁盘管理(主分区和逻辑分区)

    摘要:linux系统磁盘管理主分区和逻辑分区 1.linux系统分区应了解的常识 硬盘分区实质上是对硬盘的一种格式化,然后才能使用硬盘保存各种信息,在创建分区时,就已经设置好了硬盘的各项物理参数,指定 ...

  8. 物理机异常断电,linux虚拟机系统磁盘mount失败,导致无法启动; kubectl 连接失败

    虚拟机 CentOS 7 挂载文件系统失败 上周五下班前没有关闭虚拟机和物理机, 今天周一开了虚拟机之后,发现操作系统启动失败. 原因跟 这篇文章描述的一模一样. 解决操作系统的文件系统挂载的问题之后 ...

  9. Linux系统 磁盘IO过高排查总结

    最近做的一个电商网站因为磁盘 I/O 过高导致访问速度奇慢,问题存在两个月有余未得到解决办法.此次排查原因的经验可以作下次问题的参考. 1.会看懂 top 系统命令出来的各项参数.此次是无意中发现 u ...

随机推荐

  1. Java正则表达式详细解析

    元字符 正则表达式使用一些特定的元字符来检索.匹配和替换符合规则的字符串 元字符:普通字符.标准字符.限定字符(量词).定位字符(边界字符) 正则表达式引擎 正则表达式是一个用正则符号写出来的公式 程 ...

  2. JDK内置工具命令

    javap Java反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件用法:javap 用法 描述 javap -help —help -? 输出此用法消息 javap -versi ...

  3. PHP配置篇(一)--php开启redis扩展

    因为最近要用到Redis,下面记录下如何给PHP开启redis的扩展. 一.安装redis 1.安装redis:https://github.com/MSOpenTech/redis/releases ...

  4. python生产者和消费者模式实现(一)普通方式

    import timeimport randomfrom multiprocessing import Queue # 生产者def producer(q, num): for i in range( ...

  5. LCD RGB 控制技术 时钟篇(下)【转】

    上一篇博文,我们介绍了LCD RGB控制模式的典型时钟.那么这一片我们要详细的去讨论剩下的细节部分. 我们先回顾一下之前的典型时序图 在这个典型的时序图里面,除了上篇博文讲述的HSYNC VSYNC ...

  6. VM虚拟机Android安装图形界面

    摘自,转 https://blog.csdn.net/weixin_42633191/article/details/89391188

  7. 线上可用django和gunicorn的dockerfile内容

    一,基础镜像 [xxx.com.cn/3rd_part/python.3.6.8:alpine3.9-mysqlclient1.4.2] FROM python:3.6.8-alpine3.7 MAI ...

  8. GitHub密钥生成

    前提电脑上需装有Git软件 这里提供百度云下载地址:https://pan.baidu.com/s/1r0y4XRyQCz7ZJBnZJhAtqw 提取码:88qf  1.登录GitHub账号 2.点 ...

  9. 第36课 经典问题(下)----关于string的疑问

    实例1: 下面的代码输出什么,为什么? #include <iostream> #include <string> using namespace std; int main( ...

  10. SpringCloud学习笔记(四、SpringCloud Netflix Ribbon)

    目录: Ribbon简介 Ribbon的应用 RestTemplate简介 Ribbon负载均衡源码分析 Ribbon简介: 1.负载均衡是什么 负载均衡,根据其字面意思来说就是让集群服务具有共同完成 ...