Linux文件管理浅析(一) _磁盘管理基础
本文主要讨论一些磁盘管理相关的基本概念,同时也是这一系列文章的第一篇,就是下图中的最下一层的一部分。

在Linux中,SATA/USB/SCSI接口都是使用SCSI模块实现的,所以使用这些接口的硬盘在Linux中都是/dev/sd...来表示的,取SCSI Disk之意,在此基础上,不同的硬盘使用sda,sdb...表示,同一个硬盘的不同分区使用sda1,sda2,etc表示。相应的IDE接口的磁盘使用/dev/hd...表示。
MBR
Master Boot Record(主引导记录)是一种历史悠久的分区表格式, 占磁盘第一个扇区(512 = bootloader 446 +Partition Table 16*4 +Signature 2 ),一块磁盘只有一个MBR,用来安装引导加载程序,分区表等信息
BIOS根据设置找到启动介质的MBR,执行其中的BootLoader,bootloader主要工作就是根据从分区表中描述的分区中找到OS并将其加载。
不同的OS使用的MBR具体分布有所不同,但布局框架都遵循下图(wikipedia)所示的结构:
| Description | Size |
|---|---|
| Bootstrap code area | 446 |
| Partition entry No1 | 16 |
| Partition entry No2 | 16 |
| Partition entry No3 | 16 |
| Partition entry No4 | 16 |
| Boot Signature | 2 |
MBR使用32bit进行LBA寻址,而每个块的大小是512byte,所以MBR能管理的最大磁盘容量是(2^32)*512byte = 2TB,所以,如果你对一块大于2TB的磁盘进行分区的时候,不要使用MBR,而要用下面的GPT。目前,越来越多的系统使用UEFI(GPT)来替代BIOS(MBR)引导系统,Microsoft从windows8开始就支持UEFI(GPT)模式以实现更快的开机。
GPT
前文已经说过,对于512byte的一个扇区,MBR引导最大支持2TB磁盘,所以对于想要使用更大的磁盘做系统盘,GPT(GUID Partion Table)是一个更好的选择。和MBR不同,GPT使用64bit来描述LBA地址,这样一来,同样是512byte的一个扇区, GPT能表示的磁盘容量就是
...一个短期内不会达到的单盘容量,除了LBA,分区表的位宽也从MBR的2byte扩展到128byte,这样一个GPT分区表就可以管理128个分区。除了容量, GPT分区表通过使用全局唯一的ID来标识分区,避免了全盘拷贝,实现了更好的安全性。虽然GPT有这么多性能上的优势,但是出于向后兼容的考虑,对于512byte的扇区,GPT的LBA0还是放置了一个MBR分区表,GPT的简单布局如下:
| Description | Size |
|---|---|
| MBR | 512 |
| GPT Header | 512 |
| Partion Table | 16384 |
可见,GPT本身占用了LBA0~LBA33的扇区,磁盘的第一个数据存储在LBA34地址处。
Bootloader
bootloader的主要工作就是提供启动菜单+加载内核文件+转交其他loader,它会识别硬盘里的文件系统格式(要有参照分区表),且操作系统的bootloader只会认识自己分区内的可开机内核文件 + 其他分区的bootloader(boot sector),这也就是在一个磁盘中安装双系统的基础。在一个双系统的系统盘中, 典型的布局如下:

需要注意的是,windows的bootloader缺省会将自己覆盖安装在MBR以及所在分区的boot sector中,而Linux系统在安装的过程中可以指定安装的扇区,除了作为第一个操作系统的bootloader直接安装在MBR中,还可以安装在某个分区的启动扇区同时在MBR中添加选项,所以如果安装windows+linux双系统,建议先安装windows再安装linux,如果反过来的话需要使用其他工具修复Linux的bootloader。
Partition Table
MBR或GPT的一部分,MBR每个分区需要2byte描述,分区表占64byte,所以MBR直接管理的(主分区+扩展分区)最多有4个,而GPT每个分区使用128byte描述,分区表占16384byte,所以一共可以直接管理128个分区。
说到分区表,首先得先说说分区,顾名思义,分区就是将磁盘划分为多个区域,区域之间保持一定的独立性,既安全又便于管理,磁盘的物理分区有两种类型:主分区Primary Partition和扩展分区Extented Partition,无论是哪种,对于机械磁盘来讲,分区都必须以柱面的大小为单位。
磁盘头的分区表只能分出最多4个分区,所以对于更多的分区数量的需求,系统在扩展分区的头部又创建了一个分区表,这个分区表用来描述其上的逻辑分区的分布情况。扩展分区不能格式化,逻辑分区可以。
主分区被设计成具备了引导、启动、故障转储等功能的分区,安装过windows的同学可能知道, windows系统必须安装在主分区中,相比之下,Linux也可以安装在逻辑分区中。
既然分区表只是描述分区信息的表,所以即便分区表不在了,我们位于分区上的文件系统以及数据都不会丢失,但如果分区表不在了,操作系统也不知道去哪里找文件系统,所以数据也就无法读写,这里,我做了一个小测试,使用fdisk工具删除并新建一个和原来一模一样的分区表,U盘的文件可以正常的再次被识别。
初始分区

删除第一个分区

磁盘无法识别

再次新建分区

数据再次可读

