Linux磁盘系统——磁盘系统简介
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磁盘系统——磁盘系统简介的更多相关文章
- Linux系统磁盘管理
1 Linux磁盘管理体系简介 Linux磁盘管理分为五个步骤:首先在服务器上添加相应的硬盘(如/dev/sda.sdb.sdc等),对全新的服务器(即没有操作系统)做硬RAID0.RAID1.RAI ...
- Linux学习日记之磁盘与档案系统
主要定义 磁盘的物理组成磁盘主要由圆形磁盘(多张).机械手臂.磁头等组成.每张磁盘都有不同的磁道,半径相同的磁道组成了磁柱,沿着中心划线可将磁盘分成若干扇区,每个扇区的大小是512Bytes. 磁盘分 ...
- Linux系统——磁盘管理
磁盘结构 (1)硬盘的物理结构 磁头:每面一个磁盘 盘片:硬盘有多个盘片,每个盘片2面 (2)硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇形区存放512字节的数据 磁道:统一盘片不同半径的同心 ...
- linux 系统磁盘管理体系
目录 linux 系统磁盘管理体系 一.磁盘的基本概念 二.磁盘的内部结构 三.磁盘的外部结构 四.磁盘的接口及类型 五.fdisk磁盘分区实践 六.gdisk 分区 七.parted 高级分区工具. ...
- Linux系统磁盘分区、删除分区、格式化、挂载、卸载、开机自动挂载的方法总结
Linux系统按照MBR(Master Boot Record)传统分区模式: 注意:传统的MBR(Master Boot Record)分区方式最大只能分2T容量的硬盘,超过2T的硬盘一般采用GPT ...
- Linux系统磁盘管理(lvm逻辑卷管理)
linux系统用户常遇到的一个问题就是如何精准的评估分区的大小,已分配合适的磁盘空间:普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文 ...
- linux 系统磁盘管理(主分区和逻辑分区)
摘要:linux系统磁盘管理主分区和逻辑分区 1.linux系统分区应了解的常识 硬盘分区实质上是对硬盘的一种格式化,然后才能使用硬盘保存各种信息,在创建分区时,就已经设置好了硬盘的各项物理参数,指定 ...
- 物理机异常断电,linux虚拟机系统磁盘mount失败,导致无法启动; kubectl 连接失败
虚拟机 CentOS 7 挂载文件系统失败 上周五下班前没有关闭虚拟机和物理机, 今天周一开了虚拟机之后,发现操作系统启动失败. 原因跟 这篇文章描述的一模一样. 解决操作系统的文件系统挂载的问题之后 ...
- Linux系统 磁盘IO过高排查总结
最近做的一个电商网站因为磁盘 I/O 过高导致访问速度奇慢,问题存在两个月有余未得到解决办法.此次排查原因的经验可以作下次问题的参考. 1.会看懂 top 系统命令出来的各项参数.此次是无意中发现 u ...
随机推荐
- JS基础语法---函数练习part3---4个练习
练习1:求一个数字的阶乘 function getJieCheng(num) { var result = 1; for (var i = 1; i <= num; i++) { result ...
- DDCTF 2019 部分WP
WEB 滴~ http://117.51.150.246/index.php?jpg=TmpZMlF6WXhOamN5UlRaQk56QTJOdz09 观察链接可发现jpg的值是文件名转hex再bas ...
- 删除带外键的表【foreign key constraint fails】报错
title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...
- RC4 对称加密
public class RC4 { byte[] s = new byte[256]; byte[] key; byte keylen;// 4 ~ 16 int pi = 0; int pj = ...
- 常用的架包对应的maven配置
<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> <grou ...
- c# WF 第2节 窗体的添加与删除
本节内容: 1: 窗体的添加 2: 窗体的删除 1: 窗体的添加 2: 窗体的删除 3:窗口的运行,发现只有一个form1 是因为
- 浏览器onbeforeunload
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- sublime3配置
1.sunblim3配置 一旦配置好了,如果换了一台电脑那直接将C:\Users\djx\AppData\Roaming\Sublime Text 3\Packages\User文件夹拷贝到新下载的s ...
- git--github使用
什么是github GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub. GitHub于2008年4月10日正式上线,除了Git代码仓 ...
- python数据分析教程大全
第一篇:Anaconda安装和使用 第二篇:Jupyter norebook使用 第三篇:pandas教程 第四篇:numpy教程 第五篇:Matplotlib教程 第六篇:实战项目 期待吗?(微笑脸 ...