背景:我们有一个计算机集群,在节点分配上,作业会获得其自己的请求大小的tmp目录。我注意到,但是我可以将两个作业发送到同一台计算机,而请求的磁盘空间总量大于可用磁盘空间。我将错误追踪到fallocate
和mkfs.ext4
。
在具有1.1T磁盘空间可用的测试节点/计算机上,我创建了虚拟磁盘以将tmp目录挂载到该虚拟磁盘。使用fallocate
和mkfs.ext4
:
# fallocate -l 900G /tmp/disk-test1
# /sbin/mkfs.ext4 -F /tmp/disk-test1
# fallocate -l 900G /tmp/disk-test2
# /sbin/mkfs.ext4 -F /tmp/disk-test2
创建两个文件(看起来都),大小均为900G
# ll --block-size=G /tmp/
...
-rw-r--r--. 1 root root 900G Jul 4 14:03 disk-test1
-rw-r--r--. 1 root root 900G Jul 4 14:03 disk-test2
...
并查看可用的磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg.01-lv_root 1.1T 8.6G 1.1T 1% /
...
/ tmp目录:
# df -h /tmp
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg.01-lv_root 1.1T 8.6G 1.1T 1% /
我不希望这种情况发生。如果没有足够的空间,则不得创建虚拟磁盘,并且在装入虚拟磁盘后,对其写入必须受其大小限制。
这里发生了什么?
是的,我可以重现一下:
# df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 14G 14G 51% /
# fallocate -l 8G test1.disk
# df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 22G 5.8G 80% /
# mkfs -text4 test1.disk
mke2fs 1.43.4 (31-Jan-2017)
Discarding device blocks: done
Creating filesystem with 2097152 4k blocks and 524288 inodes
...
# df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 14G 14G 51% /
当文件为fallocate
d时,磁盘使用率上升,而在d之后,磁盘使用率下降mkfs
。注意的输出中的“放弃设备块:已完成”mke2fs
。(弗罗斯特斯在评论中提到了这一点。)
丢弃
尝试在mkfs时间丢弃块(最初丢弃块在固态设备和稀疏/精简配置的存储上很有用)。...这是默认设置。
nodiscard
要做相反的事情,所以让我们尝试一下:
# df -h .; fallocate -l 8G test2.disk; mkfs -text4 -Enodiscard test2.disk; df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 14G 14G 51% /
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 2097152 4k blocks and 524288 inodes
...
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 22G 5.9G 79% /
现在另一个fallocate -l 8G
失败了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句