linux存储与磁盘管理相关
整理自linux就该这么学
1. linux 目录
1.1 目录树
Linux系统中的一切文件都是从“根”目录(/)开始的,并按照文件系统层次标准(FHS)采用倒树状结构来存放文件,以及定义了常见目录的用途。

1.2 目录名称及用途
Linux系统中常见的目录名称以及相应内容:
| 目录名称 | 应放置文件的内容 |
|---|---|
| /boot | 开机所需文件—内核、开机菜单以及所需配置文件等 |
| /dev | 以文件形式存放任何设备与接口 |
| /etc | 配置文件 |
| /home | 用户主目录 |
| /bin | 存放单用户模式下还可以操作的命令 |
| /lib | 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数 |
| /sbin | 开机过程中需要的命令 |
| /media | 用于挂载设备文件的目录 |
| /opt | 放置第三方的软件 |
| /root | 系统管理员的家目录 |
| /srv | 一些网络服务的数据文件目录 |
| /tmp | 任何人均可使用的“共享”临时目录 |
| /proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
| /usr/local | 用户自行安装的软件 |
| /usr/sbin | Linux系统开机时不会使用到的软件/命令/脚本 |
| /usr/share | 帮助与说明文件,也可放置共享文件 |
| /var | 主要存放经常变化的文件,如日志 |
| /lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
1.3 绝对路径与相对路径
绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。
2. 物理设备命名规则
在Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。
常见的硬件设备及其文件名称:
| 硬件设备 | 文件名称 |
|---|---|
| IDE设备 | /dev/hd[a-d] |
| SCSI/SATA/U盘 | /dev/sd[a-z] |
| virtio设备 | /dev/vd[a-z] |
| 软驱 | /dev/fd[0-1] |
| 打印机 | /dev/lp[0-15] |
| 光驱 | /dev/cdrom |
| 鼠标 | /dev/mouse |
| 磁带机 | /dev/st0 或 /dev/ht0 |
由于现在的IDE设备已经很少见了,所以一般的硬盘设备都是以“/dev/sd”开头。而一台主机上可以有多块硬盘,因此系统采用a~z来代表26块不同的硬盘(默认从a开始分配),而且硬盘的分区编号也很有讲究:
主分区或扩展分区的编号从1开始,到4结束;
逻辑分区从编号5开始。
两个常见误区:
- 误区1: /dev/sda表示主板上第一个插槽上的存储设备。
实际上/dev目录中sda设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。在使用iSCSI网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb这个设备—就是这个道理。
- 误区2: 对分区名称的理解错误,分区的编号代表分区的个数,比如sda3表示这是设备上的第3个分区
实际上分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3只能表示是编号为3的分区,而不能判断sda设备上已经存在了3个分区。
硬盘用于存放数据。硬盘设备是由大量的扇区组成的,每个扇区的容量为512字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446字节,分区表占用64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区。

为了解决分区个数不够的问题,可以将第一个扇区的分区表中16字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用16字节分区表空间的指针—一个指向另外一个分区的指针。 这样一来,用户一般会选择使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于4个)的需求。
Tips
所谓扩展分区,严格地讲它不是一个实际意义的分区,而仅仅是一个指向其他分区的指针,这种指针结构将形成一个单向链表。因此扩展分区自身不能存储数据,用户需要在其指向的对应分区(称之为逻辑分区)上进行操作。
主分区、扩展分区、逻辑分区规划:

