简介

        本文介绍Linux文件系统相关命令,有实例。命令有:dd、sync、fsck、mkfs、mkfs.ext4、mke2fs、mkfs.ubifs、mount。

dd

简记

dd:device driver

作用

它用来读取设备、文件中的内容(原始数据),可以在拷贝的同时进行指定的转换。

格式

dd 选项

选项

注意:本命令的长度都是10进制的,无法用0x等指定16进制。

1. if=文件名:             输入文件名,缺省为标准输入。即指定源文件。< if=input file>

2. of=文件名:            输出文件名,缺省为标准输出。即指定目的文件。< of=output file>

3. ibs=bytes:             一次读入bytes个字节,即指定一个块大小为bytes个字节。

   obs=bytes:             一次输出bytes个字节,即指定一个块大小为bytes个字节。

   bs=bytes:               同时设置读入/输出的块大小为bytes个字节。

4. cbs=bytes:            一次转换bytes个字节,即指定转换缓冲区大小。

5. skip=blocks:         从输入文件开头跳过​blocks个块​后再开始复制。

6. seek=blocks:       从输出文件开头跳过​blocks个块​后再开始复制。    

7. count=blocks:       仅拷贝blocks个块,块大小等于ibs指定的字节数。

8. conv=conversion:用指定的参数转换文件。 

  ascii           由EBCDIC 码转换至ASCII 码

  ebcdic        由ASCII 码转换至EBCDIC 码

  ibm             由ASCII 码转换至替换的EBCDIC 码

  block          将结束字符块里的换行替换成等长的空格

  unblock       将cbs 大小的块中尾部的空格替换为一个换行符

  lcase          将大写字符转换为小写

  ucase         将小写字符转换为大写

  swab          交换每一对输入数据字节

  sync           将每个输入数据块以NUL 字符填满至ibs 的大小;当配合block或unblock 时,会以空格代替NUL 字符填充

  excl            如果输出文件已经存在,则失败

  nocreat       不产生输出文件

  notrunc       不截断输出文件

  noerror       读取数据发生错误后仍然继续

  fdatasync     结束前将输出文件数据写入磁盘

  fsync            类似上面,但是元数据也一同写入

9.   iflag=符号     按照以逗号分隔的符号列表指定的方式读取

10. oflag=符号    按照以逗号分隔的符号列表指定的方式写入

iflag/oflag符号

  append        追加模式(仅对输出有意义;隐含了conv=notrunc)

  direct           使用直接I/O 存取模式

  directory      除非是目录,否则 directory 失败

  dsync           使用同步I/O 存取模式

  sync             与上者类似,但同时也对元数据生效

  fullblock        为输入积累完整块(仅iflag)

  nonblock      使用无阻塞I/O 存取模式

  noatime       不更新存取时间

  nocache       丢弃缓存数据

  noctty           不根据文件指派控制终端

  nofollow      不跟随链接文件

块和字节数后可能带有以下的一个或多个后缀:


符号



大小



c



1



w



2



b



512



kB



1000



K



1024



MB



1000*1000



M



1024*1024



GB



1000*1000*1000



G



1024*1024*1024



T, P, E, Z, Y也是如此


示例


目的



命令



说明



复制文件1前n个字节到文件2



dd if=file1 of=file2 bs=1 count=n

或dd if=file1 of=file2 bs=n count=1






生成指定大小的文件,内容为0



dd if=/dev/zero of=/mnt/pic/dd_myxxx bs=xxx count=1






生成指定大小的文件,内容随机

(不能为0)



dd if=/dev/urandom of=./file1 bs=xxx count=1



/dev/random可产生更随机的数据,但与dd混用不如/dev/urandom效率高



销毁磁盘数据



dd if=/dev/urandom of=/dev/hda1



随机数据填充硬盘,可销毁数据



将/dev/hdb整盘备份到/dev/hdd



dd if=/dev/hdb of=/dev/hdd






将/dev/hdb整盘备份到指定文件



