磁盘空间去哪里了

由于阿里云上的ssd的都有吞吐量的限制,而且都很低,于是没办法,只能用lvm条带的方式去进行。可这次加完16块盘后发现,怎么磁盘空间少了200多G,准确的说是240G。
本来以为是lvm条带导致的,但是看了下lvm里面的大小是正确的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# lvdisplay
--- Logical volume ---
LV Path /dev/data/es
LV Name es
VG Name data
LV UUID wuvsNO-Sgc2-TrAA-jfPu-K4KC-Teii-wUyfDK
LV Write Access read/write
LV Creation host, time abc-es37, 2018-12-27 19:32:40 +0800
LV Status available
# open 1
LV Size <4.69 TiB
Current LE 1228784
Segments 4
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 252:0

首先我们看到的是这里是4993286504KB,约等于是4.65TB,但是上面lvdisplay明明是4.69TB啊,这少了40G啊。
其次我们用df看的时候Used+Avail就是跟总的有240G的差距,这个盘要小还好说,但是现在都差了240G了,这个就实在说不过去了。

1
2
3
4
5
6
7
8
9
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 41152832 4116164 34923184 11% /
devtmpfs 32892716 0 32892716 0% /dev
tmpfs 32903348 0 32903348 0% /dev/shm
tmpfs 32903348 648 32902700 1% /run
tmpfs 32903348 0 32903348 0% /sys/fs/cgroup
/dev/mapper/data-apps 4993286504 4104325072 637290088 87% /data
tmpfs 6580672 0 6580672 0% /run/user/1000

我们知道Linux下的文件系统都有inode的概念,那必定有部分空间是给inode使用的。在ext4文件系统中,一个inode是256byte。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# tune2fs -l /dev/data/es
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none>
Last mounted on: /data
Filesystem UUID: b92bbda3-30d7-4231-8234-f2a9e3ca89e8
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 157286400
Block count: 1258274816
Reserved block count: 62913740
Free blocks: 229683365
Free inodes: 157214565
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 4096
Inode blocks per group: 256
RAID stride: 16
RAID stripe width: 64
Flex block group size: 16
Filesystem created: Thu Dec 27 19:32:50 2018
Last mount time: Tue Jan 1 15:19:37 2019
Last write time: Tue Jan 1 15:19:37 2019
Mount count: 3
Maximum mount count: -1
Last checked: Thu Dec 27 19:32:50 2018
Check interval: 0 (<none>)
Lifetime writes: 5789 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 681bcdd9-8371-4641-a850-4e1d6f23c143
Journal backup: inode blocks

通过上面信息可以很容易计算出来是37.5G的空间给了inode。这就是lvdisplay和df看到total里面的差距。
那剩下的就是Total和Used+Available之间的差距。答案就是Reserved block里,这个是文件系统预留的大小,防止磁盘真的满了无法进行任何操作了。这个默认是给了5%的空间。 好了这2个加起来就是276.5

1
2
3
4
# expr 157286400 \* 256 / 1024 / 1024 / 1024
37.5
# expr 62913740 \* 4 / 1024 / 1024
239

这样我们算出来,这个4.69TB的磁盘大概有276GB磁盘空间是不能使用的。其中37.5G因为inode原因,这个除非调整inode大小,不然肯定没法用了,那就调整磁盘保留空间的大小,默认是5%,那就改成1%吧。

1
# tune2fs -m 1 /dev/data/es

好了,这下应该就差不多满意了。