浅析Linux文件(一)inode与block、硬链接与软链接、恢复误删文件

一、inode与block

1.inode和block概述

文件数据包括元信息与实际数据,一个文件必须占用一个inode,但至少占用一个block。

扇区:文件存储在硬盘上,硬盘的最小存储单位是扇区,每个扇区存储空间是512字节。
block(块):连续的八个扇区组成一个block,block是文件存取的最小单位,用来存储文件数据。
inode(索引节点):也叫i节点,用于存储文件元信息。

2.inode的理解

(1)inode包含文件元信息:

  • 文件的字节数
  • 文件拥有者的User ID(UID)
  • 文件的Group ID(GID)
  • 文件具有的读、写、执行权限
  • 文件的时间戳(atime、ctime、mtime)

当我们想查看某个文件的inode信息时,使用的是“stat”命令,后面直接接文件的路径和名称即可。

[[email protected] opt]# stat test/
  文件:"test/"
  大小:24         块:0          IO 块:4096   目录
设备:802h/2050d   Inode:33574981    硬链接:2
权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2019-08-28 11:39:33.953003238 +0800
最近更改:2019-08-28 11:39:20.023004045 +0800
最近改动:2019-08-28 11:39:20.023004045 +0800
创建时间:-
[[email protected] opt]# 

(2)文件的三个主要时间属性:

  • atime(access time):最后一次访问文件或目录的时间
  • ctime(change time):最后一次改变文件或目录(属性)的时间
  • mtime(modify time):最后一次修改文件或目录(内容)的时间

3.inode号码

每一inode都有一个号码,操作系统是通过inode号码来识别不同文件的。Linux系统内部是不使用文件名来识别文件的,对系统而言inode号码才是文件的名字。而文件名只是便于用户去记忆的名字,相当于inode号码的别称。其实这就相当于咱们的手机通讯录,咱们平时只要记住联系人的名字就可以拨通他的手机,但真正用来连接通话的是你保存在通讯录中的手机号码。移动或重命名文件时,只会改变文件名,inode号码是不变的。

(1)用户通过文件名打开文件时,系统内部过程如下:

  • 系统首先会找到这个文件名对应的inode号码
  • 通过inode号码获取inode信息(查看元信息,看是否有访问权限)
  • 根据inode信息,找到文件数据所在的block,读出数据

(2)查看inode号码的方法:

ls -i命令:查看文件名对应的inode号码

[[email protected] opt]# ls -i test/
34964204 test01.txt
[[email protected] opt]#

stat命令:查看文件inode信息中的inode号码

[[email protected] opt]# stat test/test01.txt
  文件:"test/test01.txt"
  大小:13         块:8          IO 块:4096   普通文件
设备:802h/2050d   Inode:34964204    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2019-08-28 11:39:34.875003185 +0800
最近更改:2019-08-28 11:39:20.023004045 +0800
最近改动:2019-08-28 11:39:20.023004045 +0800
创建时间:-
[[email protected] opt]# 

4.inode的大小

inode也会消耗硬盘空间,每个inode的大小一般是128字节或256字节,在格式化文件系统时会确定inode的总数。

df -i命令:查看每个硬盘分区的inode总数和已使用数量

[[email protected] opt]# df -i
文件系统          Inode        已用(I)        可用(I)       已用(I)% 挂载点
/dev/sda2      10485760  121223   10364537          2% /
devtmpfs         229705     368          229337           1% /dev
tmpfs            233378        1                233377         1% /dev/shm
tmpfs            233378         599           232779       1% /run
tmpfs            233378        16             233362         1% /sys/fs/cgroup
/dev/sda5     5241856     144          5241712       1% /home
/dev/sda1     3145728     328          3145400       1% /boot
tmpfs            233378         6             233372         1% /run/user/42
tmpfs            233378         20           233358         1% /run/user/0
[[email protected] opt]# 

5.inode的特殊作用

当我们删除文件的文件名中包含有无法用键盘敲出的特殊字符,就导致我们无法删除文件。此时我们可以直接通过inode来删除文件。

二、硬链接与软链接

在linux系统中有种文件是链接文件,可以为解决文件的共享使用。链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。

在Linux系统中,多个文件名指向同一个inode,一般这种链接就称为硬链接。硬链接的作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止误删重要文件,不过硬链接只能在同一文件系统中的文件之间进行链接,而且不能对目录进行创建。文件名其实就相当于硬链接,当我们给文件建立了硬链接后,再去删除它的源文件,就相当于删除了其中一个硬链接。但它的元信息和数据任然在inode与block中存储着。当最后一个硬链接被删除后,它的元信息和数据任然在,但是系统会将它的inode号码释放到号码池,当有一个新文件获取了这个inode号码后,它的元信息和数据才会被覆盖。

软链接,其实与windows系统中的快捷方式很相似,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。软链接可对文件或目录创建,当源文件被删除后,软链接也就失效了。

