目录
一、inode和block概述
1、block(块)
2、inode(索引节点)
3、inode的内容
4、cp和inode
5、mv和inode
6、硬盘分区后的结构
7、访问文件的简单流程
8、inode的大小
9、inode的特殊作用
二、硬链接与软链接
1、硬链接
2、软链接
3、两者的区别
三、恢复误删除的文件
四、恢复xfs类型文件
1、xfsdump命令格式
2、xfsdump备份级别
3、常用选项
4、xfsrestore命令格式
5、xfsdump 使用 限制
6、操作过程
五、日志文件
1、日志的功能
2、日志文件的分类
3、日志保存的位置
4、主要日志文件介绍
5、日志文件的格式
六、内核及系统日志
1、日志消息的级别
2、程序日志分析
3、日志管理策略
七、总结
文件数据包括元信息与实际数控
文件存储在硬盘上,硬盘最小的存储单位是“扇区”,每个扇区存储512字节
连续的八个扇区组成一个block
是文件存取的最小单位
中文译名为“索引节点”,也叫i节点
用于存储文件元信息
inode包含很多的文件云信息,但不包括文件名
每一个inode表记录对应的保存了以下信息:
inode number 节点号
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
使用stat命令可以查看文件的inode信息
[root@localhost ~]#stat anaconda-ks.cfg 文件:"anaconda-ks.cfg" 大小:1766 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:100663365 硬链接:1 权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root) 环境:system_u:object_r:admin_home_t:s0 最近访问:2021-09-10 01:14:01.995561720 +0800 最近更改:2021-09-10 01:10:07.338972865 +0800 最近改动:2021-09-10 01:10:07.338972865 +0800 创建时间:- [root@localhost ~]#
Linux系统文件有三个主要的时间属性,分别是最近访问时间、最近更改时间、最近改动时间,新建文件的时候,三种状态时间是一样的
写内容(echo没打开),最好两种变
修改权限,只有最后一种变--最近改动
vim打开,只有第一种变
Linux系统中一切皆文件,因此目录也是文件的一种
目录文件的结构
Linux系统内部不使用文件名,而使用inode号码来识别文件,对于用户,文件名只是inode号码便于识别的别称
cp 命令:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
rm 命令:
硬链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
如果mv命令的目标和源在同一设备,
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
inode也会消耗硬盘空间
每个inode的大小一般是128字节或256字节
格式化文件系统时确定inode总数
使用df -i 命令可以查看每个硬盘分区的inode总数和已使用的数量
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
移动或重命名文件时,只改变文件名,不影响inode号码
打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
同一个文件取不同的名或者叫多个名字,不支持文件夹,创建一个连接数加一,多路径访问。
命令进本格式:ln
软链接就是在创立一个文件,而这个文件会让数据的读取指向它连接的那个文件名
命令进本格式:ln [-s] 源文件或目录… 链接文件或目标位置
对比项 | 硬链接 | 软链接 |
本质 | 本质是同一个文件夹 | 不是同一个文件夹 |
inode | 相同 | 不相同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数会减少 | 删除新建不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接的访问不受影响 | 无法访问链接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同 | 源文件路径的长度 |
我们删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录 里面的 block 中,删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。
在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情 况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收 站”找回的情况,比如使用“rm -rf”来删除数据。针对 Linux 下的 EXT 文件系统,可用的恢复 工具有 debugfs、ext3grep、extundelete 等。 其中 extundelete 是一个开源的 Linux 数据 恢复工具,支持 ext3 文件系统。
1、使用 extundelete 工具恢复误删除的文件
1.编译安装extundelete
在编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel,这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。
[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs [root@localhost ~]#cd /opt [root@localhost opt]#ls rh [root@localhost opt]#rm -rf * [root@localhost opt]#ls [root@localhost opt]#rz -E rz waiting to receive. [root@localhost opt]#ls extundelete-0.2.4.tar.bz2 [root@localhost opt]#tar jxvf extundelete-0.2.4.tar.bz2 [root@localhost opt]#ls extundelete-0.2.4 extundelete-0.2.4.tar.bz2 [root@localhost opt]#cd extundelete-0.2.4/ [root@localhost extundelete-0.2.4]# [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 -s all-recursive Making all in src extundelete.cc: 在函数‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’中: extundelete.cc:1272:29: 警告:在 {} 内将‘search_flags’从‘int’转换为较窄的类型‘ext2_ino_t {aka unsigned int}’ [-Wnarrowing] buf, match_name2, priv, 0}; ^ [root@localhost extundelete-0.2.4]#make install Making install in src /usr/bin/install -c extundelete '/usr/local/bin'
2.模拟删除并执行恢复操作
1)使用fdisk命令创建新分区,将其挂载到/tmp目录下,往该目录下新建一些文件或目录
[root@localhost ~]#echo "- - -"> /sys/class/scsi_host/host0/scan [root@localhost ~]#echo "- - -"> /sys/class/scsi_host/host1/scan [root@localhost ~]#fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x84abcb2e 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x84abcb2e 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]#mkfs.ext3 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 [root@localhost ~]#mount /dev/sdb1 /tmp [root@localhost ~]#df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 50G 3.7G 47G 8% / devtmpfs devtmpfs 4.1G 0 4.1G 0% /dev tmpfs tmpfs 4.1G 0 4.1G 0% /dev/shm tmpfs tmpfs 4.1G 9.2M 4.1G 1% /run tmpfs tmpfs 4.1G 0 4.1G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 179M 836M 18% /boot /dev/mapper/centos-home xfs 45G 33M 45G 1% /home tmpfs tmpfs 839M 52K 839M 1% /run/user/0 /dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64 /dev/sdb1 ext3 9.8G 23M 9.2G 1% /tmp [root@localhost ~]#cd /tmp [root@localhost tmp]#echo a>a [root@localhost tmp]#echo a>b [root@localhost tmp]#echo a>c [root@localhost tmp]#echo a>d [root@localhost tmp]#ls a b c d lost+found
可以使用extundelete /dev/sdb1 --inode 2查看文件系统/dev/sdb1 下存在哪些文件,具体的使用情况。其中--inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂载之后,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。
2.模拟误操作并恢复
在恢复前需要先解挂载
使用“rm -rf a b”命令删除/tmp/下的a文件和b文件,当出现误操作时,立刻卸载该系统,然后使用“extundelete /dev/sdb1 --restore-all”恢复/dev/sdb1文件系统下的所有内容
执行完恢复的命令后,在当前目录下会出现一个/RECOVERED_FILES/目录,里面保存了已经恢复的文件。
[root@localhost tmp]#rm -rf a b [root@localhost tmp]#ls c d lost+found [root@localhost tmp]#cd [root@localhost ~]#umount /tmp/ [root@localhost ~]#extundelete /dev/sdb1 --restore-all NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 80 groups loaded. Loading journal descriptors ... 56 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 ~]#ls anaconda-ks.cfg RECOVERED_FILES 模板 图片 下载 桌面 initial-setup-ks.cfg 公共 视频 文档 音乐 [root@localhost ~]#cd RECOVERED_FILES [root@localhost RECOVERED_FILES]#ls a b [root@localhost RECOVERED_FILES]#
xfsdump -f 备份存放的位置 要备份的路径或设备文件
默认为0
0:完全备份
1-9:增量备份
-f:指定备份文件目录
-L:指定标签 session label
-M:指定设备标签 media label
-s:备份单个文件,-s 后面不能直接跟路径
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
不支持没有挂载的文件系统备份,所以只能备份已挂载的;
必须使用 root 的权限才能操作;
只能备份 XFS 文件系统;
备份下来的数据只能让 xfsrestore 解析;
不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)
先添加一块磁盘
[root@localhost ~]#echo "- - -"> /sys/class/scsi_host/host0/scan [root@localhost ~]#echo "- - -"> /sys/class/scsi_host/host1/scan [root@localhost ~]#echo "- - -"> /sys/class/scsi_host/host2/scan [root@localhost ~]#fdisk -l
查看 xfsdump 是否安装,未安装可以使用yum安装
[root@localhost ~]#rpm -q xfsdump xfsdump-3.1.4-1.el7.x86_64
新建分区,格式化成xfs格式,挂载,把文件拷入,备份分区,并打上标记
[root@localhost ~]#fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xbaaa9001 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xbaaa9001 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]#mkfs.xfs /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@localhost ~]#mkdir /ding [root@localhost ~]#mount /dev/sdb1 /ding [root@localhost ~]#df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 50G 3.6G 47G 8% / devtmpfs devtmpfs 4.1G 0 4.1G 0% /dev tmpfs tmpfs 4.1G 0 4.1G 0% /dev/shm tmpfs tmpfs 4.1G 9.2M 4.1G 1% /run tmpfs tmpfs 4.1G 0 4.1G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 179M 836M 18% /boot /dev/mapper/centos-home xfs 45G 33M 45G 1% /home tmpfs tmpfs 839M 52K 839M 1% /run/user/0 /dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64 /dev/sdb1 xfs 10G 33M 10G 1% /ding [root@localhost ~]#cd /ding [root@localhost ding]#cp /etc/passwd ./ [root@localhost ding]#ls passwd [root@localhost ding]#xfsdump -f /opt/dump_sdb1 /dev/sdb1 -L dump_sdb1 -M sdb1 xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control xfsdump: level 0 dump of localhost.localdomain:/ding xfsdump: dump date: Sat Sep 25 12:27:41 2021 xfsdump: session id: 1fb2ce51-54e9-4d4f-93b0-3c29a985a6bb xfsdump: session label: "dump_sdb1" 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: 25216 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 24264 bytes xfsdump: dump size (non-dir files) : 2592 bytes xfsdump: dump complete: 0 seconds elapsed xfsdump: Dump Summary: xfsdump: stream 0 /opt/dump_sdb1 OK (success) xfsdump: Dump Status: SUCCESS [root@localhost ding]#ls /opt/ dump_sdb1 rh
模拟数据丢失后恢复
[root@localhost ding]#rm -rf * [root@localhost ding]#ls [root@localhost ding]#cd [root@localhost ~]# xfsrestore -f /opt/dump_sdb1 /ding/ xfsrestore: using file dump (drive_simple) strategy xfsrestore: version 3.1.4 (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: /ding xfsrestore: volume: /dev/sdb1 xfsrestore: session time: Sat Sep 25 12:27:41 2021 xfsrestore: level: 0 xfsrestore: session label: "dump_sdb1" xfsrestore: media label: "sdb1" xfsrestore: file system id: 3861965d-3e3b-479c-a486-66693a430767 xfsrestore: session id: 1fb2ce51-54e9-4d4f-93b0-3c29a985a6bb xfsrestore: media id: 9a80fb47-47c0-478f-b64d-7dc714ddb2f3 xfsrestore: using online session inventory xfsrestore: searching media for directory dump xfsrestore: reading directories xfsrestore: 1 directories and 1 entries processed xfsrestore: directory post-processing xfsrestore: restoring non-directory files xfsrestore: restore complete: 0 seconds elapsed xfsrestore: Restore Summary: xfsrestore: stream 0 /opt/dump_sdb1 OK (success) xfsrestore: Restore Status: SUCCESS [root@localhost ~]#ls /ding/ passwd
用于记录系统、乘车运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
1.内核及系统日志
由系统服务rsyslog同一管理,日志格式基本相似
2.用户日志
记录系统用户登录及退出系统的相关信息
3.程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
默认位于:/var/log目录下
日志文件位置 | 日志文件说明 |
/var/log/messages内核和公共日志 | 它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已及用户自定义安装软件的日志,也会在这里列出。 |
/var/log/cron 计划任务日志 | 记录与系统定时任务相关的曰志 |
/var/log/dmesg 系统引导日志 | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/maillog 邮件日志 | 记录邮件信息的曰志 |
用户日志 | |
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看 |
/var/log/secure | 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看 |
/var/tun/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看 |
日志文件的格式包括以下四列:
1.事件产生的时间
2.产生事件的服务器的主机名
3.产生事件的服务名或程序名
4.事件的具体信息
由系统服务rsyslog统一管理
日志的配置文件 位置在 /etc/rsyslog.conf
Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。
由相应的应用程序独立进程管理
web服务:/var/log/httpd/
access_log、error_log
代理服务:/var/log/squid/
access_log、cache_log
FTP服务:/var/logxferlog/
分析工具
1.文件查看、grep过滤检索、webmin管理套件中查看
2.awk、sed等文本过滤、格式化编辑工具
3.webalizer、awstats等专用日志分析工具
1.及时做好备份和归档
2.延长日志保存期限
3.控制日志访问权限
日志中可能会包含各类敏感信息,如账户、口令等
4.集中管理日志
将服务器的日志文件发到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
掌握误删恢复的方法