Linux 其他常见的压缩与备份工具(dd,cpio)

文章目录

  • 其他常见的压缩与备份工具
    • dd
      • dd命令语法
      • 使用案例
    • cpio
      • cpio命令语法
      • 使用案例

其他常见的压缩与备份工具

dd

dd命令是Linux中的一个命令行工具,主要用于数据转换和复制。它可以将一个输入文件转换为指定的输出格式,并可以在转换过程中对数据进行处理。以下是dd命令可以做的一些事情:

  1. 复制硬盘:使用dd命令可以将一个硬盘的完整数据复制到另一个硬盘中,包括分区表、文件系统、文件等。
  2. 制作启动盘:使用dd命令可以将Linux或Unix系统的ISO镜像文件写入到USB设备中,制作启动盘。
  3. 磁盘备份:使用dd命令可以对整个磁盘或分区进行备份,以防止数据丢失或损坏。
  4. 数据恢复:使用dd命令可以从磁盘或分区的备份文件中恢复数据。
  5. 随机数据生成:使用dd命令可以生成指定大小的随机数据文件,该功能可以用于密码生成或加密等操作。
  6. 清空文件或磁盘:使用dd命令可以生成一个空文件或清空整个磁盘。

dd命令语法

dd if="input_file"  of="output_file"  bs="block_size" count="number"
选项参数 解释
if 就是输入文件 也可以是设备
of 就是输出文件 也可以是设备
bs 设置一个block的大小,若为指定则默认是512Bytes(一个扇区大小)
count 多少个bs的意思

使用案例

将/etc/passwd备份到 /tmp/passwd.back当中

[root@localhost ~]# dd if=/etc/passwd of=/tmp/passwd.back
记录了1+1 的读入
记录了1+1 的写出
846字节(846 B)已复制,0.000485588 秒,1.7 MB/秒
[root@localhost ~]# ll  /tmp/passwd.back /etc/passwd
-rw-r--r--. 1 root root 846 45 20:11 /etc/passwd
-rw-r--r--. 1 root root 846 417 17:15 /tmp/passwd.back
# 仔细看一下,我的/etc/passwd文件大小为846bytes,因为我没有设置bs
# 所以默认是512Bytes 为一个单位,因此,上面那个1+1 代表有1个完整的512Bytes
# 以及未满512Bytes的另一个block的意思。

生成一个大小为1MB的随机数据文件,并将其保存为random_data文件。

[root@localhost ~]# dd if=/dev/random of=/tmp/csqfile2 bs=1M count=1
记录了0+1 的读入
记录了0+1 的写出
115字节(115 B)已复制,0.000299195 秒,384 kB/秒

生成一个大小为1MB的空文件,并将其保存为empty_file文件。

[root@localhost ~]# dd if=/dev/zero of=/tmp/csqfile3 bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00182176 秒,576 MB/秒

如果你想要将你的/dev/sda1完整的复制到另一个银盘分区上,请使用你的系统上面未划分完毕的容量在建立一个与/dev/sda1差不多大小的分区(只能比/dev/sda1大,不能比他小),然后进行完整的复制

  1. 先进行分区
[root@localhost ~]# fdisk /dev/sdb 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xd45966d2 创建新的 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-104857599,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):W
  1. 不需要格式化,直接进行sector表面复制
[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1 
记录了2097152+0 的读入
记录了2097152+0 的写出
1073741824字节(1.1 GB)已复制,42.4799 秒,25.3 MB/秒
[root@localhost ~]# xfs_repair -L /dev/sdb1
[root@localhost ~]# uuidgen
a47cd75e-9efb-48d7-adcb-0e1fd3e7b3a2
[root@localhost ~]# xfs_admin -U a47cd75e-9efb-48d7-adcb-0e1fd3e7b3a2 /dev/sdb1 
[root@localhost ~]# mount /dev/sdb1 /mnt/
[root@localhost ~]# df -h /mnt/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1      1014M  151M  864M   15% /mnt
  1. 将文件系统放大
[root@localhost ~]# xfs_growfs /mnt/
[root@localhost ~]# df -h /mnt/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       5.0G  151M  4.9G    3% /mnt

如上操作参数解释

  1. xfs_repair -L /dev/sdb1
    对/dev/sdb1文件系统进行修复。-L选项用于为修复后的文件系统命名,修复可能需要一些时间,具体时间取决于文件系统的大小和损坏程度。在修复期间,不应对文件系统进行任何读写操作,以免导致数据丢失或损坏。

  2. uuidgen
    生成一个UUID,用于给修复后的文件系统进行重命名。UUID是一种唯一标识符,用于标识计算机系统中的各种组件,可以用于确保文件系统的唯一性。

  3. xfs_admin -U a47cd75e-9efb-48d7-adcb-0e1fd3e7b3a2 /dev/sdb1
    将修复后的文件系统重命名为指定的UUID。-U选项用于指定UUID,即上一步生成的UUID。

  4. xfs_growfs /mnt/
    对/mnt目录下的文件系统进行扩容。这个命令可以用于扩大文件系统的存储容量,以适应数据存储的需要。

cpio

cpio命令是一个用于文件归档和备份的命令行工具,它可以将多个文件或目录打包成一个单独的文件,并且可以将这个打包文件解压还原成原始的文件和目录

cpio命令语法

cpio -ovcB   > [ file | device ]               <== 备份
cpio -ivcdu  < [ file | device ]               <== 还原
cpio -ivct   < [ file | device ]               <== 查看

备份会使用到的选项与参数:
-i:解包文件,即将打包文件还原成原始的文件和目录。
-o:打包文件,即将多个文件和目录打包成一个单独的文件。
-B:让默认的blocks可以增加到5120字节,默认是512字节,这样做的好处就是可以让大文件的存储速度加快
-d:自动创建目录,即在解包时自动创建目标目录。
-v:显示详细信息,即在打包或解包时显示更多的信息。
-t:列出文件列表,即显示打包文件中包含的文件和目录列表。
-c:一种较新的 portable format 方式存储

使用案例

找出/boot下面的所有文件,然后将他备份到/tmp/boot.cpio中

[root@localhost ~]# cd /
[root@localhost /]# find boot -print
boot
boot/efi
boot/efi/EFI
...........
....
# 通过find我们可以找到boot下面应该要存在的文件名,包括文件与目录,千万要记住是绝对路径
[root@localhost /]# find boot |cpio -ocvB > /tmp/boot.cpio
[root@localhost /]# ll -h /tmp/boot.cpio 
-rw-r--r--. 1 root root 118M 417 18:00 /tmp/boot.cpio

将刚刚的文件给他在/root目录下解开

[root@localhost ~]# cpio -idvc < /tmp/boot.cpio 
[root@localhost ~]# ll /root/boot/
# 可以自行比较一下/root/boot与/boot的内容是否一模一样

其实系统中已经含有一个使用cpio建立的文件,那就是/boot/initramfs-xxx这个文件,现在让我解压缩看看文件内容是什么

[root@localhost ~]# mkdir /tmp/initramfs
[root@localhost ~]# cd /tmp/initramfs/         # 记住得是绝对路径!
[root@localhost initramfs]# cpio -idvc < /boot/initramfs-3.10.0-1160.el7.x86_64.img 
.
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
early_cpio
# 这就是文件里面的内容

你可能感兴趣的:(#,Linux文件,目录与磁盘格式,linux,服务器,运维)