Linux 学习与进阶之磁盘管理(分区)

in Linux with 0 comment

使用磁盘前需要对其进行分区、格式化才能正常使用,分区为了更好的利用磁盘空间,格式化则是让系统识别出来。

磁盘相关知识

目前常用系统的分区表主要为MBRGPT两种

一、MBR 分区表

MBR 的全称是 Master Boot Record(主引导记录)。

MBR早在1983年IBM PC DOS 2.0中就已经提出。之所以叫“主引导记录”,是因为它是存在于驱动器开始部分的一个特殊的启动扇区。这个扇区包含了已安装的操作系统的启动加载器和驱动器的逻辑分区信息。

主引导扇区是硬盘的第一扇区,它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区

MBR分区表

MBR分区表系统

所谓启动加载器,是一小段代码,用于加载驱动器上其他分区上更大的加载器。如果你安装了Windows,Windows启动加载器的初始信息就放在这个区域里——如果MBR的信息被覆盖导致Windows不能启动,你就需要使用Windows的MBR修复功能来使其恢复正常。如果你安装了Linux,则位于MBR里的通常会是GRUB加载器。

分区表偏移地址为01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4,分别对应MBR的四个主分区。

Magic number也就是结束标志字,偏移地址01FE--01FF的2个字节,固定为55AA,如果该标志错误系统就不能启动。

MBR最大支持2.2TB磁盘,它无法处理大于2.2TB容量的磁盘。MBR还只支持最多4个主分区——如果你想要更多分区,你需要创建所谓“扩展分区”,并在其中创建逻辑分区。

补充知识:扩展分区和逻辑分区

因为MBR这分区表的设计,引出了扩展分区和逻辑分区,DOS和FAT文件系统最初都被设计成可以支持在一块硬盘上最多建立24个分区,分别使用从C到Z 24个驱动器盘符。但是主引导记录中的分区表最多只能包含4个分区记录,为了有效地解决这个问题,DOS的分区命令FDISK允许用户创建一个扩展分区,并且在扩展分区内在建立最多23个逻辑分区,其中的每个分区都单独分配一个盘符,可以被计算机作为独立的物理设备使用。关于逻辑分区的信息都被保存在扩展分区内,而主分区和扩展分区的信息被保存在硬盘的MBR内。这也就是说无论硬盘有多少个分区,其主启动记录中只包含主分区(也就是启动分区)和扩展分区两个分区的信息。

MBR 分区表硬盘分区

不外乎三种:主分区、扩展分区和逻辑分区。
主分区是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。在主分区中,不允许再建立其它逻辑磁盘。
扩展分区的概念则比较复杂,也是造成分区和逻辑磁盘混淆的主要原因。由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据,如果说逻辑磁盘就是分区,则系统最多只允许4个逻辑磁盘。对于具体的应用,4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念。
所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。
需要特别注意的是,由于主分区之后的各个分区是通过一种单向链表的结构来实现链接的,因此,若单向链表发生问题,将导致逻辑磁盘的丢失。

二、GPT 分区表

GPT的全称是Globally Unique Identifier Partition Table,即GUID分区表。

GPT分区表

它的推出是和UEFI BIOS相辅相成的,鉴于MBR的磁盘容量和分区数量已经不能满足硬件发展的需求,GPT首要的任务就是突破了2.2T分区的限制,最大支持18EB的分区。
而在安全性方面,GPT分区表也进行了全方位改进。在早期的MBR磁盘上,分区和启动信息是保存在一起的。如果这部分数据被覆盖或破坏,事情就麻烦了。相对的,GPT在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT还为这些信息保存了循环冗余校验码(CRC)以保证其完整和正确——如果数据被破坏,GPT会发觉这些破坏,并从磁盘上的其他地方进行恢复。

UEFI BIOS详解

UEFI的全称是Unified Extensible Firmware Interface,意即统一可扩展固件接口,它是基于EFI 1.10标准为基础发展而来,值得注意的是在UEFI正式确立之前,Intel就开始积极推进传统BIOS的升级方案,并最终确立了过渡方案EFI标准,直到2007年Intel将EFI标准的改进与完善工作交给Unified EFI Form进行全权负责,EFI标准则正式更名为UEFI。

三、硬盘分区方式

在 Linux 上分区软件有多种。

使用 fdisk 进行磁盘管理

fdisk /dev/sdb
    p:    print  显示分区信息
    n:    new    创建分区 
    d:    delete 删除分区 
    w:    write  保存并退出
    q:    quit   不保存退出

运用实例:安装一块新的硬盘,创建一个分区、格式化、并挂载到 /mnt

1.创建分区

fdisk
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-204, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-204, default 204): 
Using default value 204

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         204      208880   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

注意:fdisk 命令对磁盘的修改不是实时生效的,需要最后执行w进行执行修改。

2.通知系统磁盘分区表变化了

partprobe  /dev/sdb

3. 格式化 创建文件系统

mkfs.ext4  /dev/sdb1

4. 关闭磁盘分区的自我检查功能

tune2fs -i 0 -c 0  /dev/sdb1
    -i  -interval 关闭每180天自动检查
    -c  -count    关闭每挂载多少次 进行检查

5.挂载

# 临时挂载(即时生效)
mount /dev/sdb1 /mnt/
# 永久挂载(重启生效)
echo "/dev/sdb1  /mnt/  ext4 defaults 0 0" >>/etc/fstab

注意:在物理机中,强烈建议使用 UUID 写入 /etc/fstab 而不要使用设备名。

查看 硬盘 UUID 可用 lsblk 或者 blkid

root@material:~# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sr0                                                      
vda                                                      
├─vda1 ext4         fd830821-8c3b-4c41-9549-da6d368acdbe /
└─vda2 swap         dac8622b-4b9c-46b8-8aa5-56bc2d5485bb [SWAP]

root@material:~# blkid
/dev/vda1: UUID="fd830821-8c3b-4c41-9549-da6d368acdbe" TYPE="ext4" PARTUUID="000dcb5c-01"
/dev/vda2: UUID="dac8622b-4b9c-46b8-8aa5-56bc2d5485bb" TYPE="swap" PARTUUID="000dcb5c-02"

使用 parted 进行磁盘管理

1. 进入命令,输入 help 可查看完整帮助手册

警告:parted 命令对硬盘的修改即时生效,请谨慎操作。

# 进入命令行模式,指定想操作的硬盘。
parted /dev/sdb

2. 将MBR格式的磁盘格式化为GPT格式

mklabel gpt

3. 将整个磁盘化为一个分区,一般命名为 /dev/sdb1

mkpart primary 0 -1

4. 打印分区结果

print

5. 退出分区命令行模式

quit

6. 格式化分区

# 在 CentOS 7 (RadHat 7) 中根分区 `/` 默认使用 xfs ,速度更快,稳定性更好。
mkfs.xfs /dev/sdb1
# 也可以格式化为 ext4
mkfs.ext4 /dev/sdb1

7. 将格式化好的分区挂载(同上)

# 查看挂载情况
df -Th /mnt

附录:

系统自动挂载文件 /etc/fstab 说明

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/vda1 during installation
/dev/vda1    /               ext4    errors=remount-ro     0       1
# swap was on /dev/vda2 during installation
/dev/vda2    none            swap    sw                    0       0
设备名 挂载目录 文件系统 挂载参数 dump pass
/dev/sdb1 /data xfs defualts 0 0

说明:
DUMP:表示文件系统是否进行备份 1备份 0不备份
PASS:表示文件系统检查的顺序 1最先检查 2其次 0不检查


回复