inode 和block概述
-
文件数据包括元信息与实际数据
-
文件存储在硬盘上,硬盘存储最小单位是“扇区”,每个扇区存储512字节
逻辑层面最小存储是单元格/簇
物理层面最小存储是扇区
-
block(块)4k
- 连续的八个扇区组成一个block
- 是文件存取的最小单位
-
inode(索引节点)
- 中文译名为“索引节点”,也叫i节点
- 用于存储文件元信息
一个文件必须占用一个inode,但至少占用一个block
inode的内容
inode包含文件的元信息
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件的时间戳
- …………
用stat命令可以查看某个文件的inode信息
- 示例:stat aa.txt
Linux系统文件三个主要的时间属性
- ctime(change time)最后一次改变文件或目录(属性)的时间
- atime(access time)最后一次访问文件或目录的时间
- mtime(modify time)最有一次修改文件或目录(内容)的时间
目录文件的结构
- 目录也是一种文件
- 目录文件的结构
创建一个空的abc目录就是创建一个内容为0的文件
-
每个inode都有一个号码,操作系统用于inode号码来识别不同的文件
-
Linux系统内部不适用文件名,而使用inode号码来识别文件
-
对于用户来说,文件名只是inode号码便于识别的别称
inode的号码
用户通过文件名打开文件时,系统内部的过程
- 系统找到这个文件名对应的inode号码
- 通过indoe号码,获取inode信息
- 根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的办法
-
ls -i命令:查看文件名对应的inode号码
ls -i aa.txt
-
stat命令:查看文件inode信息中的inode号码
stat aa.txt
两种方法查看:
文件存储
硬盘分区后的结构
访问文件的简单流程
inode的大小
- inode也会消耗硬盘空间,每个inode的大小,一般是128字节或256字节
- 格式化文件系统(硬盘)时确定inode的总数
- 使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象:
- 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
- 移动或重命名文件时,只改变文件名,不影响inode号码
- 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
连接文件
为文件或目录建立链接文件
文件类型
-
硬链接
ln 源文件 目标位置
-
软链接
ln -s 源文件或目录… 链接文件或目标位置
硬链接相当于创建别名
软链接相当于快捷方式
恢复EXT类型的文件
编译安装extundelete软件包(只能使用6版本,7无法使用)
-
安装依赖包
- e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
-
e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
-
配置、编译及安装
- extundelete-0.2.4.tar.bz2
模拟删除名执行恢复操作
先检查挂载信息,然后安装环境包
实验:
[root@localhost ~]#cd /mnt/Packages
[root@localhost Packages]# df -h //查看镜像文件是否挂载
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 3.1G 16G 17% /
tmpfs 932M 76K 932M 1% /dev/shm
/dev/sda1 5.8G 168M 5.4G 3% /boot
/dev/sda3 9.7G 150M 9.0G 2% /home
/dev/sr0 3.6G 3.6G 0 100% /mnt //挂载在/mnt目录
[root@localhost ~]# cd /mnt/Packages/
[root@localhost Packages]# ls '发现有很多软件包可以安装'
...省略部分内容
zip-3.0-1.el6.x86_64.rpm
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zlib-devel-1.2.3-29.el6.i686.rpm
zlib-devel-1.2.3-29.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm
[root@localhost Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm //安装
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm //安装
…………省略
pkgconfig(com_err) is needed by e2fsprogs-devel-1.41.12-18.el6.x86_64 (报错,发现要先安装依赖包)
[root@localhost Packages]# rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm (安装依赖包)
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm //安装成功
进行编译安装
[root@localhost Packages]# mount.cifs //192.168.10.124/linux /aaa
Password:
[root@localhost Packages]# ls /aaa //发现extundelete-0.2.4.tar.bz2存在
extundelete-0.2.4.tar.bz2 john-1.8.0.tar.gz
[root@localhost Packages]# cd /aaa (进入111目录)
[root@localhost aaa]# tar jxvf extundelete-0.2.4.tar.bz2 -C /opt //将压缩包解压到opt目录中
..........省略部分信息
[root@localhost aaa]# ls /opt //查看是否解压成功
extundelete-0.2.4 rh
(进行编译安装)
[root@localhost 111]# cd /opt/extundelete-0.2.4/ //进入件文件中查看
[root@localhost extundelete-0.2.4]# ls
acinclude.m4 autogen.sh configure depcomp LICENSE Makefile.in README
aclocal.m4 config.h.in configure.ac install-sh Makefile.am missing src
[root@localhost extundelete-0.2.4]# yum install gcc gcc-c++ -y //安装编译器
[root@localhost extundelete-0.2.4]# ./configure //开始配置
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make //make编译
make -s all-recursive
Making all in src
extundelete.cc:571: 警告:未使用的参数‘flags’
[root@localhost extundelete-0.2.4]# make install //make install 安装
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
新添加磁盘,建立分区、格式化并挂载分区,最后查看信息
[root@localhost extundelete-0.2.4]# df -hT //挂载分区
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 20G 3.2G 16G 18% /
tmpfs tmpfs 932M 76K 932M 1% /dev/shm
/dev/sda1 ext4 5.8G 168M 5.4G 3% /boot
/dev/sda3 ext4 9.7G 150M 9.0G 2% /home
/dev/sr0 iso9660 3.6G 3.6G 0 100% /media/RHEL_6.5 x86_64 Disc 1
/dev/sr0 iso9660 3.6G 3.6G 0 100% /mnt
/dev/sdb1 ext4 20G 172M 19G 1% /aaa
在挂载点创建文件,然后删除文件,同时解挂载,最后尝试恢复
[root@localhost extundelete-0.2.4]# cd /bbb //进入挂载点
[root@localhost 222]# ls
lost+found
[root@localhost 222]# echo a>a //创建文件
[root@localhost 222]# echo a>c
[root@localhost 222]# ls //创建成功
a c lost+found
[root@localhost 222]# cd ~ //返回家目录
[root@localhost ~]# umount /bbb //解挂载
[root@localhost ~]# rm -rf /bbb/a /bbb/c
[root@localhost ~]# umount /bbb (解挂载/bbb)
[root@localhost ~]# extundelete /dev/sdb1 --restore-all //恢复数据
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 29 descriptors loaded.
Searching for recoverable inodes in directory / ...
2 recoverable inodes found. //找到两个文件
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.
[root@localhost ~]# cd RECOVERED_FILES/ //进入恢复的文件中查找
[root@localhost RECOVERED_FILES]# ls //误删的文件恢复成功
a c
[root@localhost RECOVERED_FILES]# cp a /opt //将文件复制到目标位置
[root@localhost RECOVERED_FILES]# ls /opt
a extundelete-0.2.4 rh
成功恢复
恢复XFS类型的文件
xfsdump命令格式
xfsdump -f 指定创建备份存放的位置 备份存放的路径或设备文件
例如:xfsdump -f /opt/xfs_dump /dev/sdb1
xfsdump备份级别(默认为0)
- 0:完全备份
- 1~9:增量备份9看,
xfsdump常用选项:-f、-L、-M、-s
xfsrestore命令格式:
xfsrestore -f 备份的文件位置 指定恢复文件的位置
例如: xfsrestore -f /opt/xfs_dump /abc
模拟删除并执行恢复操作
实验:
[root@localhost ~]# fdisk /dev/sdb //添加新磁盘并创建分区
…………省略内容
[root@localhost ~]# mkfs.xfs /dev/sdb1 //格式化
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
…………省略内容
[root@localhost ~]# mkdir /abc //创建目录
[root@localhost ~]# vim /etc/fstab //将sdb1挂载到/abc
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda2 xfs 20G 3.5G 17G 18% /
devtmpfs devtmpfs 898M 0 898M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.0M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda5 xfs 10G 37M 10G 1% /home
/dev/sda1 xfs 6.0G 174M 5.9G 3% /boot
tmpfs tmpfs 183M 4.0K 183M 1% /run/user/42
tmpfs tmpfs 183M 24K 183M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1 xfs 20G 33M 20G 1% /abc //挂载成功
[root@localhost ~]# echo "this is test" > /abc/demo1 //在/abc下创建demo1并输入this is test
[root@localhost ~]# echo "this is test" > /abc/demo2 //在/abc下创建demo2并输入this is test
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
demo1 demo2
[root@localhost abc]# cat demo2
this is test
[root@localhost abc]# mkdir test
[root@localhost abc]# ls
demo1 demo2 test
[root@localhost abc]# echo "1,2,3,4,5,6" > ./test/test1.txt // 在当前目录下的test目录中创建test1.txt并写入内容
[root@localhost abc]# cd test
[root@localhost test]# ls
test1.txt
[root@localhost test]# cat test1.txt
1,2,3,4,5,6
[root@localhost test]# tree /abc/ //查看树
/abc/
├── demo1
├── demo2
└── test
└── test1.txt
1 directory, 3 files
[root@localhost ~]# xfsdump -f /opt/xfs_dump /dev/sdb1 //备份,指定存放在sdb1,/opt/xfs_dump下
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control
============================= dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
-> label
media label entered: "label"
--------------------------------- end dialog ---------------------------------
…………省略部分内容
[root@localhost ~]# cd /opt //切换至/opt查看备份成功
[root@localhost opt]# ls
rh xfs_dump
[root@localhost opt]# ls -a xfs_dump
xfs_dump
[root@localhost opt]# cd /abc
[root@localhost abc]# ls
demo1 demo2 test
[root@localhost abc]# rm -rf * //删除/abc下的所有文件及目录
[root@localhost abc]# ls
[root@localhost abc]# xfsrestore -f /opt/xfs_dump /abc //将/opt/xfs_dump的备份内容恢复至/abc中
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
…………省略中间部分内容
xfsrestore: Restore Status: SUCCESS
[root@localhost abc]# ls //查看内容已恢复
demo1 demo2 test
[root@localhost abc]# cat demo2
this is test
[root@localhost abc]#
xfsdunp使用限制
- 只能备份已挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份XFS文件系统
- 备份后的数据只能让xfsrestore解析
- 不能备份两个具有相同UUID的文件系统
日志文件
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
-
内核及系统日志
- 由系统服务syslog统一进行管理,日志格式基本相似
-
用户日志
- 记录系统用户登录及退出系统的相关信息
-
程序日志
- 由各种应用程序独立管理的日志文件,记录格式不统一
日志需要服务启动之后才会进行有
访问之后才会有记录,才能看到日志记录
日志保存位置
- 默认位于:/var/log目录下
主要日志文件介绍
内核及系统日志
由系统服务rsyslogd统一管理
-
软件包:rsyslog-7.4.7-16.el7.x86_64
-
主要程序:/sbin/rsyslogd
-
配置文件:/etc/rsyslog.conf
日志消息的级别
级别 | 影响 | |
---|---|---|
0 | EMERG(紧急) | 会导致主机系统不可用的情况 |
1 | ALERT(警告) | 必须马上采取措施解决的问题 |
2 | CRIT(严重) | 比较严重的情况 |
3 | ERR(错误) | 运行出现错误 |
4 | WARNING(提醒) | 可能会影响系统功能的事件 |
5 | NOTICE(注意) | 不会影响系统但值得注意 |
6 | INFO(信息) | 一般信息 |
7 | DEBUG(调试) | 程序或系统调试信息等 |
日志记录的一般格式
用户日志分析
保存了用户登录、退出系统等相关信息
- /var/log/lastlog:最近的用户登录事件
- /var/log/wtmp:用户登录、注销及系统开、关机事件
- /var/run/utmp:当前登录的每个用户的详细信息
- /var/log/secure:与用户验证相关的安全性事件
分析工具
- users、who、w、last、lastb
last 之前登陆的用户
lastb 哪些用户用户尝试登陆但未登录成功(登录失败)
程序日志分析
由相应的应用程序独立进行管理
-
Web服务:/var/log/httpd/
- access_log、error_log
-
代理服务:access.log、cache.log
-
FTB服务:/var/log/xferlog
分析工具
- 文本查看、grep过滤检索、Webmnin管理套件中查看
- awk、sed等文本过滤、格式化编辑工具
- Webalizer、Awstats等专用日志分析工具
日志管理策略
- 及时做好备份和归档
- 延长日志爆粗期限
- 控制日志访问权限
- 日志中可能会包含各类敏感信息,如账户、口令等
- 集中管理日志
- 将服务器的日志文件发到统一的日志文件服务器
- 便于日志信息的统一手机、整理和分析
- 杜绝日志信息的意外丢失、恶意篡改或删除
内容总结
- block与inode
- 硬链接与软链接
- 恢复误删除的文件
- Linux主要包含的日志文件
- Linux系统的日志消息级别
- Linux系统中用户日志的查询命令
- who、w、users、last、lastb