深入理解Linux磁盘的奥秘

当我们想在系统里增加一块硬盘的时候,要做以下这四步工作:

  1. 对磁盘进行分区
  2. 对新建的分区进行格式化,目的是为了创建系统可用的文件系统
  3. 对新建的文件系统进行检验
  4. 将新建的文件系统挂载到系统的目录树上

磁盘分区:fdisk

fdisk [-l] 设备名称

-l:加上这个参数会输出后面接的这个设备的所有分区的信息;如果后面不写设备名称,那么系统中所有设备的分区信息都会被列出来

PS:fdisk这个命令只是一系列磁盘分区功能的入口命令!

例子:给咱电脑的磁盘进行一下分区

//1。找到所有的磁盘设备的名字
[root@iZ28st035lsZ ~]# df
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/hda1             20307028   2666372  16592468  14% /

//2。对hda进行分区
[root@iZ28st035lsZ ~]# fdisk /dev/hda //这里设备名称不加数字!

The number of cylinders for this disk is set to 3343.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): 
//查看帮助
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition (常)
   l   list known partition types
   m   print this menu
   n   add a new partition (常)
   o   create a new empty DOS partition table
   p   print the partition table (常)
   q   quit without saving changes (常)
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit (常)
   x   extra functionality (experts only)
//显示分区表信息
Command (m for help): p

Disk /dev/hda: 21.4 GB, 21474836480 bytes
224 heads, 56 sectors/track, 3343 cylinders
Units = cylinders of 12544 * 512 = 6422528 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        3343    20963801   83  Linux
Partition 1 does not end on cylinder boundary.


Device:设备文件名字
Boot:是否为开机引导模块,Windows下C盘需要开机引导模块
Start,End:表示这个分区的开始柱面号与终止柱面号
Blocks:这个分区中block的数量,单位是1KB

注意:fdisk -l可以列出整个系统中所有磁盘的所有分区,如果有多个磁盘(比如插入了一块U盘),那么执行这个命令后,再选择p,结果是这样的: PS:也就是会显示两块这样的信息,分别代表两块磁盘中的分区情况

Disk /dev/hda: 21.4 GB, 21474836480 bytes
224 heads, 56 sectors/track, 3343 cylinders
Units = cylinders of 12544 * 512 = 6422528 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        3343    20963801   83  Linux
Partition 1 does not end on cylinder boundary.
----------------------------------------
Disk /dev/hda: 21.4 GB, 21474836480 bytes
224 heads, 56 sectors/track, 3343 cylinders
Units = cylinders of 12544 * 512 = 6422528 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        3343    20963801   83  Linux
Partition 1 does not end on cylinder boundary.

如果出现柱面号是以下情况:

//hda1的起始和结束柱面号是1-3343,而hda5的起始和结束柱面号是1-2000,那么说明hda5是属于hda1的一个逻辑分区,那么hda1就是扩展分区了。
  Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        3343    20963801   83  Linux
/dev/hda5   *           1        2000    20963801   83  Linux
  • 删除磁盘分区
fdisk /dev/hda //进入fdisk界面
Command (m for help): d //选择“删除分区“
Selected partition 1 //选择要删除的分区号
w (or) q //保存或离开

PS:若hda5是由hda4衍生出来的逻辑分区,如果把hda4删除,那么hda5也会随之消失。

  • 新增磁盘分区
//选择n,新建分区
Command (m for help): n
//选择新建主分区or扩展分区
Command action
   e   extended
   p   primary partition (1-4)
p //选择主分区
Partition number (1-4): 4 //选择分区号
First cylinder (1-834, default 1): //选择起始柱面号,就用默认值,按下回车即可
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-834, default 834): +512M//输入分区大小,+xxxM,+表示让系统自动找一个最接近xxxM大小的柱面