dd if=/dev/hdb of=/root/image






将备份文件恢复到指定盘



dd if=/root/image of=/dev/hdb






修复硬盘




dd if=/dev/sda of=/dev/sda



    当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic fluxpoint。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。此命令有可能使这些数据起死回生,且这个过程是安全,高效的。



分割、合并文件



分割:

dd if=file1 of=zz1 bs=1 count=20000000 

dd if=file1 of=zz2 bs=1 count=20000000 skip=20000000 

dd if=file1 of=zz3 bs=1 count=20000000 skip=40000000 

合并:

dd if=zz1 of=file2 bs=1 count=20000000 

dd if=zz2 of=file2 bs=1 count=20000000 seek=20000000 

dd if=zz3 of=file2 bs=1 count=20000000 seek=40000000 



执行之后file1和file2是一样的


/dev/zero和/dev/null

1./dev/zero

  是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何

你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

2./dev/null

  它是空设备,也称为位桶(bitbucket),外号叫无底洞,你可以向它输出任何数据,任何写入它的输出都会被抛弃。

  如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。

例1:禁止标准输出

  cat filename >/dev/null

  文件内容丢失,而不会输出到标准输出.

例2:禁止标准错误

  rm badname 2>/dev/null

  这样错误信息[标准错误]就被丢到太平洋去了

例3:禁止标准输出和标准错误的输出

  cat filename 2>/dev/null>/dev/null

  如果"$filename"不存在,将不会有任何错误信息提示;如果"$filename"存在,文件的内容不会打印到标准输出。

  因此,上面的代码根本不会输出任何信息。当只想测试命令的退出码而不想有任何输出时非常有用。

sync

作用

强制把文件系统buffer的内容,写入系统磁盘

详解

linux系统为了提高读写磁盘的效率和读数据的速度,会先将数据放在一块buffer中。

1.写数据时,会先将数据放在一块buffer中,写磁盘时不是立即将数据写到磁盘,而是先写入这块buffer。

2.所以在默认的情况中, 某些已经加载内存中的数据将不会直接被写回硬盘,而是先缓存在内存当中。如果一个数据被重复的改写,由于他尚未被写入硬盘,因此可以直接由内存当中读出来, 会快很多。

    sync命令用来flush文件系统buffer,这样数据才会真正的写到磁盘中,并且buffer才能够释放出来,

flush就是用来清空buffer。sync命令会强制将数据写入磁盘中,并释放该数据对应的buffer,所以常常会

在写磁盘后输入sync命令来将数据真正的写入磁盘。

    如果不去手动的输入sync命令来真正的去写磁盘,linux系统也会周期性的去sync数据。

    目前的 shutdown/reboot/halt 等等命令均已经在关机前进行了 sync 这个工具的呼叫。

    为确保可靠起见,应执行两遍sync命令,这是因为sync命令完成时,并不保证信息实际写到了磁盘上,虽然已经执行了一遍这个命令。

fsck

作用

检查文件系统并尝试修复错误。可以打印出现有文件数量/最大能创建的文件数量;现有块数目/最大能使用的块数目。

格式

fsck [选项] [文件系统]

选项

  -y:对所有文件进行检测,对所有提问都用yes回答,无须人工干预,自动修复文件系统

  -n:对所有文件进行检测,对所有提问都用no回答,只检测文件系统,不进行修复,只报告

  -D:通知fsck 额外检查系统的一致性

  -a    自动修复文件系统,不询问任何问题。

  -A    依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。

  -f      显示non-contiguous信息

  -N    不执行指令,仅列出实际执行会进行的动作。

  -P    当搭配"-A"参数使用时,则会同时检查所有的文件系统。

  -r      采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。

  -R     当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查。

  -s     依序执行检查作业,而非同时执行。

  -t<文件系统类型> 指定要检查的文件系统类型。

  -T    执行fsck指令时,不显示标题信息。

  -V    显示指令执行过程。

