深入了解Linux文件系统
Posted 还行少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入了解Linux文件系统相关的知识,希望对你有一定的参考价值。
inode和block概述
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
文件数据包括元信息与实际数据
block(块)
连续的八个扇区组成一个block
是文件存取的最小单位
inode(索引节点)
中文译名为“索引节点”,也叫i节点
用于存储文件元信息
inode的内容
inode包含文件的元信息
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳
文件所在block
…
查看inode信息
[root@localhost ~]# stat 1
文件:"1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:134312827 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2021-05-18 16:27:48.097818793 +0800
最近更改:2021-05-18 16:27:48.097818793 +0800
最近改动:2021-05-18 16:27:48.097818793 +0800
创建时间:-
[root@localhost ~]#
Linux系统文件三个主要的时间属性
ctime(change time)
最后一次改变文件或目录(属性)的时间
atime (access time)
最后一次访问文件或目录的时间
mtime (modify time)
最后一次修改文件或目录(内容)的时间
[root@localhost ~]# touch 1
[root@localhost ~]# stat 1
文件:"1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:134312827 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2021-05-18 16:38:05.395844907 +0800
最近更改:2021-05-18 16:38:05.395844907 +0800
最近改动:2021-05-18 16:38:05.395844907 +0800
创建时间:-
[root@localhost ~]# vi 1
[root@localhost ~]# stat 1
文件:"1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:134312827 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2021-05-18 16:38:21.195903349 +0800 //只更改了atime
最近更改:2021-05-18 16:38:05.395844907 +0800
最近改动:2021-05-18 16:38:05.395844907 +0800
创建时间:-
[root@localhost ~]#
[root@localhost ~]# echo 123 >> 1 //追加123到1中
[root@localhost ~]# stat 1
文件:"1"
大小:17 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:134312830 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2021-05-18 16:40:43.711096672 +0800
最近更改:2021-05-18 16:44:02.494935574 +0800 //mtime变更了
最近改动:2021-05-18 16:44:02.494935574 +0800 //ctime变更了
创建时间:-
[root@localhost ~]#
[root@localhost ~]# chown tvxq 1 //改变属主
[root@localhost ~]# stat 1
文件:"1"
大小:17 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:134312830 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ tvxq) Gid:( 0/ root)
最近访问:2021-05-18 16:40:43.711096672 +0800
最近更改:2021-05-18 16:44:02.494935574 +0800
最近改动:2021-05-18 16:51:21.427187399 +0800 //只变更了ctime
创建时间:-
[root@localhost ~]#
inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
Linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
用户通过文件名打开文件时,系统内部的过程
1.系统找到这个文件名对于的inode号码
2.通过inode号码,获取inode信息
3.根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的方法
[root@localhost ~]# ls -i 1
134312830 1
[root@localhost ~]#
[root@localhost ~]# stat 1
文件:"1"
大小:17 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:134312830 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ tvxq) Gid:( 0/ root)
最近访问:2021-05-18 16:40:43.711096672 +0800
最近更改:2021-05-18 16:44:02.494935574 +0800
最近改动:2021-05-18 16:51:21.427187399 +0800
创建时间:-
[root@localhost ~]#
inode大小
inode也会消耗硬盘空间
每个inode的大小一般是128字节或256字节或512字节
[root@localhost ~]# xfs_info /dev/sda1
meta-data=/dev/sda1 isize=512 //大小为512字节 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]#
查看inode总数和已经使用的数量
[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 478405 421 477984 1% /dev
tmpfs 482660 1 482659 1% /dev/shm
tmpfs 482660 1485 481175 1% /run
tmpfs 482660 16 482644 1% /sys/fs/cgroup
/dev/mapper/centos-root 102297600 175767 102121833 1% /
/dev/sda1 524288 349 523939 1% /boot
tmpfs 482660 9 482651 1% /run/user/42
tmpfs 482660 1 482659 1% /run/user/0
[root@localhost ~]#
inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
移动或重命名文件时,只改变文件名,不影响inode号码
打开一个文件后,系统通过inode号码来识别该文件,不在考虑文件名
[root@localhost ~]# ls -i 1
134312830 1
[root@localhost ~]# find -inum 134312830 -exec rm -rf {} \\; //删除当前目录下inode号码为134312830的文件
[root@localhost ~]# ls -i 1
ls: 无法访问1: 没有那个文件或目录
[root@localhost ~]#
硬链接和软连接
软连接 | 硬链接 | |
---|---|---|
删除原始文件 | 失效 | 仍旧可用 |
使用范围 | 适用于文件或目录 | 只可用于文件 |
保存位置 | 与原始文件可以位于不同的文件系统中 | 必须与原始文件在同一个文件系统 |
[root@localhost ~]# ln -s 1 2
[root@localhost ~]# ll -i 1 2
134312829 -rw-r--r-- 1 root root 0 5月 18 18:38 1
134312830 lrwxrwxrwx 1 root root 1 5月 18 18:39 2 -> 1 //inode号和原文件不一样
[root@localhost ~]#
[root@localhost ~]# ln /root/1 /root/3 创建硬链接
[root@localhost ~]# ll -i 1 2 3
134312829 -rw-r--r-- 2 root root 0 5月 18 18:38 1
134312830 lrwxrwxrwx 1 root root 1 5月 18 18:39 2 -> 1
134312829 -rw-r--r-- 2 root root 0 5月 18 18:38 3 //与原文件的inode号一样
[root@localhost ~]#
恢复XFS类型的文件
首先查看是否安装xfsdump
[root@localhost ~]# rpm -q xfsdump
xfsdump-3.1.7-1.el7.x86_64
[root@localhost ~]#
xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路径或设备文件
[root@localhost 2]# xfsdump -f /boot/2/1 /boot -L 1 -M 1 //备份/boot
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of localhost.localdomain:/boot
xfsdump: dump date: Tue May 18 18:52:22 2021
xfsdump: session id: b0e7437f-fde8-4973-976b-afd3eae67c27
xfsdump: session label: "1"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 209713472 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 209390312 bytes
xfsdump: dump size (non-dir files) : 209140496 bytes
xfsdump: dump complete: 7 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /boot/2/1 OK (success)
xfsdump: Dump Status: SUCCESS
[root@localhost 2]#
xfsdump备份级别(默认为0)
0:完全备份
1-9:增量备份
xfsrestore命令格式
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
[root@localhost 2]# xfsrestore -f /boot/2/1 /boot/1 //恢复文件
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /boot
xfsrestore: volume: /dev/sda1
xfsrestore: session time: Tue May 18 18:52:22 2021
xfsrestore: level: 0
xfsrestore: session label: "1"
xfsrestore: media label: "1"
xfsrestore: file system id: 54cce9ff-2f23-43b3-a654-728926b2a555
xfsrestore: session id: b0e7437f-fde8-4973-976b-afd3eae67c27
xfsrestore: media id: 6dc5f49d-6516-4d12-b51f-9df07d42e439
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 13 directories and 352 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: WARNING: unable to unlink current file prior to restore: 1/1: 不是目录: discarding
xfsrestore: WARNING: unable to unlink current file prior to restore: 1/2: 不是目录: discarding
xfsrestore: WARNING: unable to unlink current file prior to restore: 1/3: 不是目录: discarding
xfsrestore: WARNING: unable to unlink current file prior to restore: 2/1: 不是目录: discarding
xfsrestore: restore complete: 4 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore: stream 0 /boot/2/1 OK (success)
xfsrestore: Restore Status: SUCCESS
[root@localhost 2]#
xfsdump使用限制
只能备份已挂载的文件系统
必循使用root的权限才能操作
只能备份xfs文件系统
备份后的数据只能让xfsrestore解析
不能备份两个具有相同UUID的文件系统
以上是关于深入了解Linux文件系统的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段