综上所述,一共有这几种情况:

  • 1-4号记录区域还有剩余,并且没有扩展分区 此时系统会让你挑选extended或primary,并且指定1-4之间的号码作为分区号。
  • 1-4号记录区域还有剩余,并且已有扩展分区 此时系统会让你挑选primary或logical,若选p则还需指定1-4之间的号码作为主分区的分区号;若选l则不需要指定号码,系统会自动指定逻辑分区的号码。
  • 1-4号记录区域没有剩余,且系统有扩展分区 系统不会让你挑选分区类型,直接进入逻辑分区中。

关于新建分区的一些注意点:

  • 按下w保存操作之后,系统还需要重启,如果不想重启可以执行命令partprobe,强制让内核重新找一次分区表。
  • root身份进行磁盘分区的时候,系统不能再有其他的用户正在使用系统!
  • SATA硬盘最多能支持到15号分区(即主分区+逻辑分区),IDE硬盘最多可以支持到63号分区。目前一般都是SATA硬盘。
  • fdisk这个命令无法处理2TB以上的磁盘分区。Ext3文件系统最大可支持16TB,但是fdisk这个命令最大只能支持2TB的磁盘。

磁盘的格式化

分区完毕之后就要进行格式化,格式化非常简单,使用mkfs(make file system)即可。

mkfs [-t 文件系统格式] 磁盘设备的文件名

-t后的文件系统格式就是让你指定将文件系统格式化成哪种文件系统。如ext2、ext3、vfat等。

PS:通过mkfs tab tab就可以查看本系统支持的所有文件系统了。

磁盘的检验:fsck

当系统运行出现问题导致文件系统发生错乱,此时就需要磁盘的检验。

fsck [-t 文件系统] [-ACay] 设备名称

注意:通常只有root用户,而且在文件系统有问题的时候才能进行这个操作,因为在正常情况下使用这个命令会对系统伤害很大。 此外,fsck在扫描的时候,有问题的数据会被放在lost+found这个文件夹中。所以正常情况下这个文件夹中是不应该有数据的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

rbd是否支持注入

引子 很多 OpenStack 与 Ceph 部署集成的文档都会告诉你,libivrt 的文件和密码注入是在 Ceph 上面是不支持的。需要使用下面的配置文件关...

1876
来自专栏Rainbond开源「容器云平台」

敲黑板 | 云帮日志那点事儿

1404
来自专栏一个会写诗的程序员的博客

13.9 SpringBoot集成Swagger2中遇到的问题13.9 SpringBoot集成Swagger2中遇到的问题

我们在使用SpringBoot集成Swagger2中,访问:http://127.0.0.1:8188/swagger-ui.html

663
来自专栏Java帮帮-微信公众号-技术文章全总结

springboot 入门教程(3)-运行原理、关键注解和配置

springboot 入门教程(3)-运行原理、关键注解和配置 摘要: 相信大家接触过springboot以后都觉得使用他搭建一个web很简单,但是为什么他就能...

3484
来自专栏L宝宝聊IT

Nagios监控系统

1393
来自专栏IT笔记

SpringBoot开发案例之配置静态资源文件路径

前言 SpringBoot本质上是为微服务而生的,以JAR的形式启动运行,但是有时候静态资源的访问是必不可少的,比如:image、js、css 等资源的访问。 ...

81510
来自专栏蓝天

HBase & thrift & C++编程

本文目的是介绍使用C++如何操作HBase。从HBase 0.94开始,HBase新增thrift2,本文只介绍和讨论thrift2相关的。hbase-1....

621
来自专栏Hadoop实操

HDFS添加 NFS Gateway 角色实例启动失败问题及解决办法

昨天登录公司测试集群的时候,发现HDFS存在告警信息,查看详细信息,发现 NFS Gateway 进程退出,尝试重启该角色实例,执行重启操作后,报如下异常:

1323
来自专栏开源优测

[接口测试 - 基础篇] 12 还是要掌握python日志管理模块的

python logging模块介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的...

3268
来自专栏xingoo, 一个梦想做发明家的程序员

Tomcat 6 --- 使用Jasper引擎解析JSP

熟悉JAVA web开发的朋友都知道JSP会被转换成java文件(预编译),然后编译成class使用,即按照JSP-->java-->class的过程进行编译...

1947

扫描关注云+社区