1 硬盘结构
1.1 硬盘的物理结构
1.1.1 硬盘的分类
- 机械硬盘:靠磁头转到找数据 慢 便宜
- 固态硬盘:靠芯片去找数据 快 贵
// 0是机械、1是固态。机械硬盘因为便宜,目前还是主流,所以今天主要讲机械硬盘。
名词术语:
- 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据(扇区越多容量越大) 扇区是存放数据的最小单位 512字节
- 磁道:同一盘片不同半径的同心圆
- 柱面:不同盘片相同半径构成的圆(柱面和磁道数量相同)
// 数据放在内圈 比放在外圈,读取更快。
1.1.2 磁盘接口类型
磁盘接口类型 决定了 数据传输的快慢。
常见接口类型:
- IDE 早期的,已经被淘汰
- SCSI 也比较慢
- SATA 目前主流的是SATA和SAS
- SAS sas可以用在sata,但sata不能用在sas上。
- 光纤通道
2 分区
2.1 分区方式
- MBR 主引导记录:目前主流
- GPT
分区方式分为MBR和GPT。其中二者的区别是:MBR只支持2T以下 ,共4分区;GPT可以支持2T以上 ,共128分区。
2.2 MBR分区表
mbr 位于磁盘的第一个扇区,主要作用为:
- 主引导程序,会协助硬件找到操作系统 大小是446字节
- 分区表,明确分区范围 大小是64字节,有4个分区记录区,每个分区记录区占16个字节。
- 最后还有2字节的结束语。
Linux中将硬盘、分区等设备均表示为文件。
/dev/hda5 拆解:
dev #硬件存放在dev文件夹下面
h代表接口类型,为IDE设备,已经被淘汰,目前主流是Sda1或者Sda2
d代表磁盘 disk
a代表硬盘的顺序,为第一块磁盘,依次是a b c d e...
5代表分区的顺序号,为第5个分区
2.2.1 MBR分区类型
- 主分区:可以直接使用 id范围是1-4
- 扩展分区:(有了扩展分区可以超过四个分区):不可以直接使用,因为不是真正的分区,是逻辑分区的分区表,id范围也是1-4
- 逻辑分区:可以直接使用,逻辑分区的空间必须从扩展分区中得到,id范围从5开始。
2.3 分区的优缺点
2.3.1 优点:
- 优化I/O性能 读写
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
2.3.2 缺点:
- 必须是连续的空间
- 无法扩容
3 文件系统
文件系统就是管理文件的系统,需要安装在磁盘上。
3.1 文件系统
3.1.1 XFS文件系统(重点!!!)
- 存放文件和目录数据的分区
- 高性能的日志型文件系统
- centos 7 系统中默认使用的文件系统
最大支持8EB的文件系统,1EB=1024TB
3.1.2 swap 分区
为linux系统建立交换分区。
当内存不足时,将硬盘的空间转换成内存使用。
当内存不足时,将硬盘空间当成内存使用。
关闭swap分区:swapoff -a [设备名]
开启swap分区:swapon -a [设备名]
3.1.3 NTFS
windows默认的,单个文件最大64G
3.1.4 EXT4
centos 6 系统默认,最大1EB的文件系统,足够使用。
3.1.5 JFS
这个文件系统非常好,但是需要付费使用。
//linux中经常使用的是:xfs和ext4
3.2 文件系统修复
xfs_repair 命令
注意:修复之前,一定要先 解除挂载。
4 分区工具
4.1 fdisk
推荐2T及以下分区使用
fdisk除了分区,还可以查看磁盘。
| 命令 | 功能描述 |
|---|---|
| fdisk -l | 查看所有磁盘分区信息 |
| fdisk -l /dev/sdb | 查看sdb磁盘分区的信息 |
| fdisk 设备名(设备名必须是一整块磁盘) | 对设备进行分区 |
| /dev/sdb | 一整块的磁盘 |
| /dev/sdb1 | sdb磁盘的分区1 |
| 命令 | 全称 | 功能描述 |
|---|---|---|
| n | add a new partition | 新建分区 |
| w | write table to disk and exit | 写入到磁盘,保存并退出 |
| d | delete a partition | 删除分区 |
| t | change a partition's system id | 改变分区系统id |
| q | quit | 退出 |
| p | 打印当前的分区列表 | |
| ctrl+退格 | 退格 |
fdisk分区步骤
fdisk /dev/sdb #进入交互界面
n 新建 #有两种分区类型,默认是p。 primary是主分区、extended是扩展分区
1 #分区区号,分区号1-4,默认是1
+size{K,M,G} 比如 +5G , #设置分区大小
p #打印当前分区列表
w #保存并退出
4.2 gdisk
全支持,推荐2T以上分区使用。
// 为什么推荐使用fdisk和gdisk?因为这两个分完区不立即生效,有容错的机会。
注意:gdisk命令、选项等与fdisk一模一样。
4.3 parted
全支持,但是不推荐使用,因为是即时生效,分区完立马生效,没有后悔的余地。
分区实验:
- 首先,在虚拟机中新建硬盘。完成下面123步骤后,其他都是下一步。
- 在xshell中,对新建的硬盘进行分区。(新建的第二块就是sdb、第三块就是sdc…)
磁盘分区操作:
cd /dev
fdisk /dev/sdb
n #新建分区
p或e #选择主分区或扩展分区,当扩展分区使用后,也会出现p或l,l是逻辑分区。
#默认分区的区号,从1开始,逻辑分区是从5开始
last扇区 +5G #填写分区大小,数字任意填,但不能大于总磁盘内存。
p #这个p是print打印,查看分区
w #保存
d #删除分区
lsblk 查看磁盘分区信息
- 建好后,用lsblk 命令查看是否识别分区。未识别的话,可以输入partprobe刷新;不行的话,可以用reboot命令重启。
磁盘命令:
| 命令 | 功能描述 |
|---|---|
| lsblk | 显示磁盘信息(块设备),显示的比较详细。 |
| partprobe | 刷新分区表(分完区后,系统未识别) |
| reboot | 重启 |
| blkid | 查看设备的唯一标识符,也就是uuid |
| fdisk | 分区 和 查看分区情况 |
| gdisk | 分区 |
5 格式化
格式化命令 mkfs 后面可以是-t 也可以是 .
mkfs -t 指定分区类型 分区路径
mkfs . 指定分区类型 分区路径
#分区类型主要是xfs和ext4, 如何查看分区类型?df -T或者lsblk -f
mkfs -t xfs /dev/sdb1 #将sdb1格式化为XFS文件系统
6 挂载
把文件夹和硬件做关联。注意:mount挂载只能挂载文件夹(目录),不能挂载文件。
命令语法:
mount [-t 类型] 设备名 挂载点
mount -o loop ISO镜像文件 挂载点目录
设备device:指明要挂载的设备
- 设备文件/设备名:例如:/dev/sdb2
- UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e',设备的唯一标识符
- 伪文件系统名称:proc, sysfs, devtmpfs, configfs
关于挂载的命令:
mount 显示所有挂载情况
umount 解挂载 #注意不要在挂载的文件夹下解挂载,
## umount用法:umount+文件路径,比如:umount /dev/sdb2
remount 重新挂载
mountpoint 挂载点
findmnt 查看挂载点
df 查看挂载, 磁盘剩余量 disk free
mount选项
| 选项 | 功能描述 |
|---|---|
| -o | 只读 指定选项 |
| -a | 刷新/测试,只在fstab下生效 |
| ro | 只读 readonly |
| rw | 读写 readwrite |
| loop | 使用镜像文件 |
mount -o ro,remount /dev/sdb2 /opt
#多个选项之间,用","连接
挂载规则:
- 一个挂载点可以挂载多个,但只能看到最后一个设备的数据,前面的设备都会被隐藏。(用df命令查看)
- 一个挂载点同一时间 只能挂载一个设备
- 尽量挂载已存在的空文件夹,不然挂载点下原有文件可能丢失或被隐藏。
异步模式和同步模式:
async 异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
sync 同步模式,内存更改时,同时写磁盘,安全,但效率低下
无法解挂载
fuser -km 这个命令慎用!
自动挂载(永久挂载)
注意:自动挂载不要用文件名挂载设备,一定要用uuid挂载。
/etc/fstab 默认的自动挂载文件
vim /etc/fstab 打开自动挂载界面,编辑完用mount -a 测试一下。
1、设备名自动挂载:
/dev/sdb1 /mnt xfs defaults 0 0
第 1 字段:设备名或设备卷标名。
第 2 字段:文件系统的挂载点目录的位置。
第 3 字段:文件系统类型,如 XFS、Swap 等。
第 4 字段:挂载参数,即mount 命令“-o”选项后可使用的参数。例如,defaults、rw、ro、noexec 分别表示默认参数、可写、只读、禁用执行程序。
2、uuid自动挂载:
UUID=e0b714cd-c33e-42b2-a051-1e1f3333b4b7 /data/aa xfs defaults 0 0拆分:
第 1 字段:UUID=e0b714cd-c33e-42b2-a051-1e1f3333b4b7 设备名 #设备名用uuid 比用/dev/sdb2效果更好,因为uuid始终是唯一的,而/dev/sdb2设备名可能会因为前面的被删掉而被动替换
第 2 字段:/data/aa 挂载点
第 3 字段:xfs 分区类型
第 4 字段:defaults 权限 挂载参数
第 5 字段:第一个0 是不备份,第二个0 是不自检。
3、解挂:
umount 设备名 或 挂载点
解除挂载时,可使用设备名,也可以使用挂载点。
小拓展: 如何查询复制uuid?
可以用blkid命令查询
blkid+设备名 #可以一对一查询uuid
.!blkid +设备名 #在vim编辑器的末行模式下,输入该命令,可以将uuid信息调出来。注意不要加引号。