回炉重造七---磁盘存储和文件系统

1、磁盘结构

1.1 设备文件

1.1.1磁盘设备的设备文件命名

/dev/dev_file
/dev/sdx  #设备的类型:SAS/SATA/SCSI/IDE/USB
/dev/nvme0n$    #nvme协议硬盘,如:第一个硬盘:nvme0n1,第二个硬盘:nvme0n2

2、管理磁盘

  • 磁盘的分区
  • 创建文件系统
  • 挂载新的文件系统

2.1 磁盘分区

2.1.1 磁盘分区的作用

  • 优化磁盘I/O性能
  • 实现磁盘空间配额限制
  • 提高修复速度
  • 隔离系统和程序
  • 可以安装多个OS
  • 可以采用不同的文件系统

2.1.2 分区的方式

  • MBR(msdos) 磁盘的空间不能超过2T
  • GPT 对磁盘的空间没有要求

注意:工作中一般小于2T盘才会考虑采用MBR分区,超过2T的盘都会采用GPT分区

2.1.3 BIOS和UEFI

(1)BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是
UEFI启动。主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。系统硬件自检:如果系统硬件有故障,主板上的扬声器就会发出长短不同的“滴滴”音,可以简单的判断硬件故障,比如“1长1短”通常表示内存故障,“1长3短”通常
表示显卡故障

(2)是一种详细描述类型接口的标准。UEFI 相当于一个轻量化的操作系统,提供了硬件和操作系统之间的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRXXPLYp-1681740069065)(C:\Users\wengsq\AppData\Roaming\Typora\typora-user-images\1681650441181.png)]

2.2 管理分区

2.2.1 列出块设备

