linux系统的认知,对linux文件系统的一些认知

# 对linux文件系统的一些认知

## 1. 扇区

![](https://img.kancloud.cn/b2/5c/b25c9f2b36bc5c76083710d906f7d824_484x396.png)

扇区(Sector)是磁盘最小的存储单元,一个扇区通常是512byte(0.5k)

## 2. Data Blocks

操作系统读取磁盘数据时,不会一次只读一个扇区,而是读取一个`Data Blocks`

一个block包含8个连续的扇区(0.5k*8=4k), 磁盘的每次IO操作都会针对一个完整的block

一个block不会同时保存多个文件的内容, 假设一个文件只有1kb, 那么存储这个文件的block就会有3kb空出来。

## 3. 如何选择block大小

磁盘的每次io就是扫描了一个block

block设置比较大,会提高io效率(每次io都能读取到更多内容), 但是小文件会浪费磁盘空间

block设置比较小, 磁盘利用率会得到很大提升,但是会降低IO效率(一个文件会分布在更多的block里面)

## 4. inode是什么

inode记得是文件的详细信息

``` linux

$ stat a.log

File: ‘a.log’

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: fd01h/64769dInode: 1310770 Links: 1

Access: (0664/-rw-rw-r--) Uid: ( 1000/ huiyu) Gid: ( 1000/ huiyu)

Access: 2019-08-12 10:28:24.614113790 +0800

Modify: 2019-08-12 10:28:24.614113790 +0800

Change: 2019-08-12 10:28:24.614113790 +0800

Birth: -

```

详细信息里面有个`Inode: 1310770`, 这个id指的就是该Inode的id

``` linux

$ ls -i a.log

1310770 a.log

```

可以通过文件名查找Inode id, 也可以根据Inode Id 删除文件

``` linux

find . -inum 1310770 -delete

```

(一些名称乱码的文件可以通过这个方法来删除)

但是无法通过Inode id反查文件名

linux底层文件系统是通过Inode来辨别文件的而不是通过文件名。

总结: 一个Inode记录了一个文件的基础信息(不包括详细数据)

## 5. inode会用完吗

每个文件都对应一个inode,如果小文件太多,是会导致inode达到上限,导致就不能再创建文件了(很有可能磁盘空间还有很多)

可以通过`df -i`命令来看inode使用情况

``` linux

$ df -i

文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点

/dev/vda1 19660800 729199 18931601 4% /

devtmpfs 1963974 337 1963637 1% /dev

tmpfs 1966588 1 1966587 1% /dev/shm

```

## 6. 硬链接

``` linux

# 硬链接不允许指向目录

ln 源文件 目标文件

```

一般情况下一个文件名对应一个inode,但是linux也支持多个文件名对应同一个inode

``` linux

$ touch f1

$ ln f1 f2

$ echo '123' > f2

$ cat f1

123

```

实际上, f1和f2都是指向同一个文件

``` linux

$ ls -i

1704010 f1 1704010 f2

```

增加一个硬链接后, inode信息里面的硬链接数量会加1

``` linux

$ stat f1

文件:"f1"

大小:4 块:8 IO 块:4096 普通文件

设备:fd01h/64769dInode:1704010 硬链接:2

权限:(0664/-rw-rw-r--) Uid:( 1000/ huiyu) Gid:( 1000/ huiyu)

最近访问:2019-12-20 16:29:26.222751069 +0800

最近更改:2019-12-20 16:29:24.108666483 +0800

最近改动:2019-12-20 16:29:24.108666483 +0800

创建时间:-

```

无论单独删除f1或f2都不会导致inode被删除(依然还被其它文件名引用)

``` linux

$ ls -i

1704010 f1 1704010 f2

$ rm -rf f1

$ ls -i

1704010 f2

$ stat f2

文件:"f2"

大小:4 块:8 IO 块:4096 普通文件

设备:fd01h/64769dInode:1704010 硬链接:1

权限:(0664/-rw-rw-r--) Uid:( 1000/ huiyu) Gid:( 1000/ huiyu)

最近访问:2019-12-20 16:29:26.222751069 +0800

最近更改:2019-12-20 16:29:24.108666483 +0800

最近改动:2019-12-20 16:38:28.407444298 +0800

创建时间:-

```

删除后,对应inode的硬连接数减1, 只有当硬链接数为0时, inode才会被删除

## 7. 软连接

``` linux

ln -s 源文件或文件夹 目标文件或文件夹

```

软连接和硬链接类似,但是不会增加inode的硬连接数,它是对源文件的文件名的引用

## 8. 文件夹和文件有什么区别

文件夹就是一个文件,只不过里面记录的是子文件的名称。

## 参考文章

[https://www.ruanyifeng.com/blog/2011/12/inode.html](https://www.ruanyifeng.com/blog/2011/12/inode.html)

[https://en.wikipedia.org/wiki/Inode](https://en.wikipedia.org/wiki/Inode)

[https://hqidi.com/50.html](https://hqidi.com/50.html)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值