andy27367451 发表于 2019-2-1 12:43:35

GlusterFS文件占用空间大小显示不统一问题分析

  # 这个是2014年写的老文章,当初也没分析完,仅供参考,如有问题欢迎反馈补充。
  

  
  测试环境说明:glusterfs 3.6 replica 2

  正常情况下,文件占用空间大小和文件系统的块大小密切相关。
  如xfs默认的块大小为4K,那么即便创建一个1字节的文件,也会占用4K空间。
  
  客户fuse挂载,创建小文件是以512字节进行计算,因此,在客户端创建100个小于512字节的小文件,就会显示占用50K空间,显示结果如下:
  lab23:/mnt/dzq/test]$ls
  0 12 16 2 23 27 30 34 38 41 45 49 52 56 6 63 67 70 74 78 81 85 89 92 96
  1 13 17 20 24 28 31 35 39 42 46 5 53 57 60 64 68 71 75 79 82 86 9 93 97
  10 14 18 21 25 29 32 36 4 43 47 50 54 58 61 65 69 72 76 8 83 87 90 94 98
  11 15 19 22 26 3 33 37 40 44 48 51 55 59 62 66 7 73 77 80 84 88 91 95 99
  lab23:/mnt/dzq/test]$ls -lh |head
  total 50K
  -rw-r--r-- 1 root root 2 Jan 29 15:33 0
  -rw-r--r-- 1 root root 2 Jan 29 15:33 1
  -rw-r--r-- 1 root root 3 Jan 29 15:33 10
  -rw-r--r-- 1 root root 3 Jan 29 15:33 11
  -rw-r--r-- 1 root root 3 Jan 29 15:33 12
  -rw-r--r-- 1 root root 3 Jan 29 15:33 13
  -rw-r--r-- 1 root root 3 Jan 29 15:33 14
  -rw-r--r-- 1 root root 3 Jan 29 15:33 15
  -rw-r--r-- 1 root root 3 Jan 29 15:33 16
  
  而实际上,其占用的空间并没有这么少,应该按照后台服务器的为准,后台显示结果如下:
  lab21:/letv/disk3/test]$ls
  0 12 16 2 23 27 30 34 38 41 45 49 52 56 6 63 67 70 74 78 81 85 89 92 96
  1 13 17 20 24 28 31 35 39 42 46 5 53 57 60 64 68 71 75 79 82 86 9 93 97
  10 14 18 21 25 29 32 36 4 43 47 50 54 58 61 65 69 72 76 8 83 87 90 94 98
  11 15 19 22 26 3 33 37 40 44 48 51 55 59 62 66 7 73 77 80 84 88 91 95 99
  lab21:/letv/disk3/test]$ls -lh |head
  total 400K
  -rw-r--r-- 2 root root 2 Jan 29 15:33 0
  -rw-r--r-- 2 root root 2 Jan 29 15:33 1
  -rw-r--r-- 2 root root 3 Jan 29 15:33 10
  -rw-r--r-- 2 root root 3 Jan 29 15:33 11
  -rw-r--r-- 2 root root 3 Jan 29 15:33 12
  -rw-r--r-- 2 root root 3 Jan 29 15:33 13
  -rw-r--r-- 2 root root 3 Jan 29 15:33 14
  -rw-r--r-- 2 root root 3 Jan 29 15:33 15
  -rw-r--r-- 2 root root 3 Jan 29 15:33 16
  
  原因在于,后的是xfs文件系统,默认块大小为4K,所以客户端创建一个小于4K的小文件,都会占用4K空间。
  lab21:/letv/disk3/test]$stat -f /letv/disk3/test/
  File: "/letv/disk3/test/"
  ID: fd0200000000 Namelen: 255 Type: xfs
  Block size: 4096 Fundamental block size: 4096
  Blocks: Total: 238263636 Free: 216480157 Available: 216480157
  Inodes: Total: 953520128 Free: 953175313
  
  客户端按照512Byte进行计算,服务器使用4K进行计算,对比如下:
  客户端:
  lab23:/mnt/dzq/new]$ls -lh
  total 1.5K
  -rw-r--r-- 1 root root 513 Jan 29 17:04 a
  -rw-r--r-- 1 root root 55 Jan 29 15:51 b
  
  服务器端:
  lab21:/letv/disk3/new]$ls -lh
  total 8.0K
  -rw-r--r-- 2 root root 513 Jan 29 17:04 a
  -rw-r--r-- 2 root root 55 Jan 29 15:51 b
  
  从客户端看到的块大小是128K,但实际上却是按照512进行计算,这个需要进一步分析原因:
  lab23:/mnt/dzq/new]$stat -f /mnt/dzq/test/
  File: "/mnt/dzq/test/"
  ID: 0 Namelen: 255 Type: fuseblk
  Block size: 131072 Fundamental block size: 131072
  Blocks: Total: 7445738 Free: 6765004 Available: 6765004
  Inodes: Total: 953520128 Free: 953175312
  
  确实应该没有受客户端文件系统影响,客户端文件系统块大小如下:
  lab23:/mnt/dzq/new]$stat -f /mnt/
  File: "/mnt/"
  ID: 3af66a85b8161ce8 Namelen: 255 Type: ext2/ext3
  Block size: 4096 Fundamental block size: 4096
  Blocks: Total: 2015852 Free: 169897 Available: 67497
  Inodes: Total: 512064 Free: 364916
  
  遗留问题:

[*]  为什么客户显示块大小为128k,但统计文件所占空间大小时,用的却是512字节?
[*]  fuse以128K进行数据传输,从应用场景出发,可以考虑增大后台xfs块大小,来提供小文件性能,待验证。
  

  



页: [1]
查看完整版本: GlusterFS文件占用空间大小显示不统一问题分析