Linux中磁盘分区——理论篇

现在主流的分区的方式有两种——MBR分区和GPT分区,本文将着重介绍MBR分区底层原理,及用相关命令验证相关原理

为什么要对磁盘进行分区

优化I/O性能

隔离系统和应用程序

实现磁盘空间的配额限制

同一磁盘可采用不同的文件系统

同一磁盘上可以安装多个操作系统

//当然,分区也会有若干缺点,这里忽略不计

MBR分区

MBR:Master Boot Record, MBR磁盘分区是一种使用最为广泛的分区结构,它应用于Windows系统平台,Linux系统平台和基于X86的UNIX等系统平台。

实现原理

使用位于磁盘的0号扇区(一扇区等于512字节),来表示整个磁盘的整体分区情况,整个0号扇区简称为MBR扇区。

从硬件角度讲,MBR分区是按柱面进行的,也就是说,磁盘上的同一柱面只能归于一个分区。但是,在CentOS 6.8上,同一柱面上的不同扇区可以属于不同分区。

MBR扇区组成

MBR扇区由引导代码、MBR分区表、MBR结束标志3部分构成,一共占用512个字节。

其中引导代码占用446个字节,MBR分区占用64个字节,MBR结束标志占用2个字节,MBR扇区一共占用512个字节。

引导代码:占MBR分区的前446字节,负责整个系统的启动。如果引导代码被破坏,系统将无法启动

MBR分区:占引导代码后面的64个字节,是整个硬盘的分区表。每个分区使用的字节为16个,所以这确定了MBR分区方式最多只有4个主分区(包含扩展分区在内)。

MBR结束标志:占用最后2个字节,一直为"55AA".

分区规则

1.一块磁盘上主分区和扩展分区的个数总和不能超过4个

2.一块磁盘上最多只能有1个扩展分区

3.扩展分区中可以创建逻辑分区,个数限制视磁盘类型而定

实验

注意:这些实验具有一定的破坏性,强烈建议不要在生产环境下操作,在虚拟机上操作上时,最好进行快照处理,以便于造成不可恢复性的操作时,可以使用快照功能将系统恢复到操作前的状态。

查看磁盘MBR扇区数据

hexdump /dev/sda -C -n 512
# hexdump命令可查看二进制文件,也可以直接查看硬盘数据
-C选项,以十六进制显示数据
-n选项,读取输入数据的字节个数
  • 显示结果
...
000001d0 07 19 83 fe ff ff 00 48 06 00 00 00 80 02 00 fe |.......H........|
000001e0 ff ff 83 fe ff ff 00 48 86 02 00 00 40 01 00 fe |.......H....@...|
000001f0 ff ff 05 fe ff ff 00 48 c6 03 00 b8 39 15 55 aa |.......H....9.U.|
00000200
# 最后几行的结果
  • 显示结果倒数第二行,最后四个字母“55 aa”,可见MBR扇区最后两个字节为“55aa”. 可以将其修改,然后reboot(注:不要在生产环境下操作),机器就启动不了,可以通过救援模式将这两个字节修改为"55 aa".

修改MBR扇区数据

下面“破坏”mbr扇区数据

  • 查看分区信息是否正常
[root@vathe ~]#fdisk -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000455a4 Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 2637 20971520 83 Linux
/dev/sda3 2637 3942 10485760 83 Linux
/dev/sda4 3942 26109 178052096 5 Extended
/dev/sda5 3943 4204 2097152 82 Linux swap / Solaris
/dev/sda6 4204 26109 175952896 83 Linux Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

使用fdisk命令查看磁盘信息,fdisk命令是直接查询mbr分区表的信息

  • 备份mbr分区信息
[root@vathe ~]#dd if=/dev/sda of=/tmp/mbr bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.00102281 s, 501 kB/s

读取/dev/sda设备中读取数据,并存储到/tmp/mbr文件中,块大小为1字节,数目为512个

  • 修改mbr分区信息
[root@vathe ~]#dd if=/dev/zero of=/dev/sda bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.0019455 s, 263 kB/s

把/dev/sda分区表的512个字节数据全部数据改为0

  • 查看mbr分区信息
[root@vathe ~]#fdisk -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000 Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
# 显示不出磁盘分区的具体信息了
  • 修复磁盘分区信息
[root@vathe ~]#dd if=/tmp/mbr of=/dev/sda bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.0012424 s, 412 kB/s

理论篇到此就结束了,欢饮阅读下一篇实践篇