Boot Sector
每个主分区或逻辑分区都有一个,可以用来引导包括但不限于操作系统等软件,当我们在一块磁盘上装多个系统的时候, 除了第一个装入的操作系统的bootloader在MBR之外,其他的系统的bootloader都是在所在分区的boot sector中
FileSystem
文件系统就是管理文件、为上层提供文件级服务的系统, 本质上, 文件系统就是一个数据结构,这个数据结构维护了文件名--物理存储地址的映射,当然,为了实现这个映射,前人已经开发了很多款不同的文件系统,包括使用文件分配表的windows早期文件系统FAT32,当下使用的NTFS,Linux中目前主流的磁盘文件系统Ext2,Ext4,或者对标Sun公司ZFS的Btrfs,除了这些基于磁盘的文件系统, 还有很多基于内存的文件系统,比如tmpfs,procfs, devpfs等,以及基于flash的文件系统cramfs,jffs2,yaffs等。存在即合理,每种文件系统都有自己适用的场合,针对每种具体文件系统的讨论,超过了本文的讨论范围,我会在以后的文章中展开讨论。
Linux文件管理浅析(一) _磁盘管理基础的更多相关文章
- Linux常用命令之文件磁盘管理
前言 本文知识点是曾经学习过程中收录整理的,方便学习使用. 一>Linux常用基本命令 Linux命令格式:command [-options] [parameter1] ... command ...
- Linux常用命令学习7---(磁盘管理df du、磁盘的分区和格式化fdisk parted)
1.磁盘管理 在服务器的维护中,我们需要关心服务器的磁盘使用了多少.还有多少的剩余空间.某个文件有多大.某个文件夹内的所有文件在一起一共占用的多少空间……问题.以便我们在合适的时机为服务器添加硬 ...
- Linux系统下常用的磁盘管理命令——du / df / fdisk / mount / xxd
之前使用虚拟机体验Linux操作系统的使用,一般使用默认的磁盘分区设置,也很少涉及磁盘管理操作,且总有删除重装作为后盾.在安装Ubuntu双系统后,在使用过程中遇到了磁盘分区不合理导致的/boot分区 ...
- 最全 Linux 磁盘管理基础知识全汇总
一.存储设备的挂载和卸载 存储设备的挂载和卸载常用操作命令:fdisk -l.df.du.mount.umount. fdisk -l 命令 1.作用 查看所有硬盘的分区信息,包括没有挂上的分区和 ...
- Linux操作_磁盘管理_增加虚拟磁盘
环境:虚拟机 VM 12,Linux版本号 CentOS 7.3 1,在当前的虚拟机选项卡点击鼠标右键,选择“设置” 2,在弹出的对话框中左侧选中“磁盘”->点击下方“添加”按钮,在弹出的“添加 ...
- Linux命令_磁盘管理_查看磁盘或目录的容量
软件环境:虚拟机VM12,Linux版本 CentOS 7.3 命令 df (disk filesystem) 用于查看已挂载磁盘的总容量.使用容量.剩余容量等,可以不加任何参数,默认以KB为单位显示 ...
- Linux 磁盘管理基础命令df,du,fdisk,mke2fs
1.df:查看已挂载磁盘的总容量,使用容量和剩余容量等,默认以KB位单位显示 文件系统 容量 已用 可用 已用百分比 挂载点 df常用选项-i,-h,-k,-m ...
- Linux系统管理_磁盘管理——敬请期待!!!
df 显示磁盘空间使用情况 -a 全部文件系统列表 -h 以方便阅读的方式显示 -T 列出文件系统类型 du 查看目录和文件的磁盘空间使用情况 -a 显示目录中所有文件大小 -h 以易读方式显示文件大 ...
- Linux学习之CentOS(十三)-----磁盘管理之 磁盘与目录的容量(转) df 与du 命令
磁盘与目录的容量 现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的. 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个 ...
随机推荐
- 【wannacry病毒之暗网】-如何访问"暗网"(慎入)
心里能力不强的人,请别看. 有些事情还是不要接触比较好, 社会最恶一面不是随随便便就能接触到的, 也不是你能理解的 你想要用暗网做什么是你考虑的一个问题 什么是暗网? 所谓的"暗网" ...
- How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On(RHEL Pacemaker中配置STONITH)
本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Nod ...
- javaWeb学习总结(8)- JSP中的九个内置对象(4)
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- reshape: from long to wide format(转)
This is to continue on the topic of using the melt/cast functions in reshape to convert between long ...
- web worker 扫盲篇
什么是woker 官方的解释是这样的: worker是一个对象,通过构造函数Worker创建,参数就是一个js文件的路径:文件中的js代码将运行在主线程之外的worker线程: var jsFileU ...
- 观《IT培训行业揭秘》触发北大青鸟回忆
在园子里看到这篇文章<IT培训行业解密(六)>时,挺有感触,回忆顿时涌上心头: 我想起了当年单纯的我们因为各自的原因来到北大青鸟,或因前途迷茫而选择想找一条出路,或因父母的信息闭塞而想给我 ...
- Linux下让一个程序开机自动启动
1.chkconfig但是要在脚本中满足一定的条件(/etc/init.d/)下存在相关服务 2.将启动的程序写入到/etc/rc.local 选择建议: /etc/rc.local可以作为开机启动程 ...
- 正则表达式入门案例C#
---恢复内容开始--- 在网上百度了好多关于正则表达式的,不过好多都是关于语法的,没有一个具体的案例,有点让人难以入门,毕竟我还是喜欢由具体到抽象的认识.所以我就在这先提供了一个入门小案例(学了了6 ...
- canvas——随机生成迷宫
先上图. 效果 代码 随机生成迷宫要求任意两点都能够找到相同的路径,也就是说,迷宫是一个连通图.随机生成迷宫可以使用普里姆算法.广度优先算法.深度优先算法等实现.这里将使用普里姆算法通过生成最小数的方 ...
- 初识 ActiveMQ
其实算不上初识了,工作一年来一直都有接触 mq 相关的东西.但是,从来都是粘贴复制别人的配置代码,却从未认真系统的学习过它,现在线上用 mq 的项目出问题了,老板在后面拿枪指着呢,不得不好好研究下了. ...