背景
有些时候测试磁盘,或者测试共享内存(比如tmpfs),或者分布式文件系统挂在的文件,需要创建较大的文件,如何快速创建?
命令
使用dd
dd
命令能够从标准输入或文件中复制数据到另一个文件
dd if=/dev/zero of=testfile bs=1K count=1
if=/dev/zero
:输入文件为/dev/zero
,该文件会持续输出空字节(\0
)。of=testfile
:指定输出文件名为testfile
。bs=1K
:意味着每次读写的数据块大小是1KB。count=10
:表示总共复制10个数据块。
该令创建一个大小为1KB的文件。
虽然这里常见大小是1KB的文件,如果文件路径在tmpfs中,对于shmem的大小会按照4KB的单元进行增长。
比如创建:
1KB、2KB、3KB、4KB:对于 /proc/meminfo中shmem都是增加4KB
5KB就会再增加4KB
修改前:
添加1KB大小的文件。
内存变化4KB
再修改文件大小为3K的文件:
内存还是不变化:
创建5KB的就又增加4KB
使用truncate
truncate
命令能够把文件大小调整为指定的值。若文件不存在,它会先创建文件,然后将其大小设置为指定值。
truncate -s 1M testfile
-s 10M
:将文件大小设置为1MB。
与dd
命令相比,truncate
命令创建文件的速度更快,因为它只是对文件系统进行操作,不会真正写入数据。
实操:
创建前:
创建1M的文件
不变化:
并未实际在内存系统创建:
再次打开文件写入试试,变化了,应该是写入实际触发。(类似copy on write)。但是事件分配页面大小稍微大了28K。主体不影响逻辑