免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 23861 | 回复: 17
打印 上一主题 下一主题

如何快速创建大的空文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-08 11:58 |只看该作者 |倒序浏览
linux下如何快速创建一个很大的内容为空的文件?
用dd if=/dev/zero of=bigfile bs=1M count=100000 的速度很慢
用dd of=bigfile bs=1M count=0 seek=100000 虽然可以创建,但创建出来的文件却是不占用真实的硬盘空间的

不知道有其他办法么?

论坛徽章:
0
2 [报告]
发表于 2007-08-08 13:53 |只看该作者
原帖由 独孤一剑 于 2007-8-8 11:58 发表
用dd of=bigfile bs=1M count=0 seek=100000 虽然可以创建,但创建出来的文件却是不占用真实的硬盘空间的

Are you sure?

论坛徽章:
0
3 [报告]
发表于 2007-08-09 01:36 |只看该作者
原帖由 platinum 于 2007-8-8 13:53 发表

Are you sure?


我在一个19G在分区里面建了个95G的文件
测试系统fc7,分区ext3

论坛徽章:
0
4 [报告]
发表于 2007-08-09 01:51 |只看该作者
又试了一遍,这次是VM里面的测试结果

论坛徽章:
0
5 [报告]
发表于 2007-08-09 08:53 |只看该作者
改变一下bs,count的值,参看dd的手册:

  1. bs=BYTES
  2. count=BLOCKS
  3.                copy only BLOCKS input blocks
  4. seek=BLOCKS
  5.               skip BLOCKS obs-sized blocks at start of output
  6. BLOCKS  and  BYTES may be followed by the following multiplicative suf-
  7.        fixes: xM M, c 1, w 2,  b  512,  kB  1000,  K  1024,  MB  1000*1000,  M
  8.        1024*1024,  GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E,
  9.        Z, Y.
复制代码

比较一下下面两个命令的运行速度:

  1. dd if=/dev/zero of=emptyfile bs=1M count=1000M
  2. dd if=/dev/zero of=emptyfile bs=100M count=10
  3. dd if=/dev/zero of=emptyfile bs=1000M count=1
复制代码

bs不是越大越好,跟你的系统配置有关。

论坛徽章:
0
6 [报告]
发表于 2007-08-09 09:51 |只看该作者
[root@3.7.0Biz-47 /home/aaa]# dd if=/dev/zero of=/home/aaa/xx bs=1024 seek=10 count=0
0+0 records in
0+0 records out
[root@3.7.0Biz-47 /home/aaa]# ls -l
-rw-r--r--  1 root root 10240 Aug  9 09:51 xx
??不占空间?

论坛徽章:
0
7 [报告]
发表于 2007-08-09 10:10 |只看该作者
原帖由 mxbao 于 2007-8-9 09:51 发表
[root@3.7.0Biz-47 /home/aaa]# dd if=/dev/zero of=/home/aaa/xx bs=1024 seek=10 count=0
0+0 records in
0+0 records out
[root@3.7.0Biz-47 /home/aaa]# ls -l
-rw-r--r--  1 root root 10240 Aug  9 0 ...



用 ls -l 看是不准的,因为这是一个 sparse 文件,要用 ls -s 看才是真正占用的 blocks 数量

或者用 stat 命令也可以

论坛徽章:
0
8 [报告]
发表于 2007-08-09 10:45 |只看该作者
多谢楼上的兄弟,哈哈

论坛徽章:
0
9 [报告]
发表于 2007-08-09 14:16 |只看该作者
看来只能慢慢填吗?刚刚测试了一下,填的速度最快的还是bs=1M,在要测试的系统上填1G要1分钟,总共要填两百多G,需要不少时间呢

我只知道在NTFS格式的分区上可以快速创建一个大的空文件,像Bitcomet的下载前分配空间
linux下编程不知道有没有办法实现呢?

btw, flashget分配空间的方法还是那么老套,速度很慢

论坛徽章:
0
10 [报告]
发表于 2007-08-09 14:20 |只看该作者
另外我发现随着文件的增大似乎创建的时间也随着增多,而且不是线性增长,怎麼回事???

[root@Tester log]# dd if=/dev/zero of=emptyfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.491788 seconds, 213 MB/s
[root@Tester log]# dd if=/dev/zero of=emptyfile bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 31.6226 seconds, 33.2 MB/s

/data # time dd if=/dev/zero of=emptyfile bs=1M count=100
100+0 records in
100+0 records out
real    0m 5.87s
user    0m 0.00s
sys     0m 3.34s
/data # time dd if=/dev/zero of=emptyfile bs=10M count=10
10+0 records in
10+0 records out
real    0m 6.58s
user    0m 0.00s
sys     0m 3.40s
/data # time dd if=/dev/zero of=emptyfile bs=100M count=1
1+0 records in
1+0 records out
real    0m 6.62s
user    0m 0.02s
sys     0m 3.36s
/data # time dd if=/dev/zero of=emptyfile bs=100k count=1000
1000+0 records in
1000+0 records out
real    0m 6.86s
user    0m 0.03s
sys     0m 3.70s
/data # time dd if=/dev/zero of=emptyfile bs=10k count=10000
10000+0 records in
10000+0 records out
real    0m 10.78s
user    0m 0.03s
sys     0m 4.83s
/data # time dd if=/dev/zero of=emptyfile bs=1M count=1000
1000+0 records in
1000+0 records out
real    1m 3.29s
user    0m 0.01s
sys     0m 33.57s
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP