背景:我们有一个计算机集群,在节点分配时,作业获得自己请求大小的tmp目录。不过,我注意到可以将两个作业发送到同一台计算机,所请求的磁盘空间比可用的磁盘空间还要大。我追踪到了fallocate和mkfs.ext4的bug。
在具有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创建两个大小都为900 g的文件
# 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 dir:
# df -h /tmp
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg.01-lv_root 1.1T 8.6G 1.1T 1% /我不希望这种事发生。如果没有足够的空间,就不能创建虚拟磁盘,并且一旦挂载,对它们的写入就应该受到其大小的限制。
这里发生什么事情?
发布于 2018-07-05 14:38:32
是的,我可以复制:
# 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% /当文件为fallocated时,磁盘使用率会上升,但在mkfs之后则会下降。注意mke2fs输出中的“丢弃设备块:已完成”。(弗罗斯特舒茨在评论中提到了这一点。.)
手册页说-E discard:
丢弃试图在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失败了。
https://unix.stackexchange.com/questions/453571
复制相似问题