linux使用dd命令创建特定大小文件最简单的方法及文件杂谈创建特定大小文件最简单的方法是使用
创新互联建站2013年至今,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元阳新做网站,已为上家服务,为阳新各地企业和个人服务,联系电话:028-86922220
dd
命令。dd
if=inputFileName
of=outFileName
bs=块大小
count=块个数块大小可以使用各种计量单位字节(1B)
-
c
字(2B)
-
w
块(512B)
-
b
千字节(1024B)
-
k兆字节(1024K)
-
M
吉字节(1024M)
-
G例:dd
if=/dev/zero
of=test.file
bs=1M
count=10在当前文件夹下创建一个大小为10M的文件test.file
内容全为0/dev/zero
是一个字符设备,它会不断返回0值字节(/0).如果不指定输入参数(if),默认情况会从stdin读取输入。如果不指定输出参数(of),默认情况会将stdout作为输出。也可用
dd
命令来传输大量数据来测试内存的操作速度。$
dd
if=/dev/zero
of=./testmm.file
bs=10M
count=10记录了10+0
的读入记录了10+0
的写出104857600字节(105
MB)已复制,0.577581
秒,182
MB/秒$
ll
-h
|grep
'testmm.file'-rw-rw-r--.
1
itudu
itudu
100M
7月
16
18:14
testmm.file文件类型:一般文件:
-目录文件:
d字符设备:
c块设备:
b链接文件:
l套接字文件:
s管道文件:
p目录的读、写、执行权限意义:读权限:允许读取目录中文件和子目录的列表写权限:允许在目录中新建和删除文件或子目录执行权限:可以访问目录中的文件和子目录
首先要了解两个特殊的设备:
/dev/null:回收站、无底洞
/dev/zero:产生字符
Ø 测试磁盘写能力
1
time dd if=/dev/zero of=/test.dbf bs=64k count=16k
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
这个很不准确的,因为命令结束的时候数据还没有真正写到磁盘上去。
1
time dd if=/dev/zero of=/test.dbf bs=64k count=16k conv=fsync
这个还算准确,数据已经写入磁盘。
1
time dd if=/dev/zero of=/test.dbf bs=64k count=4k oflag=dsync
这个可以当成是模拟数据库插入操作,所以很慢。
Ø 测试磁盘读能力
1
time dd if=/dev/sdb1 of=/dev/null bs=8k
因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。
Ø 测试同时读写能力
1
time dd if=/dev/sdb1 of=/test1.dbf bs=8k
这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力
推荐不要用dd,因为dd的原理导致这样基本不可能成功。
可以把你的存储卡格式化成ext4(当然别的文件系统格式也可以,不过经过测试,目前还是ext4最合适),然後将所有的文件复制到目的地(记得不要把目标自己复制过去),再写入引导(推荐对目的地重安引导器)
假如你的系统在同一个磁盤分区内,CF卡是/dev/sdb,挂载在/mnt,那麼可以直接
sudo cp -a -x / /mnt
这样就完成复制了。(假如不是单一分区,可以考虑自行分别复制目录,跳过/mnt。或者用rsync的exclude)
然後安装引导器,以grub2为例,假设目的地是mbr系统,执行
sudo grub-install --boot-directory=/mnt/boot /dev/sdb
sudo grub-mkconfig -o /mnt/boot/grub/grub.cfg
然後应该就可以了。
通常就是 计算读写一定大小的块耗费的时间 ,本身有速度输出
基本的测试如下
磁盘读速度
sync;time dd if=[mountpoint] of=/dev/null bs=4096k count=2000
测试数据大小为:4096k×2000
磁盘写速度
sync;time dd if=/dev/zero of=[mountpoint] bs=4096k count=2000
测试数据大小为:4096k×2000
[mountpoint]替换为你实际的挂载点
以上都是测试 2000个 4M块的速度 可以通过改变 bs大小来分析不同级别块的性能
可以通过写更详细的脚本来实现更详细的输出