ln命令:创建硬链接。

[[email protected] test]# ls
test01.txt
[[email protected] test]# ls -l
总用量 4
-rw-r--r--. 1 root root 13 8月  28 11:39 test01.txt
[[email protected] test]# ln test01.txt t01.txt
[[email protected] test]# ls -i
34964204 t01.txt  34964204 test01.txt
[[email protected] test]# ls -l
总用量 8
-rw-r--r--. 2 root root 13 8月  28 11:39 t01.txt
-rw-r--r--. 2 root root 13 8月  28 11:39 test01.txt
[[email protected] test]#

我们可以看到,文件和它的硬链接的inode号码是相同的,所以无论我们用哪个打开它的内容都是相同的。

ln -s命令:创建软链接

[[email protected] test]# ls
test01.txt
[[email protected] test]# ln -s test01.txt t01.txt
[[email protected] test]# ls
t01.txt  test01.txt
[[email protected] test]#

file命令:查看文件类型

[[email protected] test]# file test01.txt
test01.txt: ASCII text
[[email protected] test]# cd ../
[[email protected] opt]# file test/
test/: directory
[[email protected] opt]# 

三、恢复误删文件

1.恢复Linux6版本的EXT4类型的文件

安装extundelete软件包,先安装它的依赖包。

输入:cd /mnt/Packages/
输入:rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
输入:rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
输入:rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm
输入:rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm

我们先新建一个目录,再将我们本地的工具包挂载到目录中。

输入:mkdir /extundel
输入:mount.cifs //192.168.100.50/share/ /extundel/
输入:df -h

将挂载过来的工具压缩包解压到“/opt/”目录中

输入:cd /extundel/
输入:tar jxvf extundelete-0.2.4.tar.bz2 -C /opt/

用“cd”命令进入“/opt/extundelete-0.2.4/”目录,安装编译器,因为现在的源码包是用C语言写的,不能直接用。

输入:cd /opt/extundelete-0.2.4/
输入:yum install gcc gcc-c++ -y

编译安装extundelete工具。

输入:./configure
输入:make
输入:make install

添加一块磁盘,对磁盘进行配置,配置完后,将磁盘分区格式化,文件格式为ext4,再创建一个目录“/data/”,并将磁盘分区挂载到目录下。

进入到“/data/”目录,创建三个文件a、b、c。然后再将三个文件删除,模拟文件误删。

我们先返回宿主目录,然后将sdb1解挂载。然后用“extundelete /dev/sdb1 --restore-all”来恢复删除的所有文件。注意:当你误删文件后,第一时间一定要将设备解挂载,因为如果有新的文件将删除的文件inode号给占用了就无法恢复了。(工作环境中一定要注意备份)

我们用“cd”命令进入到“RECOVERED_FILES/”目录中就能看到恢复的文件了。

2.恢复Linux7版本中的XFS类型文件。

xfsdump命令:备份系统文件

格式:xfsdump -f 备份存放位置 要备份的路径或设备文件
常用选项:

-f:-------------------指定备份文件位置
-L:------------------指定备份会话标签(免交互)
-M:-----------------指定设备标签(免交互)
-s:------------------备份指定的文件,使用相对路径,相对于备份的文件系统路径

xfsrestore命令:恢复备份的系统文件

格式:xfsrestore -f 恢复文件的位置 存放恢复后文件的位置

常用选项:

-f:-----------------------指定备份文件位置
-s:----------------------恢复指定文件恢复
-t:-----------------------查看文件的内容及详细信息

首先添加一块硬盘,然后对其进行配置分区,再格式化将文件类型格式化为xfs格式,挂载到新建的目录“/data/”下。

复制passwd文件到“/data/”目录下,然后在“/data/”目录里新建一个“test”目录,并在目录里创建一个空文件。

退出“/data/”目录,然后将sdb1分区的文件备份到“/opt/”目录下,命名为“xfs_dump”

[[email protected] ~]# xfsdump -f /opt/xfs_dump /dev/sdb1                //备份命令
                                  ..................................                                           //省略部分
please enter label for this dump session (timeout in 300 sec)
 -> xfs_dump                                                                                       //输入备份后文件名
session label entered: "xfs_dump"
                                  .....................................                                     //省略部分
please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb1                                                                                            //输入备份分区
media label entered: "sdb1"
                                   .........................................                           //省略部分
xfsdump: Dump Status: SUCCESS

删除“/data/”目录下的所有文件,模拟文件误删。

删除完毕我们通过xfsrestore命令将文件恢复到“/data/”目录中去。

xfsdump使用限制:

  • 只能备份已挂载的文件系统
  • 必须使用root的权限才能操作
  • 只能备份XFS文件系统
  • 备份后的数据只能让xfsrestore解析
  • 不能备份两个具有相同UUID的文件系统

原文地址:https://blog.51cto.com/14449541/2433415

