1、理解硬件
1.1 磁盘&&服务器&&机柜&&机房
机械磁盘(HDD),计算机中唯一的机械设备(其他部件为电子结构)。
属于外设(外部存储设备)。
速度慢,容量大,价格低。


多个磁盘是服务器的一部分。

多个服务器是机柜的一部分。

多个机柜是机房的一部分。

1.2 磁盘的物理结构
机械磁盘(HDD)的盘片写入数据本质上是'两态'的。

1.3 磁盘的存储结构

本文讲解 Linux 文件系统基础,包括磁盘硬件结构、文件系统概念(块、分区、inode)、Ext2 文件系统内部结构(数据块、索引节点、位图等)以及软硬链接原理。

机械磁盘(HDD),计算机中唯一的机械设备(其他部件为电子结构)。
属于外设(外部存储设备)。
速度慢,容量大,价格低。


多个磁盘是服务器的一部分。

多个服务器是机柜的一部分。

多个机柜是机房的一部分。

机械磁盘(HDD)的盘片写入数据本质上是'两态'的。



微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online

磁盘容量 = 磁头数× 单个盘面的磁道数(柱面数)× 每道扇区数× 每扇区字节数。
如何定位一个扇区?通过CHS 定址。
注意:

磁盘物理上由多个盘片(Platter)组成,但在逻辑视角下,整个磁盘可以看作是由'柱面'构成的卷状结构。类似于:

所以,磁盘的真实情况是:
磁道:
展开后,看作一维数组。

柱面:
展开后,看作二维数组。

整盘:
就是多个柱面,多个二维数组,看作三维数组,而无论多少维数组,都可以看作一维数组。

所以,每一个扇区都有唯一的下标,我们叫做 LBA(Logical Block Address) 地址,其实就是线性地址。
CHS -> LBA:
LBA = 柱面号C * (磁头数 * 每磁道扇区数) + 磁头号H * 每磁道扇区数 + 扇区号S - 1。
柱面、磁头,编号从 0 开始。扇区,编号从 1 开始。
CHS -> LBA:
现代操作系统和应用程序不再直接使用 CHS(柱面 - 磁头 - 扇区)地址,而是通过 LBA(Logical Block Address,逻辑块地址) 直接访问磁盘。磁盘控制器内部自动完成 LBA → 物理位置,就可以一个数字访问磁盘扇区了。
OS 文件系统访问磁盘,不以扇区为单位 (效率低),而是以'块'为单位(一般是连续的 8 个扇区,即4KB)。

块太多了,进行分区该管理。

我们使用 ls -li 的时候看到的除了看到文件名,还能看到部分文件属性。

以 Ext2 文件系统为例,介绍文件系统。

struct inode和数据块的映射关系。

之前遗留了一个问题,文件名是文件属性,但是不放到 struct inode 中,因为大小不确定。放在哪里?
如何读取文件?需要进行路径解析。
比如 /home/user/file.txt,文件系统会逐级查找目录项 (文件名与其对应 inode 的映射关系)
/ 的 inode 号(通常是 inode 2)。/ 的数据块中找到 home 的 inode 号。有了 file.txt 的 inode 号,file.txt 的文件属性和内容就都有了。
注意:
解析路径时,遇到"路径前缀"的挂载点(如 /mnt/data)会切换到该挂载点对应的文件系统(分区)。
例如:访问 /mnt/data/file.txt:
/mnt/data,发现它是一个挂载点,切换到挂载的分区,。总结一下:


2 表示 硬链接数。
注意:
当前目录.上级目录..,其实都是硬链接,但是不支持用户对目录的硬链接,因为容易形成路径环的问题。