示例

1.fsck.ext4  /dev/part/pic -n

2.查看/dev/part/pic的碎片化程度

    fsck -fn /dev/part/pic

mkfs

作用

在特定的分区创建linux文件系统

格式

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

选项 

  device : 预备检查的硬盘partition,例如:/dev/sda1

  -V : 详细显示模式

  -t : 给定档案系统的型式,Linux的预设值为 ext2

  -c :在制做档案系统前,检查该partition 是否有坏轨

  -l bad_blocks_file :将有坏轨的block资料加到 bad_blocks_file 里面

  block : 给定 block 的大小

  -L:建立lable

mkfs.ext4


作用



在特定的分区创建linux的ext4文件系统



格式



mkfs.ext4 [options] device [blocks-count]



选项



-c



格式化前检查分区是否有坏块



-l



filename从文件读坏块列表



-C cluster-size



簇大小 (大块分配持性)



-D



使用direct I/O



-E



扩展属性

lazy_itable_init=0/1   itable(inode table)惰性初始化(清零)。默认为1    

   0:关闭惰性初始化,在格式化时进行itable初始化

   1:开启惰性初始化。如果uninit_bg feature也使能了,itable不会被mke2fs完全初始化(清零)。

      这加速了文件系统初始化速度,但它需要内核在文件系统第一次挂载之后在后台完成初始化。


lazy_journal_init=0/1  journal惰性初始化(清零)。默认为1

   0:关闭。

   1:打开。journal inode不会被mke2fs完全清0。这加速了文件系统初始化速度,如果文件系统

      在journal被一次完全写入之前崩溃了会有小的风险。


 mmp_update_interval=MMP更新时间间隔,必需小于300s

 stride=条块大小(RAID组中每个条带单元chunk大小)

 stripe_width=条带大小 (单位为block)(在数据定时,块分配器尽可能的防止产生read-modify-write)

 resize=保留在线调整时的空间大小

 test_fs设置文件系统体验标志

示例:mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0



-F



强制执行(force)。有些mkfs工具版本格式化时检测到已有文件系统数据会提示继续进行的选择。



-f



指定片段大小。(fragment-size)



-g blocks-per-group



每一个块组内块的数量



-G flex-group-size



指定柔性数组大小(在元数据负载重时可以提高元数据性能)



-i bytes-per-inode



指定每个inode多少个字节



-I inode-size



指定inode size大小,默认配置文件在/etc/mke2fs.conf,inode_size = 256



-j



创建一个ext3日志。默认创建合适大小的日志区



-J journal-options



创建指定属性的日志。逗号分隔。

size= journal-size  内部日志大小

    单位为M,最小为1024个文件系统块,最大为10240000个文件系统块或文件系统的一半。即:4M-40M。

location=journal-location

device = external-journal 外部日志块设备(设备名,标签,UUID)

外部日志必需先创建:

mke2fs -b 4096 -O journal_dev  external-journal (/dev/ramhda)

mkfs.ext4 -J device= external-journal (/dev/ramhda)  -F /dev/mapper/vggxxxxxxx



-L volume-label



设置volume 标签,最长为16个byte



-m reserved-blocks-percentage



指定预留block总个数的百分比,默认是5%



-M last-mounted-directory



指定最后挂载的目录路径



-N number-of-inodes



指定inode个数,最大创建文件个数



-n



不真正创建文件系统,只是显示创建的信息



-O feature



指定创建文件系统时的持性(/etc/mke2fs.conf)

bigalloc  使能大块分配(cluster-size)

dir_index 使用哈希B树加速目录查找

extents  使用extents替代间接块

filetype  在目录项中存储文件类型信息

flex_bg  允许为每一个块组元数据(分配bitmap和inode表)存放在任何位置 

has_journal  创建ext3日志(-j)

journal_dev  在给定的设备上创建外部ext3日志

large_file  支持>2G的文件(现代内核会自动打开) 

