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 当中记载的. 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个 ...
随机推荐
- Web测试到底是在测什么(资料合集)
开始今晚的主题之前 先来看一张图, 这是老徐16年10月份,线上Web主题分享时整理的大纲 图片略模糊 看得清就好 Web测试, 进行抽离拆分,基本上就如上一些内容. 不管是测什么系统,什么功能,基本 ...
- hdu 2710 Max Factor 数学(水题)
本来是不打算贴这道水题的,自己却WA了三次.. 要考虑1的情况,1的质因子为1 思路:先打表 ,然后根据最大质因子更新结果 代码: #include<iostream> #include& ...
- [笔记]SciPy、Matplotlib基础操作
NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...
- [刷题]算法竞赛入门经典(第2版) 5-4/UVa10763 - Foreign Exchange
题意:有若干交换生.若干学校,有人希望从A校到B校,有的想从B到C.C到A等等等等.如果有人想从A到B也刚好有人想从B到A,那么可以交换(不允许一对多.多对一).看作后如果有人找不到人交换,那么整个交 ...
- PHP电商订单自动确认收货redis队列
一.场景 之前做的电商平台,用户在收到货之后,大部分都不会主动的点击确认收货,导致给商家结款的时候,商家各种投诉,于是就根据需求,要做一个订单在发货之后的x天自动确认收货.所谓的订单自动确认收货,就是 ...
- 如何用PHP遍历文件数目 或删除目录下的全部文件?
先说一下基础知识: 文件位置如下图所示: 1.判断是文件还是目录 var_dump(filetype("./aa/bb/cc.txt")); 输出: string(4) " ...
- Hadoop中Hbase的体系结构
HRegion 当一张表中的数据特别多的时候,HBase把表拆成多个块,每个块就是一个HRegion,每个region中包含这个表里的所有行 HRegionServer 数据库的数据存在HDFS文件系 ...
- Day5模块-time和datetime模块
模块是封装一段代码来实现某种功能. 分为三类: 1.自定义模块 2.标准库,内置模块 3.开源模块 -------------------------------------------------- ...
- Spring Boot 学习(1)
文 by / 林本托 Tip 做一个终身学习的人. Spring Boot 初体验 Spring Boot 包含了很多 start(Spring boot 中 的叫法,就是一个模块,后文统一称模块,便 ...
- hdu 1711---KMP
题目链接 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...