一、Linux 文件系统
在处理 Linux 系统出现的各种故障时,故障的症状是最易发现的,而导致这一故障的原因才是最终排除故障的关键。熟悉 Linux 系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点、“对症下药”、并及时解决各种系统问题。
inode 与 block 详解
- 文件存储再硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
- 文件数据包括元信息与实际数据
- 元信息包含文件属性信息,文件打开来输入的内容为实际数据
- block(块)
- 连续的八个扇区组成一个block (4k)
- 是文件存取的最小单位
- inode(索引节点)
- 中文译名为“索引节点”,也就i节点
- 用于存储文件元信息
inode的内容
inode包含文件的元信息
- 文件的字节数
- 文件拥有着的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件的时间戳
- ……
使用stat命令查看inode信息
[root@localhost mnt]# stat abc.txt //查看abc文件inode信息
文件:”abc.txt”
大小:12 块:8 IO 块:4096 普通文件
设备:802h/2050d Inode:18123362 硬链接:1
权限:(0644/-rw-r–r–) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:mnt_t:s0
最近访问:2019-09-02 04:12:18.210370997 +0800
最近更改:2019-09-02 04:12:18.210370997 +0800
最近改动:2019-09-02 04:12:18.210370997 +0800
创建时间:-
Linux系统文件三个主要的时间属性
- ctime(change time):最后一次改变文件或目录(属性)的时间
- atime(access time):最后一次访问文件或目录的时间
- mtime(modify time):最后一次修改文件或目录(内容)的时间
目录文件的结构
- 目录也是文件
- 目录文件的结构
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件
- Linux系统内部不使用文件名,而使用inode号命来识别文件
- 对于用户来说,文件名只是inode号码便于识别的别称
inode的号码
- 用户通过文件名打开文件时,系统内部的过程
- 系统找到这个文件名对应的inode号码
- 通过inode号码,获取inode信息
- 根据inode信息,找到文件数据所在的block,读出数据
- 查看inode号码的方法
- ls -i命令:查看文件名对应的inde号码
[root@localhost mnt]# ls -i abc.txt //查看文件节点信息
18123362 abc.txt
inode的大小
- inode也会消耗硬盘空间,每个inode的大小,一般时128字节或256字节
- 格式化文件系统时确定inode的总数
- 使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
[root@localhost mnt]# df -i //查看分区节点信息
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda2 10485760 121203 10364557 2% / devtmpfs 229708 376 229332 1% /dev tmpfs 233381 1 233380 1% /dev/shm tmpfs 233381 560 232821 1% /run tmpfs 233381 16 233365 1% /sys/fs/cgroup /dev/sda5 5241856 146 5241710 1% /home /dev/sda1 3145728 328 3145400 1% /boot tmpfs 233381 6 233375 1% /run/user/42 tmpfs 233381 17 233364 1% /run/user/0 /dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
inode的特殊作用
- 由于inode号码与文件名分离,导致一些Linux系统具有以下的现象
- 当文件名包换特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
- 按节点号删除文件命令:find ./* -inum [节点号] -delete
[root@localhost mnt]# ls -i 16777284 ac1.txt 18123362 ac2.txt 18123366 ac3.txt 18123370 ac4.txt 18123371 ac5.txt [root@localhost mnt]# find ./* -inum 16777284 -delete [root@localhost mnt]# ls -i 18123362 ac2.txt 18123366 ac3.txt 18123370 ac4.txt 18123371 ac5.txt
- 移动或重命名文件时,只改变文件名,不影响inode号码
[root@localhost mnt]# ls -i 18123362 ac2.txt 18123366 ac3.txt 18123370 ac4.txt 18123371 ac5.txt [root@localhost mnt]# mv ac2.txt /opt [root@localhost mnt]# ls -i /opt 18123362 ac2.txt 1389838 rh
- 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
访问文件的简单流程
xfs 类型文件备份和恢复
xfs文件的恢复需要我们先把文件备份到另一块磁盘,当文件损坏时可以通过备份的文件进行恢复(这里面的备份文件是通过对文件做固定格式的压缩来进行备份)。
- xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。若系统中未安装xfsdump 与 xfsrestore 工具,可以通过yum来安装工具。
[root@localhost mnt]# yum install xfsdump -y 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn 正在解决依赖关系 --> 正在检查事务 ---> 软件包 xfsdump.x86_64.0.3.1.4-1.el7 将被 升级 ---> 软件包 xfsdump.x86_64.0.3.1.7-1.el7 将被 更新 ...//省略部分内容...
- 命令格式
xfsdump -f 备份存放位置 要备份的路径或设备文件
- xfsdump 的备份级别有两种
- 0:表示完全备份(默认为0)
- 1~9:表示增量备份
- 常用的备份参数
- -f:指定备份文件目录
- -L:指定标签 session label
- -M:指定设备标签 media label
- -s:备份单个文件,-s 后面不能直接跟路径。
[root@localhost ~]# fdisk /dev/sdb //创建新磁盘 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x57599cea 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039): 将使用默认值 41943039 分区 1 已设置为 Linux 类型,大小设为 20 GiB 命令(输入 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=1310656 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=5242624, 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 /opt/data //创建挂载点 [root@localhost ~]# mount /dev/sdb1 /opt/data //挂载创建的磁盘 [root@localhost ~]# cp /etc/passwd /opt/data //将passwdd目录复制到挂载的磁盘中 [root@localhost ~]# ls /opt/data //查看文件 passwd [root@localhost ~]# xfsdump -f /mnt/xfs_dump /dev/sdb1 //使用命令备份文件 xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control ============================= dump label dialog ============================== please enter label for this dump session (timeout in 300 sec) -> xfs_dump //输入备份的文件名 session label entered: "xfs_dump" --------------------------------- end dialog --------------------------------- xfsdump: level 0 dump of localhost.localdomain:/opt/data xfsdump: dump date: Mon Sep 2 05:27:29 2019 xfsdump: session id: 96c17954-e969-4041-9d9e-4bd59746ddab xfsdump: session label: "xfs_dump" 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 ============================= media label dialog ============================= please enter label for media in drive 0 (timeout in 300 sec) -> sdb1 //输入要备份设备 media label entered: "sdb1" --------------------------------- end dialog --------------------------------- 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: 13 seconds elapsed xfsdump: Dump Summary: xfsdump: stream 0 /mnt/xfs_dump OK (success) xfsdump: Dump Status: SUCCESS //备份成功 [root@localhost ~]# rm -rf /opt/data/* //删除磁盘中文件 [root@localhost ~]# ls /opt/data //查看文件是否删除 [root@localhost ~]# xfsrestore -f /mnt/xfs_dump /opt/data //执行命令恢复文件 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: /opt/data xfsrestore: volume: /dev/sdb1 xfsrestore: session time: Mon Sep 2 05:27:29 2019 xfsrestore: level: 0 xfsrestore: session label: "xfs_dump" xfsrestore: media label: "sdb1" xfsrestore: file system id: 2e3df4e8-dd92-46f7-84ca-f254c4e579bd xfsrestore: session id: 96c17954-e969-4041-9d9e-4bd59746ddab xfsrestore: media id: d27aafc8-a405-4a8f-b7f0-1a018a7026ee 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 /mnt/xfs_dump OK (success) xfsrestore: Restore Status: SUCCESS
[root@localhost ~]# ls /opt/data //查看文件是否恢复
passwd //成功恢复文件
- xfsdump使用的限制
- 只能备份已挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份XFS文件系统
- 备份后的数据只能让xfsrestore解析
- 不能备份两个具有相同UUID的文件系统
评论前必须登录!
注册