quota   创建quota inodes(inode#3为用户配额,inode#4为组配额) ,并在超级块中设置。

   (挂载后自己启用quota)

resize_inode 保留空间以便未来块组描述表增长。用于resize2fs

sparse_super 创建少量的超缓块拷贝

uninit_bg     创建文件系统时不初始化所有的块组,加速创建时间,和e2fsck时间、

^has_journal   不启用日志



-r fs-revision



指定要建立的ext4文件系统版本。0:静态;1:动态



-S



只写超级块和块组描述符。

  (当超级块和备份超级块错误后,可以用来恢复数据。因为它不会touching inode表和bitmap)



-T fs_types



   largefile    存储大文件。

    文件单位1MB,默认情况下blocks是inodes的4倍,存储基本单位是block 4k,意思就是全部存储16K单位文件inodes可以最大限度把blocks用完。

    file_size = 16k,inode刚好用完

    file_size > 16k,inode用不完

    file_size < 16k,inode不够用

    可以写脚本进行测试验证。



-t fs-type



指定文件系统类型



-U UUID



指定文件系统UUID



-v



显示详细信息



-V



显示版本信息


示例

mkfs.ext4 -N 1024 -E lazy_journal_init=1 -F /dev/mmc01

加快格式化的方法​:减少inode数量,减少日志区大小 

  mkfs.ext4 /dev/sda1 -T largefile -E lazy_journal_init=1 -F

  -N可以指定inode数量,-i也可以通过指定多少字节分配inode俩减少inode总数的目的,另外还有使用-T largefile参数,和使用-i参数效果是一样的。

mke2fs

简介

mkfs.ext2、mkfs.ext3、mkfs.ext4、mkfs.ext4 dev都是软链接到mke2fs。

mke2fs会根据去读/etc/mke2fs.conf对应的配置,然后执行格式化。

mke2fs -t ext4等价于mkfs.ext4。

命令格式​:

mke2fs [-cFMqrSvV] [-b <区块大小>] [-f <不连续区段大小>] [-i <字节>] [-N <inode数>] [-l <文件>] [-L <标签>] [-m <百分比值>] [-R=<区块数>] [ 设备名称] [区块数]

示例

mke2fs -t ext4 -O ^metadata_csum -F /dev/part/store

源码下载地址​:​​Index of /e2fsprogs​

移植方法​:

tar -xzf e2fsprogs-1.42.5.tar.gz

cd e2fsprogs-1.42.5

mkdir release

cd release/

../configure --host=arm-linux CC=arm-linux-gcc LDFLAGS=-static

make


release各个目录下,已生成可执行程序,直接拷到arm平台下即可使用了。

若单板flash空间紧张,可将部分功能编译成动态库。

方法如下:

../configure --host=arm-linux CC=arm-linux-gcc --enable-elf-shlibs

make

release下面的相应子目录中已生成了可执行文件及动态库。接下来要拷贝文件了。

假如我们需要release/misc/mke2fs这个程序。那么首先用readelf看看mke2fs需要使用哪些动态库。

[root@localhost relaese]# readelf -d misc/mke2fs

Dynamic section at offset 0x11474 contains 30 entries:

  Tag        Type                         Name/Value

0x00000001 (NEEDED)                     Shared library: [libext2fs.so.2]

0x00000001 (NEEDED) Shared library: [libcom_err.so.2]

0x00000001 (NEEDED)                     Shared library: [libblkid.so.1]

0x00000001 (NEEDED)                     Shared library: [libuuid.so.1]

0x00000001 (NEEDED)                     Shared library: [libe2p.so.2]

0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]

0x00000001 (NEEDED)                     Shared library: [libc.so.0]

可以看出一共需要7个库。由于最后两个是标准C库,板子上本来就有。因此,我们只需要拷贝前5个即可。

将release/lib目录下对应的5个动态库拷贝到单板的/lib目录下,然后将release/misc/mke2fs拷贝到单板的/sbin目录下即可。

