ext4 파일이스템의 사용률 계산에 대한 문의

Q1)
EXT 파일시스템의 경우 단편화로 인한 성능 이슈로 기본적으로 5% Reserved Block을 가지고 가는데 Use% 계산에 영향을 미치는 것으로 보입니다.
df 로 출력 값 중 Use% 어떠한 계산식에 근거하여 산출되는지 알고 싶습니다.

Q2)
계산된 결과에서 반올림을 하나요?
예를 들어 계산식에 의해 25.57% 로 되었는데 소숫점 첫째자리 반올림을 해서 df Use% 정보가 26% 로 출력이 되는지요?

Q3)
XFS 파일시스템의 경우 기본적으로 Reserved Block 없이 파일시스템 생성이 되는것으로 알고 있습니다.
XFS 파일시스템은 데이터 단편화에 의한 성능 이슈가 없는지요? 아니면 EXT 파일시스템에 비해 상대적으로 덜한 것인지요?

 

 

-- https://lwn.net/Articles/546473/

ext4: introduce reserved space

Currently in ENOSPC condition when writing into unwritten space, or
punching a hole, we might need to split the extent and grow extent tree.
However since we can not allocate any new metadata blocks we'll have to
zero out unwritten part of extent or punched out part of extent, or in
the worst case return ENOSPC even though use actually does not allocate
any space.

 

Answer)

EXT3/4, XFS 파일시스템은 기본적으로 파일스세템내에 5%정도의 reserved 영역을 갖게 되며, 해당 영역은 일반적으로 시스템 데몬들이라든지 Root 권한의 프로세스 등이 파일시스템에 write을 하여야 하나, 공간이 없어서 write를 못함에 따라 crash가 되는 현상을 방지하기 위해서 일정한 사이즈의 pre-reserved 영역을 갖게 되고 해당 영역은 그런 용도에서 사용됩니다.

예를들어, logging 같은 부분이 disk가 가득참에 따라 로깅을 못하고 crash되는 것을 방지하게 됩니다.

$ man tune2fs

Reserving some number of filesystem blocks for use by privileged processes is done to avoid filesystem fragmentation, and to allow system daemons, such as syslogd(8), to continue to function correctly after non-privileged processes are prevented from writing to the filesystem. Normally, the default percentage of reserved blocks is 5%.

해당 값은 일반적으로 5%이며, 해당 값은 사용자가 수정은 가능하나 권장하는 방법은 아닙니다. 그리고 privileged user는 기본적으로 root를 의미하고 추가적으로 user를 부여할 수 있으나 적극 권장드리는 부분은 아닙니다.

> 계산된 결과에서 반올림을 하나요?
> 예를 들어 계산식에 의해 25.57% 로 되었는데 소숫점 첫째자리 반올림을 해서 df Use% 정보가 26% 로 출력이 되는지요?

소스를 확인한 결과, 그냥 올림을 하고 있습니다.

> df 로 출력 값 중 Use% 어떠한 계산식에 근거하여 산출되는지 알고 싶습니다.

Use%의 값은 used / (used + available) 의 값으로 보시면 됩니다.

예를들어, total : 100 / reserved blcok : 5 / used :30 (not used in reserved block) / available : 65
Use% = 30 * 100 / ( 30 + 65 ) = 32%

파일시스템 df - use% 계산 방식 및 단편화

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다