fallocate 失败:操作不受支持

fallocate 失败:操作不受支持

跑步时,

fallocate -l 10G /path/to/file

我返回了以下错误:

fallocate: file: fallocate failed: Operation not supported

使用 dd(if=/dev/zero 或 if=/dev/urandom)创建文件是可行的,但如果我尝试创建数十 GB 的大文件,则需要几个小时才能完成。

运行 Ubuntu 14.04。使用 ext4 分区,指定文件类型似乎不会改变结果。

在我的 CentOS6 机器上运行良好,但不是 Ubuntu。

答案1

如果你觉得稀疏文件没问题(例如,你想创建一个镜像以便用文件系统填充它),那么它们很快就会被创建出来

100GB 需要 3 毫秒:

# time dd if=/dev/zero of=tmptst.dat bs=1G seek=100 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0,00037726 s, 0,0 kB/s

real    0m0.003s
user    0m0.000s
sys 0m0.002s

生成的文件:

# ls -lh tmptst.dat
-rw-r--r-- 1 root root 100G 2015-01-22 16:39 tmptst.dat

目前的实际大小:0 字节

# ls -lsh tmptst.dat
0 -rw-r--r-- 1 root root 100G 2015-01-22 16:39 tmptst.dat

答案2

我也遇到了这个问题。

目录路径中的符号链接似乎是问题所在。在 /tmp 上尝试相同的命令,它应该可以工作。

我通过在 fallocate 命令中添加“-x”解决了这个问题。这会强制“posix 模式”,并且应该会花费更长时间。

即使文件系统是 ext4,符号链接也会导致“此文件系统不支持”错误。事实上,如果我直接转到目录名称(没有任何符号链接),fallocate() 调用就会起作用。

A1:您正在创建的文件的完整路径名中的任何地方都不要有符号链接。

A2:使用‘-x’,即使它需要更长的时间。

b\375

答案3

如果你不关心内容而只是需要一些数据,

首先,

dd if=/dev/urandom of=tmp.txt bs=1M count=1

它将创造,

-rw-r--r-- 1 root root 1.0M Oct 17 00:30 tmp1.txt.

然后,如果你想创建一个 10M 的文件,使用上面生成的文件进行重复追加,

for i in {1..10}; do dd if=tmp.txt of=tmp1.txt bs=1M oflag=append conv=notrunc; done;

答案4

的输出fallocate --help为:

Usage:
 fallocate [options] <filename>

Preallocate space to, or deallocate space from a file.

Options:
 -c, --collapse-range remove a range from the file
 -d, --dig-holes      detect zeroes and replace with holes
 -i, --insert-range   insert a hole at range, shifting existing data
 -l, --length <num>   length for range operations, in bytes
 -n, --keep-size      maintain the apparent size of the file
 -o, --offset <num>   offset for range operations, in bytes
 -p, --punch-hole     replace a range with a hole (implies -n)
 -z, --zero-range     zero and ensure allocation of a range
 -x, --posix          use posix_fallocate(3) instead of fallocate(2)
 -v, --verbose        verbose mode

 -h, --help           display this help
 -V, --version        display version

Arguments:
 <num> arguments may be followed by the suffixes for
   GiB, TiB, PiB, EiB, ZiB, and YiB (the "iB" is optional)

尝试这个命令:

fallocate -x -l 10G /path/to/file

相关内容