深入理解Linux磁盘的奥秘
时间:2022-05-03
本文章向大家介绍深入理解Linux磁盘的奥秘,主要内容包括磁盘分区:fdisk、磁盘的格式化、磁盘的检验:fsck、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
当我们想在系统里增加一块硬盘的时候,要做以下这四步工作:
- 对磁盘进行分区
- 对新建的分区进行格式化,目的是为了创建系统可用的文件系统
- 对新建的文件系统进行检验
- 将新建的文件系统挂载到系统的目录树上
磁盘分区: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这个文件夹中。所以正常情况下这个文件夹中是不应该有数据的。
- 用最简单的图文带你看懂区块链
- 微信小游戏正式上线!小程序的一个类目,即点即玩!
- CentOS7安装GitLab、汉化、邮箱配置及使用
- Bootstrap源码分析之transition、affix
- Redis从单机到集群,一步步教你环境部署以及使用
- C++内存管理学习堆和栈
- 人人公司宣布收购美国卡车社区平台Trucker Path
- Mysql字符串截取总结:left()、right()、substring()、substring_index()
- c++程序的内存格局
- SpringMVC中利用@InitBinder来对页面数据进行解析绑定
- 门罗盘点:2017年那些AI击败人类的瞬间
- sizeof和strlen的区别
- mysql索引使用技巧及注意事项
- 条码支付新规,微信支付宝还好么?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++核心准则CP.100:不要使用无锁编程方式,除非绝对必要
- 神了,Excel的这个操作我今天才知道
- DataFrame(7):DataFrame运算——逻辑运算
- 高性能网关设计实践
- LASSO回归姊妹篇:R语言实现岭回归分析
- 学了这个,三歪再也不想写各种setter了
- 使用 GitLab CI 与 Argo CD 进行 GitOps 实践
- Java 语言中十大“坑爹”功能!
- 面试:说说啥是一致性哈希算法?
- 问一下,线程池里面到底该设置多少个线程?
- 进程和线程基础知识全家桶,30 张图一套带走
- Python-matplotlib 学术柱状图绘制
- 为什么要避免大事务以及大事务如何解决?
- [即时通信IM]群@消息如何实现?
- 利用PySpark对 Tweets 流数据进行情感分析实战