时间: 2024-10-26 20:49:33

浅析Linux文件(一)inode与block、硬链接与软链接、恢复误删文件的相关文章

Linux基本命令学习(三)——硬链接与软链接、权限管理

17.链接文件 是对文件的引用,这样可以让文件在文件系统中多处被看到 Linux链接文件分为两种:硬链接和软链接(符号链接) 软硬链接的区别:        (1)建立硬链接时链接文件和被链接文件必须位于同一文件系统中,而建立软链接时,链接文件和被链接文件可以位于不同的文件系统,甚至可以跨越机器 (2)硬链接指向一个原始文件时,及时原始文件被删除,链接文件依然有效,而软链接一旦原始文件被删除,链接文件立马失效 ln [-option] 源文件 目标文件 -d 创建一个硬链接,默认为该参数 -s

Linux硬链接和软链接

1.硬链接:文件别名通过前面讲的Linux ext2文件系统,我们知道在目录文件的block中,存放着目录下文件的文件名和对应的inode.可以将多个文件名对应到同一个inode,新建一条文件名链接到某inode号,这就是硬链接. 可以看出,硬链接只是新建了一个文件名,关联到一个已存在的文件.此时,目录下的block多写了一个文件名/inode的数据所以,硬链接没有增加inode和block的耗用. 2.软链接:类似windows中的快捷方式软链接的实质是,创建了一个独立的文件,而读取这个文件时

Linux Centos的Inode及Block相关知识

本经验均在CentOSrelease6.7(Final)下操作,如知识有欠缺之处 欢迎批评指正. linux 的inode及block的相关知识: 1>  Linux系统分区格式化文件系统之后,系统会分为Inode及Block两部分: 1)Inode为系统文件的属性信息(ls -l的结果)及指向文件实体的指针,但是没有存放文件名,一般在上级目录里的Block. 2)Block为存放数据的,ext3/ext4一般为1k,2k,4k,一般默认4k 3)一个文件不论多大至少占用一个Inode和一个Bl

[svc]linux的inode和block-软硬链接

磁盘结构 容量 磁盘结构 磁盘容量 = 一个柱面大小柱面的总数 = 磁头数量每个磁道上的扇区数一个扇区大小柱面总数 存储容量=磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数 了解-什么是CHS(cylinder head sector) 磁盘存储最小单位是sector,那么如何对sector进行定位? CHS是早期在IBM PC架构上面用来进行磁盘寻址的办法. CHS是一个三元组,组成如下: 1. 一共24个 bit位. 2. 其中前10位表示cylinder,中间8位表示head

(转)Linux硬链接、软链接及inode详解

inode 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由多个扇区组成的"块",是文件存取的最小单位."块"的大小,最常见的是4KB,即连续八个 sector组成一个 block. 文件数据都储存在"块"中,那么

Linux中inode详解,硬链接和软链接介绍

inode 详解   在Linux中,我们经常会做一些关于数据的操作(备份.传输.压缩等)或是要在后台持续的运行一些程序.由于,工作的数据量很大或者工作要持续很长的时间,我们就必须保证这个终端的启动,一旦终端关闭了,它所运行的进程也会关闭,我们所做的工作就可能前功尽弃.但是,即使我们不主动的关闭终端,终端有的时候也会应为一些原因(网络.锁屏等)而中断,导致我们的工作进度清零. 1.inode 定义 inode是用来存储文件元信息的区域.中文译名叫做"索引节点".   简单来说,inod

Linux - 操作系统查找文件的过程以及硬链接与软链接的区别

例:系统查找文件/var/log/messages的过程 内核知道 / 的inode号,根据这个inode可以查找到 / 对应的的磁盘块,磁盘块内存放有 / 下面的目录以及对应的inode号,接着根据var的inode号找到 var 对应的磁盘块,里面含有log目录对应的inode号,接着根据log的inode号找到log的磁盘块,接着根据message的inode号找到messages对应的磁盘块,即找到messages文件 硬链接 访问同一个文件的2个路径,inode号相同,文件大小相同 软

第4章 文件和目录(3)_文件系统结构及软、硬链接

3. Linux文件系统结构 3.1 文件系统结构 (1)超级块 文件系统中的第一个块被称为超级块.这个块存放文件系统本身的信息.比如,记录了每个区域的大小,也存放了未被使用的磁盘块的信息.其包含的信息如下: 主要域 含义 Magic Number 用来检验是否是一个真正的EXT2文件系统超级块 Revision Level 主从修订版本号.让安装代码据此判断文件系统是否支持只存在于某个特定版本文件系统中的属性. Block Group Number 超级块的组数量 Block Size 以字节

转:理解 Linux 的硬链接与软链接

Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程 创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式.换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性.为了便于文件的管理,Linux 还引入了目录(有时亦被称为文件夹)这一概念.目录使文件可被分类管理,且目录的引入使 L