Linux time命令、dd命令、测试硬盘读写速度、磁盘备份恢复
time命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(这是date命令干的事情)。它不仅仅是
测量运行时间,还可以测量内存、I/O等的使用情况。一个程序在运行时使用的系统资源通常包括CPU、Memory和I/O等,其中
CPU资源的统计包括实际使用时间(real time)、用户态使用时间(the process spent in user mode)、内核态使用时间(the process spent in kernel mode)。但是简单的使用time命令并不能得到内存和I/O的统计数据
命令格式:time <command> [<arguments...>]
例子:time find . -name "mysql.sh"
在命令执行完成之后就会打印出CPU的使用情况:
real 0m14.837s <==
实际使用时间(real time)user 0m0.030s <==
用户态使用时间(the process spent in user mode)sys 0m0.120s <==
内核态使用时间(the process spent in kernel mode)注1:real远大于user加上sys,因为find需要遍历各个目录,需要大量的I/O操作,而磁盘I/O通常是最慢的环节,因此大部分时间find进程都在等待磁盘I/O完成。
注2:使用
-p参数时,就直接打印所需时间的数值,单位为秒,而不是更友好的格式,包括分钟、秒钟的显示方式。
Linux系统中time命令其实不止一个:执行
type -a time命令
time is a shell keyword
time is /usr/bin/time
通过这条命令我们可以发现我们常用的
time其实是一个Shell关键字,还有一个外部命令/usr/bin/time(外部命令功能更强大)例子:使用外部time命令输出内存、IO等更加多的信息 /usr/bin/time -v find . -name "mysql.sh"
time命令输出信息的重定向:time命令的输出信息是打印在标准错误输出上的
方法1: 将time命令和将要执行的命令行放到一个
shell代码块中,也就是一对大括号。如下,注意分隔符、空格的使用。
{ time command-line; } 2>file方法2: 使用子Shell的方式。如下,这里time紧贴着小括号(也可以的,命令行结束也不必带分号。当然最好还是用第一种方式,毕竟启动一个子shell是要多占些资源的。
(time command-line) 2>filedd命令:Linux/UNIX 下的一个非常有用的命令,作用是
用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
dd 的主要选项:- if=file: 输入文件名,缺省为标准输入。
- of=file: 输出文件名,缺省为标准输出。
- count=blocks: 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
- bs=bytes: 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
- ibs=bytes: 一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
- obs=bytes: 一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
- cbs=bytes: 一次转换 bytes 个字节,即转换缓冲区大小。
- skip=blocks: 从输入文件开头跳过 blocks 个块后再开始复制。
- seek=blocks: 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。
- conv=conversion[,conversion...]: 用指定的参数转换文件。
- conv = ASCII 把EBCDIC码转换为ASCII码。
- conv = ebcdic 把ASCII码转换为EBCDIC码。
- conv = ibm 把ASCII码转换为alternate EBCDIC码。
- conv = blick 把变动位转换成固定字符。
- conv = ublock 把固定们转换成变动位
- conv = ucase 把字母由小写变为大写。
- conv = lcase 把字母由大写变为小写。
- conv = notrunc 不截短输出文件。
- conv = swab 交换每一对输入字节。
- conv = noerror 出错时不停止处理。
- conv = sync 把每个输入记录的大小都调到ibs的大小(用ibs填充)。
结合time、dd命令测试硬盘读写速度:- /dev/null:是一个伪设备,相当于回收站,of到该设备不会产生IO
- /dev/zero:是一个伪设备,它只产生空字符流,对它不会产生IO
- 测试磁盘写能力:time dd if=/dev/zero of=test.dbf bs=8k count=300000
- 测试磁盘读能力:time dd if=/dev/sda1 of=/dev/null bs=8k
- 测试同时读写能力:time dd if=/dev/sda1 of=test1.dbf bs=8k
磁盘备份恢复:- 将本地的/dev/hdx整盘备份到/dev/hdy :dd if=/dev/hdx of=/dev/hdy
- 将/dev/hdx全盘数据备份到指定路径的image文件:dd if=/dev/hdx of=/path/to/image
- 备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:dd if=/dev/hdx | gzip >/path/to/image.gz
- 将备份文件恢复到指定盘:dd if=/path/to/image of=/dev/hdx
- 将压缩的备份文件恢复到指定盘 :gzip -dc /path/to/image.gz | dd of=/dev/hdx
参考:linux time 命令详解