3. 文件系统
3.1 常见文件系统类型
Linux有多种文件系统,每个文件系统都有其特点和用途。以下是Ext2、Ext3、Ext4和XFS的区别与联系:
-
Ext2: 是Linux的第二代扩展文件系统,最早发布于1993年。它是非日志文件系统,数据丢失可能性较大。在系统崩溃后需要使用
fsck等工具手动修复。适合在不需要日志的环境下使用。 -
Ext3: 是Ext2的升级版,引入了日志机制,减少了崩溃后文件系统修复的时间和复杂性。支持多种日志模式,包括数据日志和元数据日志,增加了数据的可靠性。ext3会把整个硬盘的每个写入动作的细节都预先记录下来,然后再进行实际操作,以便在发生异常宕机后能回溯追踪到被中断的部分。Ext3能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能100%地保证资料不会丢失。
-
Ext4: Ext4是Ext3的继承者,带来了许多改进,最大支持1EB容量(1EB=1,073,741,824GB)、延迟分配、块预分配、支持64位文件、文件系统碎片减少等。它还提供更好的性能和可靠性。另外,Ext4文件系统能够批量分配block(块),从而极大地提高了读写效率。现在很多主流服务器也会使用Ext4文件系统。
-
XFS: 是一种高性能的日志文件系统,支持大文件和高并发。是RHEL 7/8中默认的文件管理系统。它提供了高可扩展性和良好的性能,并具有强大的碎片整理和数据完整性特性。它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只需花费极低的计算和存储性能。XFS适用于大规模数据存储和高负载应用,支持的最大存储容量为18EB。
总的来说,Ext2适合不需要日志功能的小型系统,Ext3和Ext4适用于一般Linux系统,Ext4提供更好的性能和功能。XFS则更适用于大型数据存储和高性能场景。
Tips:
18EB等于18,874,368TB。假设每块硬盘的容量是100TB,那么大概需要19万块硬盘才能把18EB的数据都装下。当用了XFS之后,文件的存储上限就不再取决于技术层面。
3.2 inode与block
3.2.1 inode
inode是"index node"的缩写,每个文件和目录都有一个inode,包含了与文件有关的元数据,如文件权限、所有者、文件大小、时间戳、指向文件数据的指针等。inode不包含文件名,文件名保存在目录结构中,并通过目录项与inode相关联。
Linux只是把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:
- 该文件的访问权限(read、write、execute);
- 该文件的所有者与所属组(owner、group);
- 该文件的大小(size);
- 该文件的创建或内容修改时间(Ctime);
- 该文件的最后一次访问时间(Atime);
- 该文件的修改时间(Mtime);
- 文件的特殊权限(SUID、SGID、SBIT);
- 该文件的真实数据地址(point)。
inode的大小可以根据文件系统的配置和版本而有所不同。在Linux文件系统中,常见的文件系统,如ext4,允许在创建文件系统时指定inode的大小。典型的inode大小是128字节、256字节或512字节,但可能会根据具体的文件系统和需要调整。较大的inode提供了更多空间来存储元数据信息,但也会增加文件系统的整体开销。较小的inode可能节省空间,但在包含额外的扩展属性时可能受到限制。
要查看文件系统的inode大小,您可以使用tune2fs或dumpe2fs或xfs_info等命令查看文件系统的相关信息。
# ext3,ext4文件系统查看
tune2fs -l /dev/sdX | grep "Inode size"
# xfs文件系统查看
xfs_info /dev/vda1
3.2.2 block
block是存储实际文件数据的最小单位。一个文件可能由多个block组成。
文件的实际内容则保存在block块中(大小一般是1KB、2KB或4KB),一个inode的默认大小仅为128字节,记录一个block则消耗4字节。当文件的inode被写满后,Linux系统会自动分配出一个block,专门用于像inode那样记录其他block块的信息,这样把各个block块的内容串到一起,就能够让用户读到完整的文件内容了。
对于存储文件内容的block块,有下面两种常见的情况(以4KB大小的block为例进行说明):
- 情况1:文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB。
- 情况2:文件很大(5KB),那么会占用两个block(5KB−4KB后剩下的1KB也要占用一个block)。
3.3 VFS
计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个虚拟文件系统(Virtual File System,VFS)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。
VFS的架构示意图:

4. 磁盘分区、格式化及挂载
4.1 分区
fdisk命令用于新建、修改及删除磁盘的分区表信息。
| 参数 | 作用 |
|---|---|
| m | 查看全部可用的参数 |
| n | 添加新的分区 |
| d | 删除某个分区信息 |
| l | 列出所有可用的分区类型 |
| t | 改变某个分区的类型 |
| p | 查看分区表信息 |
| w | 保存并退出 |
| q | 不保存直接退出 |
#
[root@linuxprobe ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x88b2c2b0.
# 打印分区信息
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x88b2c2b0
# 创建主分区
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
# 设置分区编号,起止扇区或者根据容量大小划分分区
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 此处敲击回车即可
Last sector, +sectors or +size{
K,M,G,T,P} (2048-41943039, default 41943039): +2G
Created a new partition 1 of type 'Linux' and of size 2 GiB.
# 查看分区信息
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x88b2c2b0
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
# 写入分区表
Command (m for help): w
The partition table has been al

最低0.47元/天 解锁文章
410

被折叠的 条评论
为什么被折叠?



