Linux磁盘命令——dd命令与iostat命令
dd
命令简介
dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
参数介绍
if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,默认为标准输出。即指定目的文件。
ibs=$bytes:一次读入$bytes个字节,即指定一个块大小为$bytes个字节。
obs=$bytes:一次输出$bytes个字节,即指定一个块大小为$bytes个字节。
bs=$bytes:同时设置读入/输出的块大小为$bytes个字节。
cbs=$bytes:一次转换$bytes个字节,即指定转换缓冲区大小。
skip=$blocks:从输入文件开头跳过$blocks个块后再开始复制。
seek=$blocks:从输出文件开头跳过$blocks个块后再开始复制。
count=$blocks:仅拷贝$blocks个块,块大小等于ibs指定的字节数。
conv=<关键字>,关键字可以有以下11种:
conversion:用指定的参数转换文件。
- ascii:转换ebcdic为ascii
- ebcdic:转换ascii为ebcdic
- ibm:转换ascii为alternate ebcdic
- block:把每一行转换为长度为cbs,不足部分用空格填充
- unblock:使每一行的长度都为cbs,不足部分用空格填充
- lcase:把大写字符转换为小写字符
- ucase:把小写字符转换为大写字符
- swap:交换输入的每对字节
- noerror:出错时不停止
- notrunc:不截短输出文件
- sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
--help:显示帮助信息
--version:显示版本信息
应用实例
1. 将文件中所有小写改成大写
[root@k8s-master ddtest]# dd if=duzhuotest of=duzhuotest.test conv=ucase
记录了0+1 的读入
记录了0+1 的写出
115字节(115 B)已复制,0.000237971 秒,483 kB/秒
[root@k8s-master ddtest]# cat duzhuotest.test
KAFKLNAKJ KLJKJKFKLLKJLKGJKLGJKJKJ
KAJFAKKLKNLKKJLKJVNLKKKLJAKLLKNFDJAFL
KJKLJKLNVKLKLJFLKGKLAFKLJAFDKFJAKJKJJAFA
[root@k8s-master ddtest]#
[root@k8s-master ddtest]#
[root@k8s-master ddtest]#
[root@k8s-master ddtest]#
[root@k8s-master ddtest]# cat duzhuotest
kafklnakj kLJkjKFKLlkjLKGJklgjkjkj
kajfakklKNLKKJLKJVNLKkkljakllknfdjafl
KJKLJKLNVKLKLJFLKGKLAFKLJAFDKFJAkjkjjafa
2. 检测坏盘
坏盘无法确定盘符的时候可以通过读写测试的方式进行磁盘确定,在对磁盘进行写入的时候服务器前面板上磁盘的对应的灯会常亮,在对应的挂载点下执行以下命令
dd if=/dev/zero of=wtest_for_find_disk bs=64k count=100k
3. 拷贝内存内容到硬盘
[root@k8s-master dev]# dd if=/dev/mem of=/root/mem.bin bs=1024
dd: 读取"/dev/mem" 时出错: 不允许的操作
记录了1024+0 的读入
记录了1024+0 的写出
1048576字节(1.0 MB)已复制,0.00316028 秒,332 MB/秒
[root@k8s-master dev]#
4.测试磁盘性能配合iostat
#1.开两个窗口,一个dd命令测试写入数据,一个iostat命令查看磁盘性能数据
#2.iostat命令每秒实时输出磁盘性能数据
iostat -x -d 1 sda
#3.dd命令测试写入数据,conv=fdatasync oflag=direct 保证数据真实写到磁盘上,而不是写在cache缓存中
dd if=/dev/zero of=test.img bs=1M count=2000 conv=fdatasync oflag=direct
5. 增加swap分区的大小
#1.创建一个大小为256M的文件
dd if=/dev/zero of=/swapfile bs=1024 count=262144
#2.把这个文件变成swap文件
mkswap /swapfile
#3.启动这个swap文件
swapon /swapfile
#4.编辑/etc/fstab文件,使其在每次开机时自动加载swap文件
/swapfile swap swap default 0 0
iostat
简介
iostat 主要用于输出磁盘IO 和 CPU的统计信息,iostat属于sysstat软件包可以用。
下载
yum install sysstat
iostat命令输出报告
iostat命令生成两种类型的报告:CPU利用率报告和device利用率报告。
CPU利用率报告
iostat命令生成的第一个报告是CPU利用率报告。对于多处理器系统,CPU值是所有处理器的全局平均值。报告具有以下格式:
%user
显示在用户级别(应用程序)执行时发生的CPU利用率百分比。
%nice
显示在具有良好优先级的用户级别执行时发生的CPU利用率百分比。
%system
显示在系统级(内核)执行时发生的CPU利用率百分比。
%iowait
显示系统有未完成的磁盘I/O请求期间CPU空闲的时间百分比。
%steal
显示虚拟机监控程序为另一个虚拟处理器提供服务时,虚拟CPU非自愿等待的时间百分比。
%idle
显示CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。
device利用率报告
iostat命令生成的第二个报告是Device Utilization report。设备报告按每个物理设备或分区提供统计信息。可以在命令行上输入要显示统计数据的块设备和分区。如果没有输入设备或分区,那么将显示系统使用的每个设备的统计信息,前提是内核维护其统计信息。如果命令行中给出了ALL关键字,则会显示系统定义的每个设备的统计信息,包括从未使用过的设备。传输速率默认以1K块显示,除非设置了环境变量POSIXLY_CORRECT,在这种情况下使用512字节块。根据使用的标志,报告可能会显示以下字段:
Device:
此列提供/dev目录中列出的设备(或分区)名称。
tps:
指示每秒发送到设备的传输次数。传输是对设备的I/O请求。可以将多个逻辑请求组合为对设备的单个I/O请求。传输的大小不确定。
Blk_read/s(kB_read/s,MB_read/s)
指示从设备读取的数据量,以每秒的块数(千字节、兆字节)表示。块相当于扇区,因此具有512字节的大小。
Blk_wrtn/s(kB_wrtn/s,MB_wrtn/s)
指示每秒写入设备的数据量,以块数(千字节、兆字节)表示。
Blk_read (kB_read, MB_read)
读取的块总数(千字节、兆字节)。
Blk_wrtn (kB_wrtn, MB_wrtn)
写入的块总数(千字节、兆字节)。
rrqm/s
每秒合并到设备队列的读取请求数。
wrqm/s
每秒合并到设备的写入请求数。
r/s
设备每秒完成的读取请求数(合并后)。
w/s
设备每秒完成的写入请求数(合并后)。
rsec/s(rkB/s,rMB/s)
每秒从设备读取的扇区数(千字节、兆字节)。
wsec/s(wkB/s,wMB/s)
每秒写入设备的扇区数(千字节、兆字节)。
avgrq-sz
向设备发出的请求的平均大小(以扇区为单位)。
avgqu-sz
向设备发出的请求的平均队列长度。
await
向要服务的设备发出I/O请求的平均时间(毫秒)。这包括队列中的请求所花费的时间以及为它们提供服务所花的时间。
r_await
向要服务的设备发出读取请求的平均时间(毫秒)。这包括队列中的请求所花费的时间以及为它们提供服务所花的时间。
w_await
向要服务的设备发出写入请求的平均时间(毫秒)。这包括队列中的请求所花费的时间以及为它们提供服务所花的时间。
svctm
向设备发出的I/O请求的平均服务时间(毫秒)。警告不再信任此字段。此字段将在未来的sysstat版本中删除。
%util
向设备发出I/O请求所用时间的百分比(设备的带宽利用率)。当该值接近100%时,会发生设备饱和。
命令示例
1.显示所有CPU和设备的自启动以来的单个历史记录报告
iostat
2.每隔两秒显示一次连续的设备报告
iostat -d 2
3.为所有设备每隔两秒显示,共打印六个报告
iostat -d 2 6
4.以两秒的间隔显示设备sda和sdb的扩展统计报告,共打印六个报告
iostat -x sda sdb 2 6
5.每隔两秒显示设备sda及其所有分区(sda1等),共打印六个报告
iostat -p sda 2 6