压缩工具和整盘备份工具dd
一、使用gzip压缩文件
gzip是GNU zip的缩写。
【命令格式】
gzip [option] filename
【常用选项】
c:压缩后将结果输出到标准输出,并保留原始文件。
d:解压缩文件。
l:显示压缩文件的详细信息。
r:递归地处理目录下的所有文件及子目录,或递归地解压缩文件内的目录和子目录。
v:显示命令的执行过程。
t:测试压缩文件。
num:num为数字1-9,代表压缩时使用的压缩率。1表示压缩速度最快、压缩率最小,9代表压缩速度最慢、压缩率最大。如果不使用此选项,则默认使用压缩率6.
二、使用bzip2压缩文件
与gzip等大多数压缩工具相比,bzip2的压缩率更高,但速度相对较慢。
【命令格式】
bzip2 [option] filename
【常用选项】
k:压缩、解压缩完成之后,保留原始文件。
d:执行解压缩任务。
t:测试压缩文件的完整性。
num:num为数字1-9,表示压缩率级别。其中1表示压缩率最低、速度最快,9表示压缩率最高、速度最慢。
v:执行时显示执行的详细信息。
三、整盘备份命令dd
dd是一个非常特殊的命令,其作用是从标准输入或文件中读取数据,并按指定的格式转换数据,然后输出。dd命令非常像Windows系统中的分区、磁盘备份工具Ghost。使用这个命令可以备份整个分区、磁盘,并且备份时可以不必关闭系统、卸载文件系统。
【命令格式】
dd <option>
dd命令不需要参数,所有参数都通过选项指定。
【常用选项】
if:指定要读取的文件,默认为标准输入。
of:指定要输出的文件,默认为标准输出。
ibs:指定读取数据时的块大小,默认为512字节。
obs:指定输出数据时的块大小,默认为512字节。
bs:将读取、输出时的块大小一起指定。
count:指定读取的区块数。
【用法示例】
管理员在许多时候都要使用到这个命令,其目的可能是需要备份一个分区、硬盘和软盘等存储设备中的内容,也可能是需要验证某个设置,需要产生一个指定大小的文件等。
(1)有时候管理员需要一个类似于Ghost的工具,备份一个分区甚至是一个磁盘,这时可以使用dd命令来完成。
例如要备份磁盘sda:
[root@localhost test]# dd if=/dev/sda of=/mnt/backup/backup_sda.dd
上面的示例中,dd命令从设备/dev/sda中读取数据,并存放到文件/backup_sda.dd中。
这样磁盘sda中的所有数据都被保存到backup_sda.dd文件内,这些数据包括了磁盘分区表及所有分区和数据等内容。由于磁盘存储的数据可能会有很多,因此命令可能会需要很长时间。
提示:将磁盘备份到文件中时,建议文件名以.dd结尾,以便于文件使用者识别。
(2)恢复磁盘时,只需要将读取和写入的文件进行调换即可。例如要将从/dev/sda中备份的数据恢复到一个新的设备/dev/sdb中:
[root@localhost ~]# dd if=/mnt/backup/backup_sda.dd of=/dev/sdb
dd命令从文件/mnt/backup/backup_sda.dd中读取数据,并将这些数据写入磁盘sdb中。命令执行完成之后设备sda和sdb中的数据将完全相同。
(3)许多时候可能希望能够在备份磁盘分区的同时,压缩备份数据以节省空间,这是可以与gzip等压缩命令一起使用。
例如备份磁盘sda并使用gzip压缩备份数据:
[root@localhost ~]# dd if=/dev/sda | gzip >/mnt/backup/backup_sda.dd.gz
上面示例命令中,命令dd首先从磁盘sda中读取数据,并将这些数据通过管道交给第2个命令gzip。gzip将这些数据压缩之后,通过重定向的方式写入文件backup_sda.dd.gz中。
(4)如果要将使用gzip压缩后的数据恢复到磁盘sdb中,可以反向使用以上命令:
[root@localhost ~]# gzip -dc /mnt/backup/backup_sda.dd.gz | dd of=/dev/sdb
(5)如果两块磁盘都连接到系统,可以直接将一个磁盘中的内容整盘拷贝到另一个磁盘中,将选项if和of的参数换成需要使用的参数即可。
例如要将磁盘sda中的所有数据拷贝到磁盘sdb中:
[root@localhost ~]# dd if=/dev/sda of=/dev/sdb
(6)利用dd命令能直接读写块设备,还可以制作光盘镜像。例如为当前光驱中的光盘制作光盘镜像,并将 光盘镜像命名为linux.iso:
[root@localhost ~]# dd if=/dev/cdrom of=/mnt/backup/linux.iso
(7)许多时候管理员需要产生一个指定大小的文件,其目的可能是验证一些配置(例如磁盘配额),也可能是测试磁盘、阵列的读写速度等。这是可以使用dd命令的bs和count选项,指定块大小和块数量。
例如产生一个5GB的文件放置在当前目录下,并将其命名为test.5G:
[root@localhost ~]# dd if=/dev/zero of=test.5G bs=1M count=5120
注意:在上面的命令中用到了一个设备文件/dev/zero,这是一个非常特殊的设备文件,zero设备的功能是无限制地提供数据0.
(8)许多时候,磁盘上存放了相当机密的数据,当磁盘报废或者做其他用途时,删除数据和格式化磁盘都无法保证这些数据不被泄露。此时可以使用随机数据填充磁盘的方式销毁磁盘上的数据。
例如要销毁磁盘sdc上的数据:
[root@localhost ~]# dd if=/dev/urandom of=/dev/sdc
(9)在Linux系统中,要备份磁盘的分区表,可以不用其他工具,使用dd命令就可以轻松完成这个工作:
[root@localhost ~]# dd if=/dev/sda of=image count=1 bs=512
上面这个命令,会备份磁盘/dev/sda的前512个字节(分区表保存在磁盘的前512字节中),保存到当前目录下并命名为image。
(10)要从已经备份的文件image中恢复分区表:
[root@localhost ~]# dd if=image of=/dev/sda
注意:虽然dd命令备份数据时允许硬盘正在使用,但通常应该停止使用磁盘或以只读方式挂载磁盘,以免出现文件不一致的情况。