文件系统相关技术¶
1 文件 rwx 权限和属性¶
- https://wiki.archlinux.org/title/File_permissions_and_attributes
- 目录的r权限只能使用ls查看目录下的内容(文件名),不能读取文件内容,甚至不能查看到文件属性。
- 目录的w权限影响对目录下文件的修改,如touch、mkdir、rm、rename等操作,但同时需要**目录有x权限**,否则上面的操作也不能执行。注意上面的操作**不需要文件具有任何权限**。
- 目录的x权限可以使用cd命令,没有ls查看目录下内容的权限,却可以读取已知文件的内容或ls已知的文件。(目录路径上任一层没有x权限,都不能cd)
- 示例:只有 r 权限
[shuhw@web138 tmp]$ ls -l
总用量 0
drwxrwxr--. 2 shuhw shuhw 15 6月 16 10:22 dir1
[shuhw2@web138 tmp]$ ls dir1/
ls: 无法访问dir1/1: 权限不够
1
[shuhw2@web138 tmp]$ ls -l dir1/
ls: 无法访问dir1/1: 权限不够
总用量 0
-????????? ? ? ? ? ? 1
[shuhw2@web138 tmp]$ cat dir1/1
cat: dir1/1: 权限不够
- 示例:只有 x 权限
[shuhw@web138 tmp]$ ls -l
总用量 0
drwxrwx--x. 2 shuhw shuhw 15 6月 16 10:22 dir1
[shuhw2@web138 tmp]$ ls dir1/
ls: 无法打开目录dir1/: 权限不够
[shuhw2@web138 tmp]$ cd dir1/
[shuhw2@web138 dir1]$ ls
ls: 无法打开目录.: 权限不够
[shuhw2@web138 tmp]$ ls dir1/1
dir1/1
[shuhw2@web138 tmp]$ ll dir1/1
-rw-rw-r--. 1 shuhw shuhw 10 6月 16 10:22 dir1/1
[shuhw2@web138 dir1]$ cat 1
111111111
1.1 chmod、chown¶
- chmod 命令只能被文件所属的用户或者特权用户(root 或 sudo)执行,其它用户不能执行。
- chown :
- chown 的用户和文件拥有者相同时,即使普通用户也不报错。
- chown 的用户组和文件拥有组相同时,即使普通用户也不报错。
- chown 的用户和文件拥有者不相同时,命令只能被特权用户(root 或 sudo)执行,其它用户不能执行, 即使是文件拥有着都不能执行。
2 inode¶
1. inode 编号在分区级别是唯一的。每个分区都有自己的 inode 表。
3 链接¶
1. 不能在不同文件系统之间创建硬链接,因为可能inode号冲突。而软链接可以。
4 读放大、写放大¶
- 写放大
Write Amplification : 写放大,假设每秒写入 10MB 的数据,但观察到硬盘的写入是 30MB/s,那么写放大就是 3。写分为立即写和延迟写,比如 redo log 是立即写,传统基于 B-Tree 数据库刷脏页和 LSM Compaction 是延迟写。redo log 使用 direct IO 写时至少以 512 字节对齐,假如 log 记录为 100 字节,磁盘需要写入 512 字节,写放大为 5。
- 读放大
Read Amplification : 读放大,对应于一个简单 query 需要读取硬盘的次数。比如一个简单 query 读取了 5 个页面,发生了 5 次 IO,那么读放大就是 5。假如 B-Tree 非叶子节点都缓存在内存中,point read-amp 为 1,一次磁盘读取就可以获取到 Leaf Block;short range read-amp 为 1~2,1~2 次磁盘读取可以获取到所需的 Leaf Block。
- 空间放大
Space Amplification : 空间放大,假设我需要存储 10MB 数据,但实际硬盘占用了 30MB,那么空间放大就是 3。有比较多的因素会影响空间放大,比如在 Compaction 过程中需要临时存储空间,空间碎片,Block 中有效数据的比例小,旧版本数据未及时删除等等。
5 readddirplus¶
- libfuse-readdirplus
据我所知,readdirplus 允许对
readdir()
的调用还包括将被缓存的 stat 信息。因此,一个ls -l
命令将不再需要对每一个文件单独调用getattr()
来获取 stat 信息。