侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Linux基础(31)之磁盘管理

zze
zze
2019-10-22 / 0 评论 / 0 点赞 / 650 阅读 / 5271 字

设备文件

在 Linux 中一切皆文件,磁盘在 Linux 系统中的表现形式就是一个设备文件。
设备文件大致可分为两类:

  • 块设备:Block,存取单位为“块”,如硬盘;
  • 字符设备:char,存取单位为“字符”,如键盘;

设备文件的作用是用来关联至一个设备的驱动程序,进而能跟与之对应的硬件设备进行通信。
每一个设备在内核级别都是靠一个设备号码来标识的,而设备号码又可分为如下两类:

  • 主设备号:major number,标识设备类型;
  • 次设备号:minor number,表示同一类型下的不同设备;

在 Linux 系统中,几乎所有的硬件装置文件都在 /dev 这个目录内,查看该目录非普通文件:

image.png

可以看到,在文件为设备文件时,对于普通文件的大小列位置表现为 num1,num2,而这里的 num1 其实就是描述的是该设备文件对应的主设备号,num2 则是次设备号。主设备号相同次设备号不同则表示是同一类设备下不同的设备。

任何一个设备文件都只有元数据,没有数据。。。

磁盘设备文件的命名

对于不同接口的硬盘设备在 Linux 系统中对应的设备文件的命名规则是不同的,如下:

  • IDE:以 /dev/hd 开头,在 CentOS 6 及以后也改为 /dev/sd[a-p] 开头;
  • SCSI、SATA、SAS、USB:以 /dev/sd[a-p] 开头;

以 CentOS 7 为例,对于多个不同硬盘设备的命名规则为 /dev/sd[a-p],如 sdasdbsdc;而对于相同硬盘下的不同分区的命名规则为 /dev/sd[a-p]/[1-n],如 /dev/sda 下有三个分区,分别名为 sda1sda2sda3

磁盘的分区

首先我们要知道磁盘主要由磁碟盘、机械手臂、磁碟读取头与主轴马达所组成, 而数据的写入其实是在磁碟盘上面。

  • 磁道:以主轴为中心多个磁碟盘上可划分出多个同心圆,由外而内磁碟盘上的同心圆到同心圆之间的圆环叫做磁道,磁道就是存储数据的地方;
  • 扇区:磁道上的一个扇形区域就叫做磁区,也叫扇区;
  • 磁柱:多个磁碟盘在相同区域的圆环组成磁柱,也叫柱面;

image.png

磁盘分区的最小单位为磁柱(cylinder),也叫柱面。
磁盘通常预留了第一个扇区,这个扇区通常是 512 bytes 的大小,开机管理程序记录区和分区表就存在于这个扇区:

  • 主要启动记录区(Master Boot Record,MBR):可以安装开机管理程序的地方,这个程序也通常叫做引导加载器(boot loader),有 446 bytes。
  • 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes。

在这个大小为 64 bytes 的分区表中,其中每 16 bytes 可用来标识一个分区,所以默认情况下一个磁盘最多只能出现 4 个分区。

image.png

那么如果想要有 4 个以上的分区该怎么实现呢?
由于分区表就只有 64 bytes 而已,最多只能容纳 4 笔分区的记录,这 4 个分区的记录可分为主要(Primary)和扩展(Extended)分区槽:

  • 主要分区槽:用来存放真正的分区信息,比如一个分区从硬盘中何处开始、到何处结束;
  • 扩展分区槽:该分区槽不用来存放分区信息,而是用来指向另一存放分区信息的地址,从而可以实现 4 个以上的分区;

由扩展分区槽所引导的每个分区叫做逻辑分区,而扩展分区槽自己占的 16 bytes 的分区就叫做扩展分区,一个扩展分区可引导多个逻辑分区。

  • 主要分区和扩展分区的编号范围为 1-4,如 /dev/sda1/dev/sda2/dev/sda3/dev/sda4
  • 而扩展分区所指向的逻辑分区的编号从 5 起始,如 /dev/sda5/dev/sda6、...、/dev/sdan

常用分区管理工具

fdisk

对单块硬盘来讲,fdisk 最多只能管理 15 个分区。
使用 fdisk -l 可查看当前系统所有的分区信息:

image.png

也可也可指定硬盘设备文件来查看指定硬盘的分区信息:

image.png

如果要对某硬盘进行分区管理,则可直接使用 fdisk <硬盘设备文件> 进入 fdisk 交互式命令行状态,如:

image.png

子命令

  • p:显示已有分区;
  • n:创建新分区;
  • d:删除分区;
  • w:写入磁盘并退出;
  • q:放弃更新并退出;
  • m:获取帮助;
  • l:列出所有分区类型 id 信息;
  • t:调整分区类型;

parted

parted 可以用来管理容量大小在 2T 以上的磁盘,常用分区表格式为 GPT,最多支持 128 个主分区。
parted 也可以通过 print 子命令来查看指定磁盘设备的分区信息:

image.png

如果要对某硬盘进行分区管理,则可直接使用 parted <硬盘设备文件> 进入 parted 交互式命令行状态,如:

image.png

子命令 h 可查看帮助:

image.png

例:现有 20G 大小的 /dev/sdc 磁盘设备,修改其分区表类型为 GPT,将其分为两个 5G 和一个 10G 容量的主分区。

image.png

注意:parted 命令行下的操作都是直接同步到磁盘,谨慎操作。

查看内核是否已识别新的分区

可使用 cat /proc/partitions 来查看内核是否识别新的分区:

[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   20971520 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
  11        0    1048575 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1

如果新加的分区未出现在该文件中,则可使用 partx -a 来让内核重新扫描硬盘的分区,也可以使用 partx -a /dev/DEVICE 来读取指定硬盘的分区。
除此之外,还可使用 -n 选项指定内核重新加载指定硬盘中指定编号的分区,如加载 /dev/sda 中分区编号为 4-6 的分区则使用 partx -a -n 4:6 /dev/sda
还有一个 kpartx 命令,它的作用与 partx 大致相同都是添加分区映射,只是它有一个额外的选项 -f 可以用来指定强制添加。

在 CentOS 5 中直接使用 partprobe [dev/DEVICE] 来添加磁盘分区映射,不指定设备时表示扫描所有硬盘。

0

评论区