fallocate 및 mkfs.ext4를 사용하면 사용 가능한 디스크 공간이 초과될 수 있습니다.

fallocate 및 mkfs.ext4를 사용하면 사용 가능한 디스크 공간이 초과될 수 있습니다.

배경: 컴퓨터 클러스터가 있고 노드가 할당되면 작업이 요청한 크기의 tmp 디렉터리를 가져옵니다. 그러나 요청된 총 디스크 공간이 사용 가능한 공간보다 큰 경우 동일한 시스템에 두 개의 작업을 보낼 수 있다는 것을 알았습니다. 오류를 fallocate및 에서 추적했습니다 mkfs.ext4.

1.1T의 여유 디스크 공간이 있는 테스트 노드/머신에서 tmp 디렉터리를 마운트하기 위한 가상 디스크를 만들었습니다. 사용 fallocatemkfs.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% /

나는 이런 일이 일어나는 것을 원하지 않습니다. 여유 공간이 부족한 경우 가상 디스크를 생성해서는 안 되며, 일단 마운트되면 가상 디스크에 대한 쓰기는 해당 크기에 따라 제한되어야 합니다.

여기서 무슨 일이 일어나고 있는 걸까요?

답변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% /

파일이 d 일 때 디스크 사용량은 증가 fallocate하지만 d 이후에는 다시 감소합니다 mkfs. 참고하세요"장치 블록 폐기: 완료"출력에서 mke2fs. (Frost Schutz가 댓글에서 이것을 언급했습니다..)

이것맨 페이지에는 다음과 같은 내용이 있습니다.-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실패했습니다.

관련 정보