`truncate --io-blocks` 使用什么大小的块?

`truncate --io-blocks` 使用什么大小的块?

GNU 的块大小是多少truncate --io-blocks使用?

      -o, --io-blocks
             treat SIZE as number of IO blocks instead of bytes
  • 512字节
  • blockdev --getbsz
  • blockdev --getpbsz

答案1

以上都不是。

块大小与 mkfs 时选择的文件系统参数有关,可以通过运行stat()文件来找到。它与存储文件系统的底层块设备(如果有)无关。

例如,使用 GNU stat

$ /usr/bin/stat . | grep IO.Block       
  Size: 71680           Blocks: 144        IO Block: 2048   directory

如果您更喜欢更具编程性的视图,stat()可以使用以下命令进行系统调用perl

$ perl -e '@x=stat("."); print $x[11]'
2048

在这两种情况下,我们都会得到“2048”作为该文件系统的答案。

我们可以验证这一点:

$ truncate -o -s 1 foo      
$ ls -l foo
-rw-r--r-- 1 sweh sweh 2048 Sep 17 10:28 foo

不同的文件系统可以有不同的块大小。例如,在我的机器上,我使/news磁盘使用较小的块大小,因为它主要存储较小的文件

$ perl -e '@x=stat("/"); print $x[11]'
4096

$ perl -e '@x=stat("/news"); print $x[11]'
2048

对于 Linux文件系统,这是通过以下标志完成的:extxmke2fs-b

   -b block-size
          Specify  the  size  of blocks in bytes.  Valid block-size values
          are 1024, 2048 and 4096 bytes per block.  If omitted, block-size
          is  heuristically  determined  by  the  filesystem  size and the
          expected usage of the filesystem (see the -T option).  If block-
          size  is preceded by a negative sign ('-'), then mke2fs will use
          heuristics to determine the appropriate  block  size,  with  the
          constraint  that  the  block  size  will  be at least block-size
          bytes.  This  is  useful  for  certain  hardware  devices  which
          require that the blocksize be a multiple of 2k.

相关内容