Linux中磁盘分区——理论篇的更多相关文章

  1. linux初学者-磁盘分区方式篇

    linux初学者-磁盘分区方式篇 一般的计算机都会采用mbr分区方式,这种分区方式只能够建立四个主分区,如果还需要或更多的分区,就需要将其中一个主分区建立成一个扩展分区,在里面建立逻辑分区,这些分区信 ...

  2. linux中磁盘分区以及如何将磁盘挂载到系统中

    fdisk 分区 fdisk /dev/sdb -p查看当前分区-t 改分区号-w将分区表写进磁盘-n创建分区 -p主分区 -e拓展分区 partprobe 让内核更新分区信息cat /proc/pa ...

  3. Linux中磁盘分区、格式化、挂载等管理

    1. 添加磁盘,查看磁盘状况 [root@db1 /]# fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders Units = c ...

  4. Linux中磁盘mbr分区——实践篇

    Linux中磁盘mbr分区——实践篇 fdisk命令 语法 fdisk(选项)(参数) 选项 -b <分区大小> 指定每个分区的大小 -l 列出分区表信息 -v 显示版本信息 参数 设备文 ...

  5. linux初学者-磁盘拉伸缩减篇

    linux初学者-磁盘拉伸缩减篇 在系统的使用过程中,往往会出现这样的问题,由于刚开始无法估计需要的磁盘空间,导致后期磁盘空间不够,使得数据没地方存储,又或者后期磁盘空间过大,造成资源的浪费.这种在使 ...

  6. Linux 磁盘空间查询&&解决Linux 中“磁盘空间不足”的问题

    一.linux 查看目录的剩余空间大小 两个命令df .du结合比较直观 df -h 查看整台服务器的硬盘使用情况 du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的 ...

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

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

  8. Linux下磁盘分区、挂载、卸载操作记录

    Linux下磁盘分区.挂载.卸载操作记录. 操作环境:CentOS release 6.5 (Final) Last :: from 118.230.194.76 [root@CentOS ~]# [ ...

  9. 【Linux】磁盘分区

    我们在Linux操作过程中,可能会遇到磁盘分区的问题.这篇文章是对/dev/sdb 这块磁盘进行分区. linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d) ...

随机推荐

  1. fw-cloud-framework项目配置、启动问题

    1.config组件:其配置优先级高于每个注册到同一个中心的工程的本地配置,所以在统一以dev这个 profile启动各个项目时,去config中心中找-dev结尾的各个工程名命名的文件. confi ...

  2. 【基本知识】Flume基本环境搭建以及原理

    系统:CentOS6.5JDK:1.8.0_144Flume:flume-ng-1.6.0-cdh5.12.0 一.什么是Flume flume 作为 cloudera 开发的实时日志收集系统,受到了 ...

  3. how do I get the difference between two R named lists?

    aa<- list(a=1, b="two", c=list(3, "four")) bb <- list(a=1, c=list(3, " ...

  4. Java中常用的方法

    枚举: 1:DemoEnum.valueOf(String str) 从枚举类中中找字符串,如果有则返回对应枚举值 2:DemoEnum.values() 获得枚举集合 3:DemoEnum.prop ...

  5. JaveWeb 公司项目(4)----- Easyui的表单验证

    前面三篇博文讲述的是界面的搭建和数据的传输,可以看出目前我做的这个小项目已经有了一个大体的雏形,剩下的就是细节部分的打磨和一些友好的人机交互设计,今天做的是表单的验证,作为初学者,着实花了一番功夫,所 ...

  6. Oracel中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  7. Java——String,StringBuffer,StringBuilder

    String 一经创建,不可更改,每次更改都是创建新对象,销毁旧对象 StringBuilder 创建后可修改,多线程不安全 StringBuffer 创建后可修改,多线程安全 StringBuffe ...

  8. Token和SessionStorage(会话存储对象)

    sessionStorage数据只在当前标签页共享 存在本地   关闭浏览器后会清除数据(关闭标签页不会清楚) localStorage数据会存在浏览器中  浏览器关了数据也还在 只有清除缓存才会消失 ...

  9. 用aws cli 下载s3中数据到本地

    参考https://blog.csdn.net/DynastyRumble/article/details/76649120 1 首先注册AWS账户,绑定信用卡.一定要填写正确的手机,因为验证方式是它 ...

  10. Codeforces 1043 F - Make It One

    F - Make It One 思路: dp + 容斥 首先, 答案不会超过7, 因为前7个质数的乘积大于3e5(最坏的情况是7个数, 每个数都缺少一个不同的因子) 所以从1到7依次考虑 dp[i][ ...