目录
一,磁盘简介
磁盘分为SSD、机械磁盘;机械磁盘,即磁盘高速转动,磁头移动到读写扇区所在磁道,让磁头在目标扇区上划过,即可完成对扇区的读写操作;
在操作系统角度,内存使用的基本单位为4KB;磁盘存储的基本单位为扇区512byte(512*8=4KB);内存和磁盘间数据交互,是通过文件系统完成的;输入输出I/O的基本单位也是一般4KB;一次性从磁盘读入8个扇区数据,来填满一个内存;
二,文件系统
文件(打开文件、未打开文件,类似进程和程序的关系)
- 已打开的文件,内存内,struct file,包含属性和方法;
- 未打开的磁盘文件,未被加载到内存;
文件系统,是OS对打开的文件和未打开的文件的管理;
文件 = 属性 + 内容
bash
//文件属性
[wz@192 Desktop]$ ll
total 24
-rw-r--r--. 1 wz wz 11 8月 10 19:39 log.txt
-rw-rw-r--. 1 wz wz 29 7月 21 07:31 Makefile
-rwxrwxr-x. 1 wz wz 8648 8月 10 19:44 target
-rw-rw-r--. 1 wz wz 374 8月 10 19:47 test.c
//模式 硬链接数 所有者 组 大小 修改时间 文件名
bash
[wz@192 Desktop]$ stat log.txt
File: 'log.txt'
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 5465892 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ wz) Gid: ( 1000/ wz)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2023-08-10 19:40:07.816510338 -0700
Modify: 2023-08-10 19:39:52.677512582 -0700
Change: 2023-08-10 19:39:52.680512582 -0700
Birth: -
文件系统分类
- 磁盘文件系统,EXT2/3/4、VFAT、FAT/FAT16/FAT32、NTFS(windows)等;
- 网络文件系统,NFS、Samda等;
- 虚拟文件系统,是物理文件系统与服务应用之间的一个接口层;
- Super Block,存放文件系统本身的结构信息,记录的信息有:block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等,如super block信息损坏,则整个文件系统结构就损坏了;
- Group Descriptors Table,描述块组属性信息;
- Block Bitmaps,记录data blocks中哪个数据块被占用,哪个没有;
- Inode Bitmap,每个bit表示一个inode是否空闲可用;
- Inode Table,存放文件属性;
- Data Blocks,存放文件内容;
inode,基本上一个文件/目录一个inode,是文件所有的属性集合(不包括文件名);真正标识文件的不是文件名,是文件inode;inode和数据块是关联的;
创建新文件4个主要操作
- 存储属性,内核先找到一个空闲的inode,把文件信息记录其中;
- 存储数据
- 记录分配情况
- 添加文件名到目录
软硬链接
- 软链接,是一个普通正常的文件,有自己独立的inode;其数据块,保存了指向链接文件的路径;类似于Windows的快捷方式;
- 硬链接,不是一个独立额文件,没有自己独立的inode;
bash
//创建软链接
[wz@192 Desktop]$ ln -s file.txt soft_link
[wz@192 Desktop]$ ll -ai soft_link file.txt
5465893 -rw-rw-r--. 1 wz wz 0 8月 12 03:51 file.txt
5465912 lrwxrwxrwx. 1 wz wz 8 8月 12 03:49 soft_link -> file.txt
bash
//创建硬链接
[wz@192 Desktop]$ ln file.txt hard_link
[wz@192 Desktop]$ ll -ai file.txt hard_link
5465893 -rw-rw-r--. 2 wz wz 6 8月 12 03:53 file.txt
5465893 -rw-rw-r--. 2 wz wz 6 8月 12 03:53 hard_link
bash
//目录文件链接数为2
//本身目录名和inode的映射关系
//自身目录内还有一个默认的.文件
[wz@192 Desktop]$ ll -ai
total 36
74071 drwxr-xr-x. 3 wz wz 126 8月 12 05:07 .
16777672 drwx------. 19 wz wz 4096 7月 31 06:28 ..
18335283 drwxrwxr-x. 2 wz wz 6 8月 12 05:07 dir
[wz@192 Desktop]$ ll -ai dir
total 0
18335283 drwxrwxr-x. 2 wz wz 6 8月 12 05:07 .
74071 drwxr-xr-x. 3 wz wz 126 8月 12 05:07 ..
bash
//在dir目录下新建一个文件,目录dir的链接数变为了3
//目录sudir内的默认..文件
[wz@192 Desktop]$ mkdir dir/subdir
[wz@192 Desktop]$ ll -dai dir
18335283 drwxrwxr-x. 3 wz wz 20 8月 12 05:11 dir
[wz@192 Desktop]$ ll -ai dir/subdir/
total 0
33815814 drwxrwxr-x. 2 wz wz 6 8月 12 05:11 .
18335283 drwxrwxr-x. 3 wz wz 20 8月 12 05:11 ..