1. 认识磁盘
磁盘是指利用磁性材料作为数据存储的一种非易失性存储器/非依电性存储器。常见的磁盘有软磁盘(软盘)和硬磁盘,硬磁盘就是机械硬盘(传统硬盘)。 非易失性存储器 - 维基百科,自由的百科全书 (wikipedia.org)
硬盘 - 维基百科,自由的百科全书 (wikipedia.org)(这个硬盘是指机械硬盘)
软盘 - 维基百科,自由的百科全书 (wikipedia.org)
硬盘可以分为机械硬盘(Hard Disk Drive)和固态硬盘(Solid-state Drive),机械硬盘是利用磁性材料作为存储介质,而固态硬盘是利用存储芯片进行数据存储。固态盘 - 维基百科,自由的百科全书 (wikipedia.org)
有些文章把磁盘的概念广泛化,即计算机的外部存储设备都是磁盘。下文磁盘代指机械硬盘。
磁盘的物理结构
硬盘 - 维基百科,自由的百科全书 (wikipedia.org)
总结:磁道(Track)是盘片上的圆弧轨迹,磁道分割的弧段被称为扇区(sector),多个盘片上的同一半径的磁道组成柱面(Cylinder)。
2. 机械硬盘的工作原理
How do Hard Disk Drives Work? 💻💿🛠 - Youz
3D动画演示机械硬盘工作原理,教你如何选购高性能硬盘_哔哩哔哩_bilibili
【硬核科普】选购机械硬盘的大坑,不看你就上当,详解SMR瓦楞式堆叠硬盘_哔哩哔哩_bilibili
数字存储完全指南 02:机械硬盘的原理与参数详解 - 少数派 (sspai.com)
3.文件系统的概念
文件系统是一种用于向用户提供底层数据访问的机制。它将设备中的空间划分为特定大小的块(或者称为簇),一般每块512字节。数据存储在这些块中,大小被修正为占用整数个块。由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。
根据存储设备或存储空间的不同,文件系统可以分为一下几种大类,不同的大类下因实现机制的不同又可细分。
磁盘文件系统:
磁盘文件系统是一种设计用来利用数据存储设备来保存计算机文件的文件系统,最常用的数据存储设备是磁盘驱动器,可以直接或者间接地连接到计算机上。例如:文件配置表(FAT12、FAT16、FAT32、exFAT)、New Technology File System、分层文件系统HFS、HFS Plus、延伸文件系统(ext1、ext2、ext3、ext4)、ODS、btrfs、XFS、UFS、ZFS。有些文件系统是行程文件系统(也有译作日志文件系统)或者追踪文件系统。
网络文件系统:
网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制。
闪存文件系统
闪存文件系统是一种设计用来在闪存上储存文件的文件系统。
日志文件系统具有闪存文件系统需要的特性,这类文件系统包括JFFS2和YAFFS。也有为了避免日志频繁写入而导致闪存寿命衰减的非日志文件系统,如exFAT。
文件系统 - 维基百科,自由的百科全书 (wikipedia.org)
4.ext2文件系统
The Second Extended File system (EXT2) (unitn.it)
The Second Extended Filesystem — The Linux Kernel documentation
深入理解 Linux Ext 文件系统设计原理 | 楚权的世界 (chuquan.me)
7.1 文件系统全家桶 | 小林coding (xiaolincoding.com)
ext文件系统机制原理剖析 | 骏马金龙 (junmajinlong.com)
5.软链接和硬链接
ln命令来自英文单词link的缩写,中文译为“链接”,其功能是为某个文件在另外一个位置建立同步的链接。Linux系统中的链接文件有两种形式,一种是硬链接,另一种是软链接。软链接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软链接文件也将无法使用;硬链接则是将文件的inode属性块进行了复制,因此把原始文件移动或删除后,硬链接文件依然可以使用。
原文链接:ln命令 – 为文件创建快捷方式 – Linux命令大全(手册)
5.1 软链接
我们为文件file.txt建立软链接,发现soft_link和file.txt的inode值不同,我们删除被链接文件file.txt,再读取soft_link的内容,发现文件不存在。说明通过软链接生成的文件(或称为链接文件),如果删除链接的源文件,链接文件就会失效。
我们保存失效的软连接,再重新建一个file.txt,
发现软连接又起效了。我们改变源文件的绝对路径,发现软链接又失效了。
这是为什么呢?
这是因为软链接生成的新文件的inode指向的block保存的是源文件的路径。所以当改变或删除源文件时,链接文件inode指向的block就找不到源文件了。
5.2 硬链接
我们新建一个文件test.txt,并为其建立硬链接。我们发现文件test.txt和hard_link的inode值相同,说明这两个文件本质是同一个文件。
同时我们删除其中任意一个文件都对另一个文件没有影响。
这是因为删除硬链接文件和源文件中的任意一个,只是将被删除文件的inode bitmap置0,其余的文件的inode bitmap并没有置0,还是可以找到inode。
深入理解硬链接
我们新建一个目录dir1, 发现新建目录的硬链接数为2,这是为什么呢?
我们打开dir1看一下,
发现dir1中“.”是dir1的硬链接。
可见, 每新建一个目录,目录会自动新建一个指向本身的硬链接以及上一层目录的硬链接。
我们在dir1中新建子目录cdir1,
发现dir1的硬链接数变为3,再新建一个子目录cdir2, dir1的硬链接数又加1,变为4,这四个硬链接分别是dir1目录本身,dir1目录中表示当前目录“.”,两个子目录中表示上一级目录的“..”。
由此我们可以得出,一个目录的硬链接数 = 2 + 该目录下的有效目录数。
5.3 应用场景
原文链接:
Linux软硬链接:何时使用与实际应用 (baidu.com)
参考:
Linux硬链接和软连接的区别与总结 - Hsia的博客 | Hsia Blog (xzchsia.github.io)
硬链接和软连接(符号链接)的区别 - _sanjun - 博客园 (cnblogs.com)