Linux 操作系统管理员的最主要的工作就是保证 Linux 系统在工作期间能够正常的运行。但是要做到这样,并不是那么容易,因为 Linux 系统的运行环境十分复杂,会有很多因素导致 Linux 系统崩溃。一旦系统崩溃,Linux 系统管理员就需要在最快的时间内恢复 Linux 系统,并做到在最大限度内不丢失数据,这对于系统管理员来说是一个不小的挑战。下面良许小编就将从几个方面对于 **Linux dd命令进行详述,希望对大家有所帮助。
为达到这个目的,我们能做的唯一办法就是数据的备份、再备份。而 dd 命令行实用程序就是在 Linux 系统上使用频率非常高的系统备份和恢复的工具。
dd 是一个在 UNIX 和 Linux 操作系统上的命令行实用程序,它的主要目的就是转换和复制文件。因为一个硬盘启动扇区的内容是在安装文件系统之前就已经生成的,所以它无法进行操作系统的复制命令来备份。这时候我们就需要使用 dd 程序来完成硬盘的启动扇区的备份工作,也可以使用 dd 命令将一个硬盘上的数据彻底的清除掉,还可以在复制数据的时候完成数据的转换工作。
dd 的名字来源于 IBM 的作业控制语言(Job Control Language JCL)中的 DD 语句,dd 代表的是 Data Definition(数据定义)两个字的首字母。因此与大多数其他的 UNIX 命令的语法格式的不同,dd 命令更像是 IBM 的 JCL 语句,而不像是 UNIX 命令。
在 dd 命令中可以使用很多选项,这些选项的语法格式如下:
选项=选项值…
每个选项之间需要使用空格分割。
表 1 dd 命令常用选项
选 项 | 含 义 |
---|---|
if=文件名 | 输入文件名,缺省为标准输入,即指定源文件,如。 |
of=文件名 | 输出文件名,缺省为标准输出,即指定目的文件,如。 |
ibs=bytes obs=bytes bs=bytes | 一次读入bytes字节,即指定一个块大小为 bytes 字节。 一次输出 bytes 字节,即指定一个块大小为 bytes 字节。 同时设置读入/输出的块大小为 bytes 个字节。 |
cbs=bytes | 一次转换 bytes 字节,即指定转换缓冲区大小。 |
skip=blocks | 从输入文件开头跳过 blocks 个块后再开始复制。 |
seek=blocks | 从输出文件开头跳过 blocks 个块后再开始复制。注意,通常只有当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。 |
count=blocks | 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。 |
conv=conversion | 用指定的参数转换文件:ascii:转换ebcdic为ascii。ebcdic:转换ascii为ebcdic。ibm:转换ascii为alternate ebcdic。block:把每一行转换为长度为cbs,不足部分用空格填充。unblock:使每一行的长度都为cbs,不足部分用空格填充。lcase:把大写字符转换为小写字符。ucase:把小写字符转换为大写字符。swab:交换输入的每对字节。noerror:出错时不停止。notrunc:不截短输出文件。sync:将每个输入块填充ibs个字节,不足部分用空(NUL)字符补齐。 |
以上是一些使用 dd 命令行程序进行 Linux 系统维护工作的一些例子,其中包括了整个硬盘的备份与恢复、光盘的刻录及清除磁盘或者文件中所有的数据和将内存中的数据复制到硬盘上。
dd命令的应用实例
对于一个刚接触的系统,如果我们要想知道硬盘的读写速度。那我们就可以用下面介绍的方法来进行测试和分析系统顺序读和写的速度,首先我们通过例 1 中的命令进行测试硬盘上的读速度。
【例 1】测试硬盘上的读速度。命令如下:其中:
[root@liangxu ~]# dd if=/dev/zero bs=1024 count=1000000 of=file_1GB
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 36.2072 s, 28.3 MB/s
其中:
-
/dev/null:外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! -
/dev/zero:是一个输入设备,你可以用它来初始化文件。该设备无穷尽地提供0,可以使用任何需要的数目——设备提供的要多得多。它也可以用于向设备或文件写入字符串0。 -
/dev/null:是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
我们还可以利用在 root 目录中刚刚生成的file=1GB来测试硬盘的读速度,也可以通过例 2 中的命令进行测试。
【例 2】测试读速度。命令如下:
[root@liangxu ~]# dd if=file_1GB of=/dev/null bs=1024
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 1.20325 s, 851 MB/s
file_1GB 这个文件很大,我们可以通过 ls -l file* 命令进行验证。
在操作完成之后,要使用例 3 中的 rm 命令删除这一文件。最后,我们最好能够使用 ls -l file* 命令再次进行验证,防止出现错误。
【例 3】删除。命令如下:
[root@liangxu ~]# rm -f file_1GB
接下来需要将硬盘上重要的分区克隆到另一个硬盘的分区上,即系统上的一个 boot 分区。
首先,我们需要通过例 4 中的 ls 命令显示出 /boot 目录下的全部内容。
【例 4】显示目录的内容。命令如下:
[root@liangxu ~]# ls /boot
config-2.6.32-431.el6.x86_64 lost+found
efi symvers-2.6.32-431.el6.x86_64.gz
grub System.map-2.6.32-431.el6.x86_64
initramfs-2.6.32-431.el6.x86_64.img vmlinuz-2.6.32-431.el6.x86_64
initrd-2.6.32-431.el6.x86_64kdump.img
为了确定 /boot 所在具体设备的文件名,我们可以通过例 5 中的 df 命令列出 /boot 所在设备以及其状态的信息。
【例 5】设备状态信息。命令如下:
[root@liangxu ~]# df -h /boot
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 291M 39M 238M 14% /boot
当确认了 /boot 所在的设备之后,通过例 6 中的 dd 命令将 /dev/sdal 分区克隆到另一个硬盘的 /dev/sdbl 分区。
【例 6】克隆操作。命令如下:
[root@liangxu ~]# dd if=/dev/sdal of=/dev/sdbl bs=4096 conv=noerror
然后通过【例 7】中的 mkdir 命令创建一个加载 /dev/sdbl 分区的目录(为了便于记忆我们使用了 /boot2)。
【例 7】创建加载分区。命令如下:
[root@liangxu ~]# mkdir .boot2
最后,我们就可以使用例 8 中的 mount 命令加载 /dev/sdbl 分区了。
【例 8】加载 /dev/sdbl 分区。命令如下:
[root@liangxu ~]# mount /dev/sdbl /boot2
以上就是良许教程网为各位朋友分享的对于Linux dd命令的详解。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你!