【文件恢复】——linux文件系统

1.inode & block

在这里插入图片描述

blockdev --getbsz [分区设备名]:查看指定分区设备的块大小;

[root@clr /etc/yum.repos.d]# fdisk -l

磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00099d02

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *     2099200    79771647    38836224   83  Linux
/dev/sda2       117698560   125829119     4065280    5  Extended
/dev/sda5       117700608   125829119     4064256   82  Linux swap / Solaris
[root@clr /etc/yum.repos.d]# blockdev --getbsz /dev/sda2  查看指定分区设备/dev/sda2的块大小
1024
[root@clr /etc/yum.repos.d]# blockdev --getbsz /dev/sda1  查看指定分区设备/dev/sda1的块大小
512
[root@clr /etc/yum.repos.d]# blockdev --getbsz /dev/sda5  #查看指定分区设备/dev/sda5的块大小
4096

1.1 inode的内容

在这里插入图片描述

在这里插入图片描述

stat [文件名]:查看某个指定文件的元信息;

[root@clr ~]# cat pass.txt
ha512.10000.79C719DBC672ABED1C05806253D2F8051DE25EDB68998862E02CB2ED48D43F1816CFE7CD93AAF0B5413949ADBD2565B229399FC2523754EFEA2FDCA17CECA872.129856E391465F16EEEE85FA39B68B0F2A49484ABCF42A2258F35991A8FDED2DFB2EE83F6BDAB1F671DE8717FA6C63D3CA7000A7FE808BD1E5C1FE130564684F

[root@clr ~]# stat pass.txt   #查看某个指定文件pass.txt的元信息
  文件:"pass.txt"
  大小:271 #文件大小    	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:33556183    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-04-13 22:58:55.865565715 +0800  #打开指定文件,更改访问该文件的时间属性atime
最近更改:2023-04-13 16:09:48.913816984 +0800 #打开指定文件,修改该文件内容的时间属性mtime
最近改动:2023-04-13 16:09:48.913816984 +0800 #打开指定文件,修改该文件属性的时间属性ctime
创建时间:-

ctime:(change time)更改文件或目录权限的时间属性;

[root@clr ~]# chmod +x pass.txt  #修改pass.txt文件的执行权限
[root@clr ~]# stat pass.txt   #查看某个指定文件pass.txt的元信息
  文件:"pass.txt"
  大小:271       	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:33556183    硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-04-13 22:58:55.865565715 +0800
最近更改:2023-04-13 16:09:48.913816984 +0800
最近改动:2023-04-13 23:00:56.973234093 +0800  #修改文件权限后,将改动文件属性ctime
创建时间:-

mtime:(modify time)最后一次修改文件或目录内容的时间属性;

[root@clr ~]# echo 123 > pass.txt  #将123写入到pass.txt文件中
[root@clr ~]# stat pass.txt   #查看某个指定文件pass.txt的元信息
  文件:"pass.txt"
  大小:4         	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:33556183    硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-04-13 22:58:55.865565715 +0800
最近更改:2023-04-13 23:01:45.957504432 +0800  #更改文件内容,将会修改mtime时间属性
最近改动:2023-04-13 23:01:45.957504432 +0800  #文件大小发生变化,将会修改文件的属性,也就是元信息发生改变
创建时间:-

在这里插入图片描述

1.2 inode的号码

在这里插入图片描述

ls -i [文件名]:查看指定文件的inode号;

[root@clr ~]# ls -i pass.txt  #查看指定文件的inode号
33556183 pass.txt

find ./ -inum 33556183:根据指定inode号查找文件;

[root@clr ~]# find ./ -inum 33556183  #根据指定inode号查找文件
./pass.txt

1.3 inode的大小

在这里插入图片描述

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

[root@clr ~]# df -i    #查看每个硬盘分区的inode总数和已经使用的数量
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
devtmpfs         499338     370   498968       1% /dev
tmpfs            503270       1   503269       1% /dev/shm
tmpfs            503270    1449   501821       1% /run
tmpfs            503270      16   503254       1% /sys/fs/cgroup
/dev/sda1      19418112  161737 19256375       1% /
tmpfs            503270      19   503251       1% /run/user/0
/dev/sr0              0       0        0        - /mnt