mkfs.ubifs


作用



通过已经存在的目录树来制作ubifs文件系统镜像



格式



mkfs.ubifs [OPTIONS] target



参数



-r, -d, --root=DIR       



build file system from directory DIR                    



-m, --min-io-size=SIZE ​  



最小的I/O操作的大小。NAND FLASH:一个page的大小。NOR FLASH:  一个字节​  



-e, --leb-size=SIZE ​    



logical erase block size。​逻辑擦除块的大小 ​                              



-c, --max-leb-cnt=COUNT 



maximum logical erase block count  ​最大逻辑擦除块的数量​                     



-o, --output=FILE ​       



output to FILE。​最终制作成的根文件镜像的文件名​                                         



-j, --jrn-size=SIZE      



journal size                                            



-R, --reserved=SIZE      



how much space should be reserved for the super-user    



-x, --compr=TYPE         




compression type - "lzo", "favor_lzo", "zlib" or        

"none" (default: "lzo")                                 



-X, --favor-percent  



may only be used with favor LZO compression and defines how many percent better zlib should compress to make mkfs.ubifs use zlib instead of LZO (default 20%)        



-f, --fanout=NUM         



fanout NUM (default: 8)                                 



-k, --keyhash=TYPE       



key hash type - "r5" or "test" (default: "r5")          



-p, --orph-lebs=COUNT​    



count of erase blocks for orphans (default: 1) 。​物理擦除块的大小​        



-D, --devtable=FILE      



use device table FILE                                   



-U, --squash-uids        



squash owners making all files owned by root            



-l, --log-lebs=COUNT 



count of erase blocks for the log (used only for debugging) 



-v, --verbose            



verbose operation                                       



-V, --version            



display version information                             



-g, --debug=LEVEL 



display debug information (0 - none, 1 - statistics,  2 - files, 3 - more details)



-Q, --squash-rino-perm   




ignore permissions of the FS image directory (the one specified with --root) and make the UBIFS root inode permissions to be {uid=gid=root, u+rwx,go+rx}; this is a legacy compatibility option and it will be removed    

at some point, do not use it                           



-q, --nosquash-rino-perm




for the UBIFS root inode use permissions of the FS image directory (the one specified with --root); this is the default behavior; this option will be removed at some point, do not use it, see clarifications below;



-h, --help               



display this help text



示例



Build file system from directory /opt/img, writting the result in the ubifs.img file:

        mkfs.ubifs -m 512 -e 128KiB -c 100 -r /opt/img -o ubifs.img  //-o可以不写

The same, but writting directly to an UBI volume:

        mkfs.ubifs -r /opt/img /dev/ubi0_0

Creating an empty UBIFS filesystem on an UBI volume:

        mkfs.ubifs /dev/ubi0_0


mount


作用



磁盘或分区创建好文件系统后,需要挂载挂载到一个目录才能够使用



格式



mount [-fnrsvw] [-t vfstype] [-o options] device dir



选项



-a



将 /etc/fstab 中定义的所有档案系统挂载上。

系统启动时,会默认挂载/etc/fstab定义的挂载,相当于执行了mount -a



-B, --bind

(不一定支持)



绑定目录(或文件)到另一个目录(或文件)上。

例如:mount /test1 /test2会失败,因为/test1不是块设备,但mount -B /test1 /test2可以成功。

此命令执行之后,df命令查询不到,df -a可以查询到。



-F



通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作



-f



通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用



-h



显示帮助信息



-L 'LABEL'



将含有特定卷标名的设备分割挂上。

除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载



-n



不更新/etc/mtab。

    一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。而在这种操作下,运用mount命令跟df命令均无法查看挂载信息,但可以用proc/mounts查看。



-r



只读挂载。readonly



-w



读写挂载。read and write



-t



