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]