服务器磁盘与文件系统知识体系结构
磁盘的物理组成:圆形的磁盘盘,机械手臂,与在机械手臂上的磁盘读取头,主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/defc9b4309ff015c7902a6f354d956fc.png)
磁盘主要存储数据的是磁盘盘,磁盘盘组成:
磁盘的文件名
磁盘的物理组成:
圆形的磁盘盘
机械手臂,与在机械手臂上的磁盘读取头
主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据
如下图所示:
1、扇区(sector)是最小的物理存储单位,有512bytes和4K两种格式
2、将扇区组成一个圆是磁柱
3、最小分区单位通常为扇区
4、磁盘分区表主要有两种格式,一种是限制较多的MBR分区,一种是GPT格式
5、MBR分区中,第一个扇区最重要,主要存放开机区的MBR和分区表
6、GPT分区表除了分区数量扩充较多之外,支持的磁盘容量超过2TB
文件系统
权限和属性数据存放在inode中,实际数据存放在data block中,文件系统的整体信息放在
superblock中。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7b0e5ebc884070e526157ead54aa4c23.png)
上面的浅蓝色部分为inode,下面的蓝色部分为block部分,假设某一个文件的属性信息存在inode,而这个inode中记录了数据的实际存放地址block中,此时操作系统就能够根据这个来排列磁盘的阅读顺序,读取数据。
机械磁盘外部组成及内部组成原理
磁盘主要由盘体,控制电路和接口部件组成,盘体就是一个密封,封装了多个盘片的腔体;控制电路包含硬盘
BIOS,主控芯片和硬盘缓存等单元;接口部件包含电源、数据接口主从跳线等。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cca576ad4f0f48df8c90aa93f7aa0862.png)
盘面platter
硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side),即第1个盘片的正面称为0面,反面称为1面;第2
个盘片的正面称为2面,反面称为3面…依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘面的正面的磁头称为0磁头,背面称为1磁头;第二个盘片正面的磁头称为2磁头,背面称为3磁头,以此类推。盘面数和磁头数是相等的。
磁道track
每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为
磁道(Track),每个盘面可以划分多个磁道。关机时磁头停留在硬盘的着陆区(Landing Zone),这个着陆区以前是位于离盘心最近的区域,不存放任何数据。
扇区sector
根据硬盘规格的不同,磁道数可以从几百到成千上万不等。每个磁道上可以存储数KB的数据,但计算机并不需
要一次读写这么多数据。在这一这基础上,又把每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位,每个扇区可存储128×2N次方(N=0,1,2,3)字节的数据。
柱面Cylinder
柱面其实是我们抽象出来的一个逻辑概念,前面说过,离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,
3磁道…,不同面上相同磁道编号则组成了一个圆柱面,即所称的柱面(Cylinder)。这里要注意,硬盘数据的读写是按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始进行操作,依次向下在同一柱面的不同盘面(即磁头上)进行操作,只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。
磁盘分区核心命令介绍
命令名 | 作用 |
---|
fdisk-a | toggle a bootable flag #设置启动分区 |
fdisk-b | edit bsd disklabel #编辑分区标签 |
fdisk-c | toggle the dos compatibility flag |
fdisk-d | delete a partition #删除一个分区 |
fdisk-l | list known partition types #列出分区类型 |
fdisk-m | print this menu #输出帮助信息 |
fdisk-n | add a new partition #建立一个新的分区 |
fdisk-o | create a new empty DOS partition table #创建一个新的空白DOS分区表 |
fdisk-p | print the partition table #打印分区表 |
fdisk-q | quit without saving changes #退出不保存设置 |
fdisk-t | change a partition’s system id #改变分区的ID |
fdisk-u | change display/entry units #改变显示的单位 |
fdisk-v | verify the partition table #检查验证分区表 |
fdisk-w | write table to disk and exit #保存分区表 |
文件系统管理工具命令
命令 | 作用 |
---|
mke2fs-t | {ext2ext3ext4}:指明要创建的文件系统类型 |
mke2fs-b | {102420484096}:指明文件系统的块大小; |
mke2fs-L | LABEL:指明卷标; |
mke2fs-j | 创建有日志功能的文件系统ext3 |
mke2fs-i | bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode; |
mke2fs-N | 直接指明要给此文件系统创建的inode的数量; |
mke2fs-m | 指定预留的空间,百分比; |
命令 | 作用 |
---|
tune2fs | 查看或修改ext系列文件系统的某些属性 |
tune2fs-l | 查看超级块的内容;修改指定文件系统的属性: |
tune2fs-j | ext2 --> ext3; |
tune2fs-L | LABEL:修改卷标; |
tune2fs-m | 调整预留空间百分比; |
tune2fs-O | [^]FEATHER:开启或关闭某种特性 |
命令 | 作用 |
---|
resize2fs | device [size]调整ext2\ext3\ext4文件系统的大小 |
resize2fs-d | 打开resize2fs调试特性 |
resize2fs-f | 强制执行 |
resize2fs-F | 执行之前刷新文件系统缓冲区 |
命令 | 作用 |
---|
e2fsck | 磁盘修复 检查时先卸载 |
e2fsck-a: | 检查 partition,如发现问题会自动修复。 |
e2fsck-b | 设定 superblock 位置。 www.2cto.com |
e2fsck-B size | 指定 size 作为区块大小。 |
e2fsck-c: | 检查 partition 是否有坏轨。 |
e2fsck-C file | 将检查结果储存到 file。 |
e2fsck-d | 输出 e2fsck debug 结果。 |
e2fsck-f: | e2fsck 预设只会对错误的文件系统检查,加上 -f 是强制检查。 |
e2fsck-F | 在检查前将硬盘的 buffer cache 清空,避免发生错误。 |
e2fsck-l list | 记录了坏轨区块加入 list 中。 |
e2fsck-d | 打印 e2fsck 的 debug 结果。 |
e2fsck-f | 强制检查。 |
e2fsck-n | 以 (read-only) 开启档案系统 |
e2fsck-p | 关闭互动模式,如有问题自动修复,等同 -a。 |
e2fsck-v | 显示详细报告。 |
e2fsck-y | 启用使用者互动模式。 |
命令 | 作用 |
---|
fsck | 检查与修复文件系统,可以同时检查一个或者多个 |
fsck-t : | 给定文件系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数 |
fsck-s | 依序一个一个地执行 fsck 的指令来检查 |
fsck-A | 对/etc/fstab 中所有列出来的 partition 做检查 |
fsck-C | 显示完整的检查进度 |
fsck-d | 列印 e2fsck 的 debug 结果 |
fsck-p | 同时有 -A 条件时,同时有多个 fsck 的检查一起执行 |
fsck-R | 同时有 -A 条件时,省略 / 不检查 |
fsck-V | 详细显示模式 |
fsck-a | 如果检查有错则自动修复 |
fsck-r | 如果检查有错则由使用者回答是否修复 |
磁盘挂载等相关核心工具
命令 | 作用 |
---|
mount | [-o options] device dir |
mount-r | readonly,只读挂载; |
mount-w | read and write, 读写挂载; |
mount-n | 默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性; |
mount-t vfstype | 指明要挂载的设备上的文件系统的类型,此时mount会通过blkid来判断要挂载的设备的文件系统类型; |
mount-L LABEL | 挂载时以卷标的方式指明设备;mount -L LABEL dir |
mount-U UUID | 挂载时以UUID的方式指明设备;mount -U UUID dir |
命令 | 作用 |
---|
lsof abc.txt | 显示开启文件abc.txt的进程 |
lsof -c abc | 显示abc进程现在打开的文件 |
lsof -c -p | 1234 列出进程号为1234的进程所打开的文件 |
lsof -g gid | 显示归属gid的进程情况 |
lsof +d | /usr/local/ 显示目录下被进程开启的文件 |
lsof +D | /usr/local/ 同上,但是会搜索目录下的目录,时间较长 |
lsof -d 4 | 显示使用fd为4的进程 |
lsof -i | 用以显示符合条件的进程情况 |
1.列出所有打开的文件:
#lsof
备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
2. 查看谁正在使用某个文件
#lsof /filepath/file
3.递归查看某个目录的文件信息
#lsof +D /filepath/filepath2/
备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
4. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法
#lsof | grep ‘/filepath/filepath2/’
5. 列出某个用户打开的文件信息
#lsof -u username
备注: -u 选项,u其实是user的缩写
6. 列出某个程序所打开的文件信息
#lsof -c mysql
备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比
第二种方法要少打几个字符了
7. 列出多个程序多打开的文件信息
#lsof -c mysql -c apache
8. 列出某个用户以及某个程序所打开的文件信息
#lsof -u test -c mysql
9. 列出除了某个用户外的被打开的文件信息
#lsof -u ^root
备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
10. 通过某个进程号显示该进行打开的文件
#lsof -p 1
11. 列出多个进程号对应的文件信息
#lsof -p 123,456,789
12. 列出除了某个进程号,其他进程号所打开的文件信息
#lsof -p ^1
13 . 列出所有的网络连接
#lsof -i
14. 列出所有tcp 网络连接信息
#lsof -i tcp
15. 列出所有udp网络连接信息
#lsof -i udp
16. 列出谁在使用某个端口
#lsof -i :3306
17. 列出谁在使用某个特定的udp端口
#lsof -i udp:55
特定的tcp端口
#lsof -i tcp:80
18. 列出某个用户的所有活跃的网络端口
#lsof -a -u test -i
19. 列出所有网络文件系统
#lsof -N
20.域名socket文件
#lsof -u
21.某个用户组所打开的文件信息
#lsof -g 5555
22. 根据文件描述列出对应的文件信息
#lsof -d description(like 2)
23. 根据文件描述范围列出文件信息
#lsof -d 2-3
命令 | 作用 |
---|
du | 显示每个文件和目录的磁盘使用空间文件的大小。 |
du-a | 显示目录中文件的大小 单位 KB 。 |
du-b | 显示目录中文件的大小,以字节byte为单位。 |
du-c | 显示目录中文件的大小,同时也显示总和;单位KB。 |
du-k、-m | 显示目录中文件的大小,-k 单位KB,-m 单位MB. |
du-s | 仅显示目录的总值,单位KB。 |
du-h | 以K M G为单位显示,提高可读性~~~(最常用的一个~也可能只用这一个就满足需求了) |
命令 | 作用 |
---|
df | 显示磁盘分区上可以使用的磁盘空间 |
df-a | 查看全部文件系统,单位默认KB |
df-h | 使用-h选项以KB、MB、GB的单位来显示,可读性高~~~(最常用) |