指定文件系统类型,若不指定则mount 会自动选择正确的类型。支持的类型有:

       adfs,  affs,  autofs,  cifs,  coda, coherent, cramfs, ​debugfs​, devpts, efs,​ ext, ext2, ext3, ext4, hfs​, hfsplus, hpfs, iso9660, ​jffs,  jffs2​, jfs, minix, msdos, ncpfs, ​nfs​, nfs4, ntfs,​ proc​, qnx4, ​ramfs​, reiserfs, romfs, squashfs, smbfs, sysv, ​tmpfs​,  ​ubifs​,  udf,  ufs, umsdos, usbfs,  vfat,  xenix,  xfs, xiafs, ​yaffs



-U 'UUID'



以UUID指定要挂载的设备



-V



显示程序版本



-v



执行时显示详细的信息。



-o options



-o defaults



使用预设的选项 rw, suid, dev, exec, auto, nouser, and async



-o sync/async



同步/异步 模式。



-o atime/noatime



是否更新访问(access)时间(目录和文件)。默认为-o atime

    当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。



-o diratime/nodiratime



是否更新目录访问(access)时间。



-o auto/noauto



是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。



-o dev/nodev



是否允许使用 字符/块设备 文件,默认是 dev



-o exec/noexec



在文件系统中是否允许执行可执行文件,默认是允许。


-o nolock

不锁定

-o proto=tcp

指定传输协议。默认为udp,容易丢包,易产生错误:nfs: server xx.xx.xx.xxx not responding, still trying


-o suid/nosuid



设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有



-o user/nouser



使用者(非root用户)可以/不可以执行 mount/umount 的动作。默认是不允许(nouser)



-o ro/rw



只读/读写



-o remount



将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是只读的系统,现在用可读写的模式重新挂上。



-o loop



使用 loop 模式用来将一个文件当成硬盘挂上系统


示例:

1.挂载网络文件系统

  mount -t nfs -o nolock,vers=2 192.168.1.193:/work/nfs_root/new_fs /mnt    //挂载网络文件系统

  //若出现failed: Protocol not supported   则去掉  vers=2这个选项

2.挂载ext4系统

  mount -t ext4 /dev/mmc09 /mnt/pic

3.挂载yaffs系统

  mount -t yaffs /dev/mtdblock3 /mnt                              

4.挂载模拟磁盘

  mount /dev/ramblock /tmp/                                           

5.把一个文件当成硬盘分区挂接上系统

  mount -o loop ramblock.bin /mnt       


注意​:可以用​umount命令解除挂载

例如:mount -t ext4 /dev/part/pic /mnt/pic

则下边三条命令都可以解除挂载

umount /dev/part/pic

umount /mnt/pic

umount /dev/part/pic /mnt/pic

问题解决​:

日志:nfs: server xx.xx.xx.xxx not responding, still trying

改为此命令挂载:mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.193:/work/nfs_root/new_fs /mnt

创建大文件命令

实际写入介质的方法

以前创建文件我一般用dd来创建,例如创建一个512M的文件:

dd命令可以轻易实现创建指定大小的文件,如

dd if=/dev/zero of=test bs=1M count=1000

会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源)

但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。

不实际写入介质的方法

        在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘则可以:

dd if=/dev/zero of=test bs=1M count=0 seek=100000

        此时创建的文件在文件系统中的显示大小为100000MB,但是并不实际占用block,因此创建速度与内存速度相当

seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。

        当然,因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的

记得以前做Windows开发的时候,有个API叫SetEndOfFile,可以用来将文件内部游标所在位置设为文件末尾,可以用来截取或者扩展文件,这个函数本质上相当于直接操作文件分区表的结构,用它来作文件扩展是不需要频繁的填充文件,linux下肯定也有对应的东西,即ftrunc/truncate这两个函数。

那么直接利用这个特性来创建大文件的工具就肯定有人做好了,经搜索找到了fallocate和truncate两个命令, 以及GNU dd的seek扩展:

代码如下 

# fallocate -l 10G bigfile

# truncate -s 10G bigfile

# dd of=bigfile bs=1 seek=10G count=0