深入理解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 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

Web应用手工渗透测试——用SQLMap进行SQL盲注测试

作者 Taskiller 简介 本文主要关注SQL注入,假设读者已经了解一般的SQL注入技术,在我之前的文章中有过介绍,即通过输入不同的参数,等待服务器的反应,...

24210
来自专栏Java技术栈

Spring Boot - Profile不同环境配置

Profile是什么 Profile我也找不出合适的中文来定义,简单来说,Profile就是Spring Boot可以对不同环境或者指令来读取不同的配置文件。 ...

3594
来自专栏云原生架构实践

JHipster生成单体架构的应用示例

因为这个例子是生成单体架构的应用,所以这里选择默认选项Monolithic application,也就是单体架构的应用。

3542
来自专栏漏斗社区

Java代码审计入门篇

Java这个语言相对于PHP来说还是比较复杂的,所以一开始接触到Java源码审计的时候会遇到一些关于环境和配置上一些困难,本文记录斗哥在开始去审计Java代码的...

1713
来自专栏惨绿少年

KICKSTART无人值守安装

1.1 环境说明 [root@test ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [roo...

2440
来自专栏散尽浮华

SCP和Rsync远程拷贝的几个技巧

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加...

9327
来自专栏大前端_Web

cordova 安卓开发环境搭建(Mac OSX

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

1154
来自专栏Ryan Miao

Linux用户和组管理,添加修改用户,添加修改组,加入组,移除组

1501
来自专栏Java后端技术

带你深度解析Maven

  Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工...

711
来自专栏你不就像风一样

Gradle构建工具简明教程(IDEA篇)

GRADLE_USER_HOME 的作用是让其他程序检测到本地.gradle文件夹的位置,

791

扫码关注云+社区