• Linux中磁盘分区——理论篇


    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

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

  • 相关阅读:
    nginx 安全请求头
    使用citus 列式存储压缩数据
    nginx ngx_http_realip 的功能以及使用
    act 的密钥&&环境变量管理
    oracle怎么查询重复的数据
    如何在Oracle中复制表结构和表数据
    2022成都.NET开发者Connect线下活动
    闭包具有逻辑内聚的功能
    编程范式是人类思维方式的投影代表了程序设计者认为程序应该如何被构建和执行的看法
    工程师是高级生产者
  • 原文地址:https://www.cnblogs.com/vathe/p/6747921.html
Copyright © 2020-2023  润新知