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

在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. Web测试到底是在测什么(资料合集)

    开始今晚的主题之前 先来看一张图, 这是老徐16年10月份,线上Web主题分享时整理的大纲 图片略模糊 看得清就好 Web测试, 进行抽离拆分,基本上就如上一些内容. 不管是测什么系统,什么功能,基本 ...

  2. hdu 2710 Max Factor 数学(水题)

    本来是不打算贴这道水题的,自己却WA了三次.. 要考虑1的情况,1的质因子为1 思路:先打表 ,然后根据最大质因子更新结果 代码: #include<iostream> #include& ...

  3. [笔记]SciPy、Matplotlib基础操作

    NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...

  4. [刷题]算法竞赛入门经典(第2版) 5-4/UVa10763 - Foreign Exchange

    题意:有若干交换生.若干学校,有人希望从A校到B校,有的想从B到C.C到A等等等等.如果有人想从A到B也刚好有人想从B到A,那么可以交换(不允许一对多.多对一).看作后如果有人找不到人交换,那么整个交 ...

  5. PHP电商订单自动确认收货redis队列

    一.场景 之前做的电商平台,用户在收到货之后,大部分都不会主动的点击确认收货,导致给商家结款的时候,商家各种投诉,于是就根据需求,要做一个订单在发货之后的x天自动确认收货.所谓的订单自动确认收货,就是 ...

  6. 如何用PHP遍历文件数目 或删除目录下的全部文件?

    先说一下基础知识: 文件位置如下图所示: 1.判断是文件还是目录 var_dump(filetype("./aa/bb/cc.txt")); 输出: string(4) " ...

  7. Hadoop中Hbase的体系结构

    HRegion 当一张表中的数据特别多的时候,HBase把表拆成多个块,每个块就是一个HRegion,每个region中包含这个表里的所有行 HRegionServer 数据库的数据存在HDFS文件系 ...

  8. Day5模块-time和datetime模块

    模块是封装一段代码来实现某种功能. 分为三类: 1.自定义模块 2.标准库,内置模块 3.开源模块 -------------------------------------------------- ...

  9. Spring Boot 学习(1)

    文 by / 林本托 Tip 做一个终身学习的人. Spring Boot 初体验 Spring Boot 包含了很多 start(Spring boot 中 的叫法,就是一个模块,后文统一称模块,便 ...

  10. hdu 1711---KMP

    题目链接 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...