1.4 inode的特殊作用

在这里插入图片描述

find ./ -inum 33556183 -exec rm -rf {} ; 根据inode号查找到指定文件并删除;

[root@clr ~]# ls -i  #查找文件的inode号
 33554498 anaconda-ks.cfg        33556183 pass.txt   33554544 模板   33554545 图片    1275277 下载  100744212 桌面
 33554500 initial-setup-ks.cfg   69173118 公共       69173119 视频  100744213 文档    1275278 音乐
[root@clr ~]# find ./ -inum 33556183 -exec rm -rf {} \;  #根据inode号查找到指定文件并删除
[root@clr ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面

移动或重命名文件时,只改变文件名,不影响inode号码,实例如下所示:

[root@clr /opt]# touch pass.txt
[root@clr /opt]# ll -i
总用量 5324
 69257231 -rw-r--r--. 1 root root       0 413 23:37 pass.txt  #新建文件pass.txt文件的inode号为 69257231
103458137 drwxr-xr-x. 2 root root       6 1031 2018 rh
[root@clr /opt]# mv pass.txt ~  #将该新建文件移动到根目录下
[root@clr /opt]# cd 

[root@clr ~]# ll -i
总用量 8
 33554498 -rw-------. 1 root root 1832 323 00:54 anaconda-ks.cfg
 33554500 -rw-r--r--. 1 root root 1880 323 01:05 initial-setup-ks.cfg
 69257231 -rw-r--r--. 1 root root    0 413 23:37 pass.txt  #移动文件,查看发现该文件的inode号并未发生改变

[root@clr ~]# mv pass.txt passwd  #将pass.txt文件重命名为passwd
[root@clr ~]# ll -i
总用量 8
 33554498 -rw-------. 1 root root 1832 323 00:54 anaconda-ks.cfg
 33554500 -rw-r--r--. 1 root root 1880 323 01:05 initial-setup-ks.cfg
 69257231 -rw-r--r--. 1 root root    0 413 23:37 passwd   #重命名文件,查看发现该文件的inode号并未发生改变

重定向修改文件内容,不会更改inode号,但在vim编辑器中修改文件内容,则会导致文件的inode号发生改变;

[root@clr ~]# ls -i passwd
69257231 passwd
[root@clr ~]# echo 123 >> passwd  #向passwd文件中重定向添加内容,不会更改文件的inode号
[root@clr ~]# ls -i passwd
69257231 passwd
[root@clr ~]# vim passwd   #使用vim编辑器向文件中添加内容,会更改文件的inode号

123
1223fs
[root@clr ~]# ls -i passwd
33823544 passwd   #文件的inode号发生改变

1.5 实例:模拟inode号被占满

模拟硬盘容量还有空间,但是文件inode号被占满的情况;

[root@clr /opt]# df -i
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
tmpfs            503269       1   503268       1% /run/user/0
/dev/sdb1          2560      11     2549       1% /data   #设备分区/dev/sdb1还有2549个inode号空间

[root@clr /data]# touch file{1..2549}^C  #一条命令创建2549个文件的方式一
[root@clr /data]# for ((a=1;a<=2549;a++))  #利用for循环变量,一次性创建2549个文件
> do
> touch file$a
> done

[root@clr /data]# ls
abc.txt   file1253  file1509  file1765  file202   file2276  file2531  file494  file75
file1     file1254  file151   file1766  file2020  file2277  file2532  file495  file750
file10    file1255  file1510  file1767  file2021  file2278  file2533  file496  file751

[root@clr /data]# df -i  
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点

tmpfs            503269       1   503268       1% /run/user/0
/dev/sdb1          2560    2560        0     100% /data  #可以看到此时/dev/sdb1分区设备中的可用inode号为0
[root@clr /data]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点

tmpfs          tmpfs     394M     0  394M    0% /run/user/0
/dev/sdb1      ext4      8.7M  229K  7.8M    3% /data  #但是分区设备/dev/sdb1的磁盘容量还有7.8M

磁盘有空间,但是仍然无法写入新文件的可能原因如下所示:

(1)inode号被占满

(2)磁盘出现问题的情况又分为:磁盘坏道文件系统出现问题

  • 磁盘坏道可以用badblocks命令查询:badblocks -v /dev/sda1 > ~/result.txt &
[root@clr /data]# badblocks -v /dev/sdb1 > ~/result.txt &    #因为硬盘检测需要很长时间,所以在 badblocks 命令之后需要加 & 让进程在后台处理,最后将操作结果重定输出到根目录下的result.txt 文件中
[1] 14478
[root@clr /data]# 正在检查从 0 到 10239的块
Checking for bad blocks (read-only test): done                                                 
Pass completed, 0 bad blocks found. (0/0/0 errors)
  • 文件系统出现问题,可以使用fsck 命令用于检查文件系统并尝试修复出现的错误:fsck [选项] [分区设备文件名]
[root@clr /data]# fsck -a /dev/sdc1  #	检测设备/dev/sdc1,如果有问题,则自动修复文件系统,没有任何提示信息
fsck,来自 util-linux 2.23.2
/sbin/fsck.xfs: XFS file system.

在这里插入图片描述

1.6 文件存储小结

在这里插入图片描述

总结:查看文件包含以下几个过程:

(1)通过文件名查看文件所对应的inode号

(2)通过inode号获取文件的inode信息

(3)inode信息里面包含文件的元信息,对文件的权限以及其他属性信息

(4)根据权限,判断用户是否具有查看或者修改文件的操作

2. 链接文件

链接文件格式:

  • 硬链接

ln 源文件 目标位置

  • 软链接

ln -s 源文件或目录… 链接文件或目标位置

在这里插入图片描述

3.文件恢复

3.1 EXT类型文件恢复

在这里插入图片描述

注意:extundelete工具目前只能恢复ext类型的文件;

3.1.1 EXT类型文件恢复步骤

(1)使用fdisk创建分区/dev/sdd1,格式化ext3文件系统;

[root@clr ~]# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。

命令(输入 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):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@clr ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   60G  0 disk 
├─sda1   8:1    0   37G  0 part /
├─sda2   8:2    0    1K  0 part 
└─sda5   8:5    0  3.9G  0 part [SWAP]

sdd      8:48   0   20G  0 disk 
└─sdd1   8:49   0   20G  0 part  #新创建的分区/ev/sdd1
sr0     11:0    1  4.4G  0 rom  
[root@clr ~]# partprobe /dev/sdd   #手动刷新/dev/sdd磁盘分区

[root@clr ~]# mkfs -t ext3 /dev/sdd1  #将分区设备/dev/sdd1格式化为ext3类型的文件系统
mke2fs 1.42.9 (28-Dec-2013)
Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   

[root@clr ~]# mount /dev/sdd1 /data/  #将分区设备/dev/sdd1挂载到/data/目录下
[root@clr ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
tmpfs          tmpfs     394M     0  394M    0% /run/user/0
/dev/sdc1      xfs        20G   33M   20G    1% /root/data
/dev/sdd1      ext3       20G   45M   19G    1% /data   #新挂载的/dev/sdd1文件系统

(2)安装依赖包;

[root@clr ~/extundelete-0.2.4]# yum -y install e2fsprogs-devel e2fsprogs-libs
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在尝试其它镜像。
软件包 e2fsprogs-libs-1.42.9-19.el7.x86_64 已安装并且是最新版本

   作为依赖被安装:
  libcom_err-devel.x86_64 0:1.42.9-19.el7                                                        

完毕!

(3)编译安装extundelete;

[root@clr ~]# rz -E  #将windows系统的文件加载到虚拟机中
[root@clr ~]# tar xf extundelete-0.2.4.tar.bz2   #解压指定文件
[root@clr ~]# ls
abc              extundelete-0.2.4          passwd      模板  文档  桌面
anaconda-ks.cfg  extundelete-0.2.4.tar.bz2  result.txt  视频  下载
data             initial-setup-ks.cfg       公共        图片  音乐
[root@clr ~]# cd extundelete-0.2.4/
[root@clr ~/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@clr ~/extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install  #将extundelete工具安装到指定路径/usr/local/extundelete中,并进行编译和安装
Configuring extundelete 0.2.4
Writing generated files to disk
make -s all-recursive
Making all in src
Making install in src
  /usr/bin/install -c extundelete '/usr/local/extundelete/bin'
[root@clr ~/extundelete-0.2.4]# cd /usr/local/extundelete/bin/  #切换到/usr/local/extundelete/bin目录下

[root@clr /usr/local/extundelete/bin]# ls
extundelete
[root@clr /usr/local/extundelete/bin]# ex  #由于/usr/local/extundelete/bin/extundelete这个安装路径是自定义的,系统无法识别
ex        exec      exempi    exit      expand    export    exportfs  expr      
[root@clr /usr/local/extundelete/bin]# ln -s /usr/local/extundelete/bin/extundelete /usr/local/bin/  #创建软链接使/usr/local/bin/系统默认安装路径指向自定义安装路径 /usr/local/extundelete/bin/extundelete

(4)查看指定分区设备/dev/sdd1中,存在那些文件;

[root@clr /usr/local/extundelete/bin]# cd /data/  #切换到/data/目录下
[root@clr /data]# ls
lost+found
[root@clr /data]# echo a > a
[root@clr /data]# echo b > b
[root@clr /data]# echo c > c
[root@clr /data]# echo d >d
[root@clr /data]# mkdir 123
[root@clr /data]# echo helloworld > 123/abc123.txt  #将helloworld写入到123/abc123.txt文件中
[root@clr /data]# ll -R
.:
总用量 36
drwxr-xr-x. 2 root root  4096 415 16:08 123
-rw-r--r--. 1 root root     2 415 16:07 a
-rw-r--r--. 1 root root     2 415 16:07 b
-rw-r--r--. 1 root root     2 415 16:07 c
-rw-r--r--. 1 root root     2 415 16:07 d
drwx------. 2 root root 16384 415 14:25 lost+found

./123:
总用量 4
-rw-r--r--. 1 root root 11 415 16:08 abc123.txt

./lost+found:
总用量 0

[root@clr /data]# extundelete /dev/sdd1 --inode 2     #查看文件系统/dev/sdd1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录
NOTICE: Extended attributes are not restored.
WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.
file system and check it with fsck before using extundelete.
Would you like to continue? (y/n) 
y
Loading filesystem metadata ... 160 groups loaded.
Group: 0
Contents of inode 2:
0000 | ed 41 00 00 00 10 00 00 73 5b 3a 64 45 5b 3a 64 | .A......s[:dE[:d
0010 | 45 5b 3a 64 00 00 00 00 00 00 04 00 08 00 00 00 | E[:d............
0020 | 00 00 00 00 05 00 00 00 03 06 00 00 00 00 00 00 | ................

File name                                       | Inode number | #文件名以及文件所对应的inode号Deleted status
.                                                 2
..                                                2
lost+found                                        11
a                                                 12
b                                                 13
c                                                 14
d                                                 15
123                                               475137

(5)模拟删除并执行恢复操作;

[root@clr /data]# rm -rf c d 123   #删除文件c d 123
[root@clr /data]# ls
a  b  lost+found
[root@clr /data]# cd 
[root@clr ~]# umount /data/  #首先解挂载,防止二次误删除
[root@clr ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
devtmpfs       devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs          tmpfs     394M     0  394M    0% /run/user/0
/dev/sdc1      xfs        20G   33M   20G    1% /root/data
[root@clr ~]# extundelete /dev/sdd1 --inode 2
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Group: 0
Contents of inode 2:
0000 | ed 41 00 00 00 10 00 00 8b 62 3a 64 88 62 3a 64 | .A.......b:d.b:d
0010 | 88 62 3a 64 00 00 00 00 00 00 03 00 08 00 00 00 | .b:d............
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11
a                                                 12
b                                                 13
c                                                 14             Deleted
d                                                 15             Deleted
123                                               475137         Deleted

[root@clr ~]# extundelete /dev/sdd1 --restore-all   #恢复指定分区/dev/sdd1中删除的文件
NOTICE: Extended attributes are not restored.
0 recoverable inodes still lost.
[root@clr ~]# ls
abc              extundelete-0.2.4          passwd           公共  图片  音乐
anaconda-ks.cfg  extundelete-0.2.4.tar.bz2  RECOVERED_FILES #在当前目录下生成的RECOVERED_FILES/目录,里面保存了已经恢复的文件  模板  文档  桌面
data             initial-setup-ks.cfg       result.txt       视频  下载
[root@clr ~]# cd RECOVERED_FILES/  #切换到RECOVERED_FILES/ 目录下,查看已经恢复的文件
[root@clr ~/RECOVERED_FILES]# ls
123  c  d
[root@clr ~/RECOVERED_FILES]# cat d
d
[root@clr ~/RECOVERED_FILES]# cat 123/abc123.txt
helloworld

3.2 XFS类型文件恢复

在这里插入图片描述

3.2.1 xfsdump使用限制

1.只能备份已挂载的文件系统;

2.必须使用root的权限才能操作;

3.只能备份XFS文件系统;

4.备份后的数据只能让xfsrestore解析

5.不能备份两个具有相同UUID的文件系统(可用 blkid命令查看)

3.2.2 XFS类型文件恢复步骤

(1)使用fdisk创建分区/dev/sdb1,格式化xfs文件系统;

[root@clr ~]# fdisk /dev/sdb
命令(输入 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 获取帮助):w
[root@clr ~]# mkfs -t xfs /dev/sdb1 #将指定分区设备格式化为xfs类型的文件系统
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@clr ~]# mkdir /data
[root@clr ~]# mount /dev/sdb1 /data  #将分区设备挂载到/data目录下
[root@clr ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
devtmpfs       devtmpfs  2.0G     0  2.0G    0% /dev
/dev/sdb1      xfs        10G   33M   10G    1% /data

[root@clr /data]# cp /etc/passwd /etc/shadow /data/  #将 /etc/passwd和/etc/shadow这两个文件复制到/data目录中
[root@clr /data]# ls
passwd  shadow
[root@clr /data]# echo  a > a
[root@clr /data]# echo  b > b
[root@clr /data]# echo c > c
[root@clr /data]# ls
a  b  c  passwd  shadow
[root@clr /data]# mkdir 123
[root@clr /data]# cp /etc/yum.repos.d/* 123/ -r

[root@clr /data]# ls -R
.:
123  a  b  c  passwd  shadow

./123:
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  CentOS-x86_64-kernel.repo

(2)使用xfsdump 命令备份整个分区;

[root@clr /data]# cd /opt/
[root@clr /opt]# rpm -q xfsdump   #查询系统中是否安装了xfsdump工具  
xfsdump-3.1.7-1.el7.x86_64
[root@clr /opt]# xfsdump -f /opt/dump_sdb1 /dev/sdb1  #将分区设备/dev/sdb1下的文件备份到/opt/dump_sdb1目录中(添加-L和-M选项,可以避免交互式输入)
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)
 -> dump_sdb1    #指定会话标签
session label entered: "dump_sdb1"

 --------------------------------- end dialog ---------------------------------
xfsdump: /var/lib/xfsdump/inventory created

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> /dev/sdb1  #
media label entered: "/dev/sdb1"  #指定设备标签
 --------------------------------- end dialog ---------------------------------
xfsdump: Dump Status: SUCCESS
[root@clr /opt]# ls
dump_sdb1  rh

(3)模拟数据丢失并使用 xfsrestore 命令恢复文件;

[root@clr /opt]# cd /data/
[root@clr /data]# ls
123  a  b  c  passwd  shadow
[root@clr /data]# rm -rf *  #删除/data目录下的所有文件数据
[root@clr /data]# ls
[root@clr /data]# cd /opt
[root@clr /opt]# ls
dump_sdb1  rh
[root@clr /opt]# xfsrestore -f /opt/dump_sdb1 /data/   #将/opt/目录下的备份文件/opt/dump_sdb1恢复到指定路径/data/目录下
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control

xfsrestore: session label: "dump_sdb1"
xfsrestore: media label: "/dev/sdb1"
xfsrestore: file system id: 5bcbe520-e9d6-4714-b669-f539062e7c83
xfsrestore:   stream 0 /opt/dump_sdb1 OK (success)
xfsrestore: Restore Status: SUCCESS
[root@clr /opt]# cd /data
[root@clr /data]# ls   #可以查看到/data目录下删除的文件已经被回复
123  a  b  c  passwd  shadow

3.3 cpio命令

  • cpio命令用于–从归档包中存入和读取文件–,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中

  • cpio 命令可以看做是备份或还原命令,因为它可以将数据(文件)备份到cpio归档库,也可以利用 cpio 文档库对数据进行恢复

3.3.1 cpio命令注意事项

使用 cpio 命令备份或恢复数据,需注意以下几点:

(1)使用cpio备份数据时如果使用的是绝对路径,那么还原数据时会自动恢复到绝对路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。

(2)cpio 命令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此命令常与find命令配合使用。

(3)cpio 命令恢复数据时不会自动覆盖同名文件,也不会创建目录(直接解压到当前文件夹)。

3.3.2 cpio命令的三种模式

cpio 命令主要有以下 3 种基本模式:

“-o” 模式:指的是copy-out模式,就是把数据备份到文件库中.

命令格式如下:

cpio -o[vcB] > [文件丨设备] #利用cpio命令重定向写入到文件设备中

各选项含义如下:

-o:copy-out模式,备份
-v:显示备份过程
-c:使用较新的portable format存储方式;
-B:设定输入/输出块为 5120Bytes,而不是模式的 512Bytes;

比如,使用cpio备份数据的命令如下:

[root@localhost ~]#find /etc -print | cpio -ocvB > /root/etc.cpio  #利用find命令将查找到的/etc目录下的指定文件,重定向写入到/root/etc.cpio目录中
[root@localhost ~]# ll -h etc.cpio
-rw--r--r--.1 root root 21M 6月5 12:29 etc.cpio
#etc.cpio文件生成

“-i” 模式:指的是copy-in模式,就是把数据从文件库中恢复.

命令格式如下:

cpio -i[vcdu] < [文件|设备] #将指定设备中的文件恢复到当前目录下;

各选项的含义为:

-i:copy-in 模式,还原
-v:显示还原过程;
-c:较新的 portable format 存储方式;
-d:还原时自动新建目录
-u:自动使用较新的文件覆盖较旧的文件;

比如,使用 cpio 恢复之前备份的数据,命令如下:

[root@localhost ~]# cpio -idvcu < /root/etc.cpio  #将/root/etc.cpio目录中备份的文件恢复到当前目录下

“-p” 模式:指的是复制模式,使用-p模式可以从某个目录读取所有文件,但并不将其备份到cpio 库中,而是直接复制为其他文件

例如,使用 -p 将 /boot/ 复制到 /test/boot 目录中可以执行如下命令:

[root@clr ~]# mkdir gzy    #建立备份目录gzy
[root@clr ~]# find /boot/ -print | cpio -p ./gzy  #将/boot/目录下的子目录以及文件复制到./gzy目录下
278094[root@clr ~]# ls gzy/
boot

3.3.3 实例:使用cpio备份并恢复文件

[root@clr ~]# cd /data
[root@clr /data]# ll
总用量 20
-rw-r--r--. 1 root root 2303 416 12:14 passwd
----------. 1 root root 1263 416 12:14 shadow
[root@clr /data]# find ./ -type f  #查找/data目录下的所有文件
./123/CentOS-Sources.repo
./123/CentOS-Vault.repo
./123/CentOS-x86_64-kernel.repo
./passwd
./shadow
./a
./b
./c
[root@clr /data]# find ./ -type f | cpio -ocvB > /opt/data.cpio #查找当前目录下的所有文件,并将查找到的文件重定向写入到 /opt/data.cpio目录中
./123/CentOS-Vault.repo
./123/CentOS-x86_64-kernel.repo
./passwd
./shadow
./a
./b
./c
4[root@clr /data]# cd /opt/
[root@clr /opt]# ls
data.cpio #(新生成的备份文件)  dump_sdb1  rh
[root@clr /opt]# cd 
[root@clr ~]# cd clr/
[root@clr ~/clr]# cpio -idvcu < /opt/data.cpio   #将/opt/data.cpio目录中的备份文件复制到当前目录下
123/CentOS-Vault.repo
123/CentOS-x86_64-kernel.repo
passwd
shadow
a
b
c
40[root@clr ~/clr]# ls
123  a  b  c  passwd  shadow
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开,静待绽放!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值