注意:本文全部信息均来自于《鸟哥私房菜》第二章·第二节 磁盘分区 & 第七章·第一节 磁盘的分区-格式化-检验-挂载
第一部分进行基本的磁盘概念介绍,第二部分介绍硬盘分区的实操过程(GPT格式)
一、磁盘连接方式和设备名称
Linux中所有设备均是以文件的形式存在,存储设备通常以以下两种形式存在:
正常物理机器使用的磁盘名称:/dev/sd[a-p]
虚拟机环境中为了加速会使用:/dev/vd[a-p]
# 备注:SATA、USB、SAS磁盘接口均是使用SCSI模块进行驱动的,因此设备文件名称都是/dev/sd[a-p]格式
二、MBR(MS-DOS)和GPT磁盘分区表
磁盘构成:碟片、机械手臂、磁头、主轴马达
碟片:碟片上进行信息存储,分为扇区(Sector)和磁道(Track)。扇区的物理大小有两种:512字节和4K字节。
首个扇区:第一个扇区尤为重要,存储了整个磁盘的重要信息。早期信息存放为MBR(Master Boot Record);在2TB以上磁盘分区某些系统无法读取,因此有了GPT(GUID partition table)。
1、MBR(MS-DOS)分区表格式和控制
全称为Master Boot Record,主引导记录。早期Linux为了兼容Windows采用的处理启动引导程序和分区表的方法。旧的磁盘扇区都是512个 字节,共含有以下两种信息:
主引导记录(Master Boot Record):安装引导启动程序,共含有446字节;
分区表(partition table):记录整个硬盘分区状态,共含有64字节--只能有4组主要分区,每组有16个字节。
MBR有以下缺点:
无法使用2.2TB以上的磁盘容量;
MBR仅有一个分区,破坏后无法使用;
MBR内部引导程序之后446字节,无法放入更多。
2、GPT(GUID partition table)磁盘分区表
扇区定义使用逻辑区块地址(Logical Block Address, LBA)进行处理,每一个区块默认512字节。第一个LBA为LBA0,以此类推。
和MBR仅使用一个扇区512字节记录不同,GPT使用34个LBA区块记录分区信息(磁盘结尾的34个LBA区块用于备份,这个很骚气)。
具体的34个LBA的存储内容和用途如下:
LBA0(MBR兼容区块):446字节的启动引导程序 + 分区表特殊符号占位;
LBA1(GPT表头记录):记录分区表本身的位置与大小、校验码,同时记录了备份GPT分区(末尾)的位置,用于纠错。
LBA2-33(实际记录分区处):每个LBA可以记录4组分区记录,每一组记录占用128字节。则从LBA2到LBA33共由32个表,则有4*32=128组分区记录(128个Entry)。GPT在每组记录最后添加了64位来记载开始/结束扇区号码(64位寻址功能),则对于GPT中的单一分区而言,最大容量限制在:
管理工具汇总:fdisk不支持GPT,只能使用gdisk或parted。
启动引导程序:grub第一版不支持GPT,grub2以后才会支持。
启动的检测程序:BIOS和UEFI。
三、BOIS和UEFI启动检测程序
两者概念区分:
BIOS:是一个写入到主板上的一个固件(固件是写入到硬件上的一个软件程序),是计算机系统主动执行的第一个程序,使用汇编语言编写。BIOS可以搭配MBR/GPT启动。
UEFI(Unified extensible Firmware Interface, 统一可扩展固件接口):也称为UEFI BIOS,使用C语言编写。UEFI BIOS可以搭配GPT启动。
四、Linux安装时磁盘分区的选择(极其重要)
挂载概念-mount:利用一个目录当成进入点,将磁盘分区的数据防止在该目录下;进入该目录就可以读取该分区。
Linux安装过程的挂载:根目录一定要挂载到某个分区,其他目录按照要求挂载在不同分区即可。
初次使用建议:只需要划分"/"和“交换分区”即可,避免分区不够大造成的窘境。
五、磁盘的分区、格式化、检验与挂载
1、观察磁盘分区状态
共有以下三种方法。
$ lsblk
$ lsblk -ip /dev/vda
# list block device-列出所有磁盘列表,即所有存储设备.i-使用ASCII字符输出.p-列出设备完整文件名称。
$ blkid (sudo)
# 列出设备的UUID(全局唯一标识符)等参数,用于挂载或者使用设备和文件系统。
$ parted /dev/sda print
# 列出这个盘上的分区格式信息和文件系统
2、磁盘分区:gdisk/fdisk
操作分区的步骤:通过lsblk和blkid找到磁盘,再通过parted /dev/sd[a-p] print找出内部的分区表类型,最终决定使用gdisk或fdisk进行分区操作。
$ gdisk /dev/sda
# 进入分区命令行之后,可以通过?获取指令说明
注意:gdisk后只能接磁盘名称/dev/sda,而不是分区名称/dev/sda1。操作是对整个磁盘而言的。
常用指令如下:
p:输出目前磁盘的状态,打印分区表;
n:新增一个分区;分区号默认-->首个扇区位置默认-->结束扇区默认[可以采用+1G的方式定大小]-->Code设定[默认Linux文件系统8300 / swap为8200 / LVM为8E00]
d:删除一个分区;删除时通过分区号来定位分区
q:不管进行了什么操作,只要最后输入q即可不保存退出;
w:写入并且生效。
注意:键入w之后会提示有warning,在重启之后才会更新内核,载入新的GPT分区表。
$ cat /proc/partitions
# 重启之前不会显示新的分区
$ partprobe -s
# 手动更新Linux内核的分区表信息,运行之后再次输出上个命令即可显示更新的分区表。
3、磁盘格式化(创建文件系统)
分区完毕之后需要进行文件系统的格式化,命令为mkfs (make filesystem)。
mkfs.xfs /dev/sda1:还需要添加一堆配置,可以使用多个数据流来读写系统,agcount和CPU的内核数搭配。
mkfs.ext4 /dev/sda1:-b选项可以谁知区块的大小,有1K/2K/4K的容量,默认4K。
4、手动挂载
挂载点是目录,目录是进入磁盘分区(文件系统)的入口。需要注意以下三点:
1.单一文件系统不应当被重复挂载于不同目录中(一区不能对应多目录);
2.单一目录不应该重复挂载多个文件系统(一目录不能对应多区);
3.做为挂载点的目录原则上是空目录(非空目录挂载覆盖之后原文件会消失)。
挂载命令为mount,简要使用过程如下:
# 显示分区的UUID:
$ blkid /dev/sda1
# 进行挂载:
$ mount UUID="..." /data/file
# 检查挂载:
$ df /data/file
# 打印所有挂载信息
$ mount
5、启动自动挂载
使用cat /etc/fstab查看文件下的内容,共有以下六个字段:
$ cat /etc/fstab
[设备/UUID] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
# [设备/UUID]:可以填写分区的全称、UUID、文件系统的LABEL名称,建议UUID
# [挂载点]:就是个目录
# [文件系统]:写文件必须手动添加:sfs/ext4/vfat/reiserfs/nfs
# [文件系统参数]:挂载时的各种参数
# [dump]:备份方案,直接填0
# [fsck]:检验,直接填0