硬盘的分类
- 机械硬盘(HDD):采用磁性碟片来存储。一般由圆形的磁盘、机械手臂、主轴马达等部分组成。扇区是最小的存储单元,每个扇区的大小为512bytes(字节)。第一个扇区最为重要,里面有主引导记录(MBR, Main Boot Record, 446byte)和分割表(Partition table, 64byte)。
- 固态硬盘(SSD):采用闪存颗粒来存储。是用固态的电子存储芯片阵列制成的硬盘,由控制单元和存储芯片组成。
- 混合硬盘(HHD):把磁性硬盘和闪存集成到一起的一种硬盘。
文件管理系统
对于一个系统,文件的存储是存储是十分重要的一部分。
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
简单来说,文件系统就是将存储设备上离散的信息链接起来,变成一个连续的、一个整体的文件。
FAT & NTFS
不同的操作系统使用不同的文件管理系统,Windows98以前的操作系统使用的文件管理系统出FAT or FAT16, Windows 2000以后的操作系统使用的文件管理系统是NTFS,最新的Windows 10使用的就是NTFS。
采用FAT16的分区的簇大小为32KB,而FAT32分区的簇只有4KB的大小。
基于FAT32的Win 2000可以支持分区最大为32GB;而基于 FAT16的Win 2000支持的分区最大为4GB。
Ext
Ext是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。
linux主要的文件系统为Ext2/Ext3。Ext2是一种索引式的文件系统。
Ext2文件系统内的主要信息有:
- superblock:记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量、文件系统的格式与相关的信息。
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
- block:实际记录文件的内容,若文件太大,则占用多个block。
索引式文件系统:
文件的inode存储文件的基本属性和文件数据所在的block的号码。这样操作系统就可以根据inode中的block编号的顺序读取相应编号的block中存储的文件。
一般文件系统一开始就把inode和block编号完成了,不再进行修改。
Ext2文件系统在格式化的时候将存储设备分为多个块组(block group),每个块组都有相对独立的inode/block/superblock。在文件系统最前面有一个启动的扇区(boot sector),这个启动的扇区可以安装引导装载程序。
每个块组由6个部分组成:
- Super block:(使用dumpe2fs
命令来调用查看)
- 记录block和inode的总量,已使用和未使用的量数量。
- 每个block和inode的大小,inode的大小为128byte,block的大小为1k,2k,4k。
- 文件挂载的时间,最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息。
- File system Description:(文件系统描述说明),使用dumpe2fs
进行查看。
- 记录每个block group的开始和结束的block的block的号码。??????????????
- block bitmap:(块对照表)
- 记录所有的block的占用情况。若你想添加文件使用block,通过block bitmap查询block是否被占用。
- inode bitmap:(inode对照表)
- 与上面的block bitmap类似。
- inode table:(inode表格)
- 记录所有的文件夹,文件的属性(权限、所有者),文件的大小,文件创建的时间或状态改变的时间、数据block存储存储号(查找到文件的inode后也就就可以获得数据存储的所有的block号,一次可以将所有的数据读取出来)
- data block:(数据块)
- 用于存放数据的地方,在Ext2中每个block的大小可以为1k、2k、4k。
操作系统通过inode来识别不同的文件,也就是说并不是使用文件名来识别文件的。
系统打开一个文件。首先,找到文件所对应的inode号码;通过inode号码,获取inode的信息;根据inode的信息,找到文件数据所在的block,读取文件的数据。
常用的命令:
- 查看文件的inode信息可以使用stat
命令查看,如stat filename
。
查看每个分区的inode的总数和已经使用的情况可以使用
df
的命令。如df -i
。查看每个文件的所对应的inode号码,使用
ls -i filename
。查看整个目录下的文件夹和文件的inode,使用
ls -li ./file
。
硬链接
在linux下,多个文件名可以指向同一个inode,也就是硬链接。也就是不同的文件名访问同样的内容,如果修改文件的内容,会影响所有的文件名。删除一个文件名,并不会影响所有的硬件链接的文件。
硬链接使用ln
命令。如ln sourcefile targetfile
。
软链接
下面举一个栗子,引出软链接的概念。
文件A和文件B的inode号码不一样,但是文件A的内容就是文件B的路径,读取文件A的时候,系统会自动将访问者导向文件B。因此你无论打开哪一个文件,最终读取的都是文件B。此时,文件A就称为文件B的软链接。有点类似于Windows的快捷方式,但又有着本质的区别。
软链接使用ln -s
命令。如ln -s sourcefile targetfile
。