[root@wengsq ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
├─sda1   8:1    0   10G  0 part /boot
└─sda2   8:2    0   50G  0 part /
sr0     11:0    1  4.4G  0 rom

2.2.2 创建分区

fdisk   创建MBR分区
gdisk   创建GPT分区
parted  高级分区的操作

2.2.3 parted的使用方法

1、查看磁盘分区的格式
[root@wengsq ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt   #/dev/sdb是gpt方式分区
Disk Flags:

Number  Start  End  Size  File system  Name  标志

[root@wengsq ~]# parted /dev/sda print 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos  #msdos就是MBR方式分区
Disk Flags:

Number  Start   End     Size    Type     File system  标志
 1      1049kB  10.7GB  10.7GB  primary  xfs          启动
 2      10.7GB  64.4GB  53.7GB  primary  xfs
 
 2、给磁盘分区设置大小
 [root@wengsq ~]# parted  /dev/sdb mkpart prinmary 0% 10% 或者(0 10G)
 [root@wengsq ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
├─sda1   8:1    0   10G  0 part /boot
└─sda2   8:2    0   50G  0 part /
sdb      8:16   0   20G  0 disk
├─sdb1   8:17   0    2G  0 part  
└─sdb2   8:18   0 1007K  0 part
sdc      8:32   0    3T  0 disk
sr0     11:0    1  4.4G  0 rom

3、删除磁盘分区  (此命令是即使生效的,操作前一定要慎重再慎重)
[root@wengsq ~]# parted /dev/sdb rm 2
信息: You may need to update /etc/fstab.

[root@wengsq ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
├─sda1   8:1    0   10G  0 part /boot
└─sda2   8:2    0   50G  0 part /
sdb      8:16   0   20G  0 disk
└─sdb1   8:17   0    2G  0 part
sdc      8:32   0    3T  0 disk
sr0     11:0    1  4.4G  0 rom

parted创建磁盘分区的报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcBd3pFJ-1681740069066)(C:\Users\wengsq\AppData\Roaming\Typora\typora-user-images\1681733946760.png)]

注意:此报错并非是错误,而是因为设置磁盘分区的大小不合理导致的,一般是0% 100%,选择忽略报错依旧可以正常创建

2.2.4 分区工具gdisk和fdisk

  • gdisk:适用于磁盘分区是gpt类型的
  • fdisk:适用于磁盘分区是MBR(MSDOS)类型的
p  #分区列表
命令(输入 m 获取帮助):p

磁盘 /dev/sda:214.7 GB, 214748364800 字节,419430400 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00014dd8

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    20973567    10485760   83  Linux
/dev/sda2        20973568   125831167    52428800   83  Linux
#####################################################################################################
命令(输入 m 获取帮助):t  #更改分区类型
已选择分区 1
分区类型(输入 L 列出所有类型):1
已将分区“Microsoft basic data”的类型更改为“EFI System”
#####################################################################################################
命令(输入 m 获取帮助):n  #创建新的分区
分区号 (2-128,默认 2):2  #扩展分区2
第一个扇区 (34-41943006,默认 4194304):
Last sector, +sectors or +size{K,M,G,T,P} (4194304-41943006,默认 41943006):+5G  #分区的空间
已创建分区 2

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 736F1C2E-A84A-4815-AD83-89DAF3D4C97E


#         Start          End    Size  Type            Name
 1         2048      4194303      2G  EFI System      prinmary
 2      4194304     14680063      5G  Linux filesyste

命令(输入 m 获取帮助):w  #保存并退出
#####################################################################################################
命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 736F1C2E-A84A-4815-AD83-89DAF3D4C97E


#         Start          End    Size  Type            Name
 1         2048      4194303      2G  EFI System      prinmary
 2      4194304     14680063      5G  Linux filesyste

命令(输入 m 获取帮助):d  #删除磁盘分区2
分区号 (1,2,默认 2):2
分区 2 已删除

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 736F1C2E-A84A-4815-AD83-89DAF3D4C97E


#         Start          End    Size  Type            Name
 1         2048      4194303      2G  EFI System      prinmary

3、文件系统

3.1文件系统类型

Linux常用的文件系统类型:
1、ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分
区
2、ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
3、ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件
(16TB)、最大1EB的文件系统,以及速度的提升
4、xfs:SGI,支持最大8EB的文件系统
5、swap

3.2文件系统类型的特点

1、ext3
(1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
(2)Ext3目前只支持32000个子目录
(3)Ext3文件系统使用32位空间记录块数量和 inode数量
(4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块

2、ext4
(1)EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
(2)Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB
(3)理论上支持无限数量的子目录
(4)Ext4文件系统使用64位空间记录块数量和 inode数量
(5)Ext4的多块分配器支持一次调用分配多个数据块
(6)修复速度更快

3、xfs
(1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
(2)用优化算法,日志记录对整体文件操作影响非常小
(3)是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB
(4)能以接近裸设备I/O的性能存储数据

#注意:查看当前支持的文件系统
cat /proc/filesystems

3.3 文件系统的组成部分

  • 内核中的模块:ext4,xfs
  • Linux的虚拟文件系统:VFS
  • 用户空间的管理工具:mkfs

3.4 创建文件系统

1、设置文件系统的类型
mkfs.FS_type   /dev/DEVICE

FS_type可以是:
xfs/ext4/swap/ext3等

#实例:设置/dev/sdb1的分区文件类型为ext4
[root@wengsq ~]# mkfs.ext4 /dev/sdb1

2、给磁盘设置卷标(目的:卷标是为了区别每个盘所指定的一个名字,类似于window中C盘、D盘)
mkfs.FS_type /dev/DEVICE  -L "label"  (卷标可以自己设置,为了方便管理识别,一般设置为sd$number)
#实例:给/dev/sdb1设置卷标
3、blkid:查看磁盘分区的信息
[root@wengsq ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="B" UUID="8f6e196b-e8bf-4799-926c-f65ce2ec50ef" TYPE="ext4" PARTLABEL="prinmary" PARTUUID="7822baa7-79cd-4baf-b163-a91f413d3f0c"
4、tune2fs:修改设定ext系列文件系统参数的值,最常用的就是修改ext4文件系统的卷标
(1)-L #修改卷标
(2)-l #查看指定文件系统超级快的信息
[root@wengsq ~]# tune2fs /dev/sdb1 -L "b"
tune2fs 1.42.9 (28-Dec-2013)
[root@wengsq ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="b" UUID="8f6e196b-e8bf-4799-926c-f65ce2ec50ef" TYPE="ext4" PARTLABEL="prinmary" PARTUUID="7822baa7-79cd-4baf-b163-a91f413d3f0c"
5、dumpe2fs:显示ext文件系统的信息
[root@wengsq ~]# dumpe2fs /dev/sdb1|grep name
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   b

4、挂载文件系统

4.1 挂载–mount

4.1.1 挂载规则

  • 一个挂载点同一时间只能挂载一个设备(如:/data 同一时间只能挂载到/dev/sdb1设备下,无法挂载其他设备下)
  • 一个挂载点同时挂载多个设备时,仅只能看到最后一个设备的数据,其他设备都被隐藏起来了
  • 一个设备可以被挂载到多个挂载点

4.1.2 mount的用法

-t  fstype #指定要挂载的设备上的文件系统类型
-r  #只读挂载
-w  #读写挂载
-a  #自动挂载所有支持自动挂载的设备

4.2 卸载–umount

-f #强制卸载挂载

5、磁盘常见工具

5.1 df和du

1、df #查看文件系统空间实际的使用情况  
常用选项:
-H  #显示单位
-T  #显示文件系统
-i  #查看磁盘的节点数

2、du #查看某目录总体空间实际占用状态
-h #显示单位
-s #统计总数

注意: du和df的区别
(1)统计的范围不同
df 是从总体上统计系统各磁盘的占用情况,不能统计具体的文件夹或文件的大小。 du
既可以从总体上统计,又可以统计具体的某个文件夹或文件的大小。
(2)计算方式不同,计算速度不同
df 通过文件系统来快速获取空间大小的信息,速度快,效率高
du通过逐级进入指定目录的每一个子目录,逐个计算每个文件大小并相加,最终显示出来。 所以计算速度慢,当文件目录较多文件较大时要等很久很久!!而且因为要进入每个子目录计算文件大小,如果当前用户对某些文件/夹没有访问权限时,无法进行计算。
(3)计算结果的差异
df 可以获取已经删除的文件。
由于df是通过文件系统来获取空间大小的,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件。 所以当一个文件刚删除清空没完全释放时,df 仍会把它计算在内。(当你删除一个大文件前后可以分别用df 命令查看一下,刚删除时还在占用磁盘空间) du 只能看到当前存在的、没有被删除的文件。他计算的大小就是当前他认为存在的所有文件大小的累加和。 当文件系统也确定删除了该文件后,这时候du与df 的结果就一致了。所以在这一点上,可以说du 计算更精确,也可以说df 计算有延迟,根据个人情况使用就行。

5.1.1 df和du的面试题

dfdu 区别,什么时候df >du
空分区
什么时候df < du?
目录内挂载有其它分区时的情况
当删除文件但不释放空间时,有什么不同?
du 查看文件空间释放,df不释放

所以当一个文件刚删除清空没完全释放时,df 仍会把它计算在内。(当你删除一个大文件前后可以分别用df 命令查看一下,刚删除时还在占用磁盘空间) du 只能看到当前存在的、没有被删除的文件。他计算的大小就是当前他认为存在的所有文件大小的累加和。 当文件系统也确定删除了该文件后,这时候du与df 的结果就一致了。所以在这一点上,可以说du 计算更精确,也可以说df 计算有延迟,根据个人情况使用就行。


#### 5.1.1  df和du的面试题

```bash
df 和 du 区别,什么时候df >du
空分区
什么时候df < du?
目录内挂载有其它分区时的情况
当删除文件但不释放空间时,有什么不同?
du 查看文件空间释放,df不释放

这部内容还有个raid重点没总结,写累了,不想写,后面总结完后再补上!晚安!

你可能感兴趣的:(linux,运维)