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
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 #文件大小发生变化,将会修改文件的属性,也就是元信息发生改变
创建时间:-
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
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
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 4月 13 23:37 pass.txt #新建文件pass.txt文件的inode号为 69257231
103458137 drwxr-xr-x. 2 root root 6 10月 31 2018 rh
[root@clr /opt]# mv pass.txt ~ #将该新建文件移动到根目录下
[root@clr /opt]# cd
[root@clr ~]# ll -i
总用量 8
33554498 -rw-------. 1 root root 1832 3月 23 00:54 anaconda-ks.cfg
33554500 -rw-r--r--. 1 root root 1880 3月 23 01:05 initial-setup-ks.cfg
69257231 -rw-r--r--. 1 root root 0 4月 13 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 3月 23 00:54 anaconda-ks.cfg
33554500 -rw-r--r--. 1 root root 1880 3月 23 01:05 initial-setup-ks.cfg
69257231 -rw-r--r--. 1 root root 0 4月 13 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号发生改变
模拟硬盘容量还有空间,但是文件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)磁盘出现问题的情况又分为:磁盘坏道和文件系统出现问题;
[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)
[root@clr /data]# fsck -a /dev/sdc1 # 检测设备/dev/sdc1,如果有问题,则自动修复文件系统,没有任何提示信息
fsck,来自 util-linux 2.23.2
/sbin/fsck.xfs: XFS file system.
总结:查看文件包含以下几个过程:
(1)通过文件名查看文件所对应的inode号;
(2)通过inode号获取文件的inode信息;
(3)inode信息里面包含文件的元信息,对文件的权限以及其他属性信息;
(4)根据权限,判断用户是否具有查看或者修改文件的操作。
链接文件格式:
ln 源文件 目标位置
ln -s 源文件或目录… 链接文件或目标位置
注意:
extundelete工具目前只能恢复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 4月 15 16:08 123
-rw-r--r--. 1 root root 2 4月 15 16:07 a
-rw-r--r--. 1 root root 2 4月 15 16:07 b
-rw-r--r--. 1 root root 2 4月 15 16:07 c
-rw-r--r--. 1 root root 2 4月 15 16:07 d
drwx------. 2 root root 16384 4月 15 14:25 lost+found
./123:
总用量 4
-rw-r--r--. 1 root root 11 4月 15 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
1.只能备份已挂载的文件系统;
2.必须使用root的权限才能操作;
3.只能备份XFS文件系统;
4.备份后的数据只能让xfsrestore解析;
5.不能备份两个具有相同UUID的文件系统(可用 blkid命令查看)
(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
cpio命令用于–从归档包中存入和读取文件–,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中。
cpio 命令可以看做是备份或还原命令,因为它可以将数据(文件)备份到cpio归档库,也可以利用 cpio 文档库对数据进行恢复。
使用 cpio 命令备份或恢复数据,需注意以下几点:
(1)使用cpio备份数据时如果使用的是绝对路径,那么还原数据时会自动恢复到绝对路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。
(2)cpio 命令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此命令常与find命令配合使用。
(3)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
[root@clr ~]# cd /data
[root@clr /data]# ll
总用量 20
-rw-r--r--. 1 root root 2303 4月 16 12:14 passwd
----------. 1 root root 1263 4月 16 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