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

在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文件管理浅析(一) _磁盘管理基础的更多相关文章

  1. Linux常用命令之文件磁盘管理

    前言 本文知识点是曾经学习过程中收录整理的,方便学习使用. 一>Linux常用基本命令 Linux命令格式:command [-options] [parameter1] ... command ...

  2. Linux常用命令学习7---(磁盘管理df du、磁盘的分区和格式化fdisk parted)

    1.磁盘管理    在服务器的维护中,我们需要关心服务器的磁盘使用了多少.还有多少的剩余空间.某个文件有多大.某个文件夹内的所有文件在一起一共占用的多少空间……问题.以便我们在合适的时机为服务器添加硬 ...

  3. Linux系统下常用的磁盘管理命令——du / df / fdisk / mount / xxd

    之前使用虚拟机体验Linux操作系统的使用,一般使用默认的磁盘分区设置,也很少涉及磁盘管理操作,且总有删除重装作为后盾.在安装Ubuntu双系统后,在使用过程中遇到了磁盘分区不合理导致的/boot分区 ...

  4. 最全 Linux 磁盘管理基础知识全汇总

    一.存储设备的挂载和卸载 存储设备的挂载和卸载常用操作命令:fdisk  -l.df.du.mount.umount. fdisk  -l 命令 1.作用 查看所有硬盘的分区信息,包括没有挂上的分区和 ...

  5. Linux操作_磁盘管理_增加虚拟磁盘

    环境:虚拟机 VM 12,Linux版本号 CentOS 7.3 1,在当前的虚拟机选项卡点击鼠标右键,选择“设置” 2,在弹出的对话框中左侧选中“磁盘”->点击下方“添加”按钮,在弹出的“添加 ...

  6. Linux命令_磁盘管理_查看磁盘或目录的容量

    软件环境:虚拟机VM12,Linux版本 CentOS 7.3 命令 df (disk filesystem) 用于查看已挂载磁盘的总容量.使用容量.剩余容量等,可以不加任何参数,默认以KB为单位显示 ...

  7. Linux 磁盘管理基础命令df,du,fdisk,mke2fs

    1.df:查看已挂载磁盘的总容量,使用容量和剩余容量等,默认以KB位单位显示 文件系统   容量         已用    可用       已用百分比  挂载点 df常用选项-i,-h,-k,-m ...

  8. Linux系统管理_磁盘管理——敬请期待!!!

    df 显示磁盘空间使用情况 -a 全部文件系统列表 -h 以方便阅读的方式显示 -T 列出文件系统类型 du 查看目录和文件的磁盘空间使用情况 -a 显示目录中所有文件大小 -h 以易读方式显示文件大 ...

  9. Linux学习之CentOS(十三)-----磁盘管理之 磁盘与目录的容量(转) df 与du 命令

    磁盘与目录的容量 现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的. 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个 ...

随机推荐

  1. DokiCam 360°4K相机:为极致运动爱好者而生

    去年11月,位于中国苏州的DokiCam为其360°消费像机推出了Kickstarter人群资助活动.随着本次活动圆满结束,这款被称为DokiCam 360°的动作相机现在已经可以购买. 进入360° ...

  2. [js笔记整理]事件篇

    一.事件流1.冒泡事件:从特定的事件到不特定事件依次触发:(由DOM层次的底层依次向上冒泡)(1)示例: <html onclick="add('html<br>')&qu ...

  3. miller_rabin算法检测生成大素数的RSA算法实现

      import math from functools import reduce #用于合并字符 from os import urandom #系统随机的字符 import binascii # ...

  4. JAVA的Executor框架

    Executor框架分离了任务的创建和执行.JAVA SE5的java.util.concurrent包中的执行器(Executor)管理Thread对象,从而简化了并发编程.Executor引入了一 ...

  5. .Net程序猿需掌握的知识

    作为一个.Net的技术人员需要掌握的技术,当然,理解这些知识点并不能让你学会.NET开发. 但能够衡量你是否有着走出校门的能力,也算是给自己留一个知识的储备库吧. 共勉! 基础知识: 数据类型 变量 ...

  6. 【企业级框架整合】Springmvc+mybatis+restful+bootstrap框架整合

    1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问)2. 提供高并发JMS消息 ...

  7. Spring MVC和Struts2的比较

    Spring MVC PK Struts2 我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置.spring3 mvc可以认为已经100%零配置了(除了配置spring mvc ...

  8. 一个gif远程crash你的微信!

    测试了一下iPhone6,iPhone7不同版本的 iOS上,收到某个天线宝宝的gif,最新版本的微信都会挂. demo视频:演示视频 通过 crash log可以看到微信最新的6.5.8版本在打开 ...

  9. linux命令11

    tar命令的使用 tar文件是把几个文件的(或)目录集合在一个文件夹里,是创建备份和归档的最佳工具. [root@localhost ~]# tar --help用法: tar [选项...] [FI ...

  10. Spring自动化装配bean

    1. 场景 用CD(Compact disc)和CD播放器(CDPlayer)阐述DI(依赖注入). 如果不将CD插入(注入)到CDPlayer中,那么CDPlayer其实没有太大的用处,所以,可以这 ...