ext4 파일이스템의 사용률 계산에 대한 문의
Q1)
EXT 파일시스템의 경우 단편화로 인한 성능 이슈로 기본적으로 5% Reserved Block을 가지고 가는데 Use% 계산에 영향을 미치는 것으로 보입니다.
df 로 출력 값 중 Use% 어떠한 계산식에 근거하여 산출되는지 알고 싶습니다.
Q2)
계산된 결과에서 반올림을 하나요?
예를 들어 계산식에 의해 25.57% 로 되었는데 소숫점 첫째자리 반올림을 해서 df Use% 정보가 26% 로 출력이 되는지요?
Q3)
XFS 파일시스템의 경우 기본적으로 Reserved Block 없이 파일시스템 생성이 되는것으로 알고 있습니다.
XFS 파일시스템은 데이터 단편화에 의한 성능 이슈가 없는지요? 아니면 EXT 파일시스템에 비해 상대적으로 덜한 것인지요?
1040 case SIZE_FIELD: 1041 case ITOTAL_FIELD: 1042 cell = xstrdup (df_readable (false, v->total, buf, 1043 v->input_units, v->output_units)); 1044 break; 1045 1046 case USED_FIELD: 1047 case IUSED_FIELD: 1048 cell = xstrdup (df_readable (v->negate_used, v->used, buf, 1049 v->input_units, v->output_units)); 1050 break; 1051 1052 case AVAIL_FIELD: 1053 case IAVAIL_FIELD: 1054 cell = xstrdup (df_readable (v->negate_available, v->available, buf, 1055 v->input_units, v->output_units)); 1056 break; 1057 1058 case PCENT_FIELD: 1059 case IPCENT_FIELD: 1060 { 1061 double pct = -1; 1062 if (! known_value (v->used) || ! known_value (v->available)) 1063 ; 1064 else if (!v->negate_used 1065 && v->used <= TYPE_MAXIMUM (uintmax_t) / 100 1066 && v->used + v->available != 0 1067 && (v->used + v->available < v->used) 1068 == v->negate_available) 1069 { 1070 uintmax_t u100 = v->used * 100; 1071 uintmax_t nonroot_total = v->used + v->available; 1072 pct = u100 / nonroot_total + (u100 % nonroot_total != 0); 1073 } 1074 else 1075 { 1076 /* The calculation cannot be done easily with integer 1077 arithmetic. Fall back on floating point. This can suffer 1078 from minor rounding errors, but doing it exactly requires 1079 multiple precision arithmetic, and it's not worth the 1080 aggravation. */ 1081 double u = v->negate_used ? - (double) - v->used : v->used; 1082 double a = v->negate_available 1083 ? - (double) - v->available : v->available; 1084 double nonroot_total = u + a; 1085 if (nonroot_total) 1086 { 1087 long int lipct = pct = u * 100 / nonroot_total; 1088 double ipct = lipct; 1089 1090 /* Like 'pct = ceil (dpct);', but avoid ceil so that 1091 the math library needn't be linked. */ 1092 if (ipct - 1 < pct && pct <= ipct + 1) 1093 pct = ipct + (ipct < pct); 1094 } 1095 } 1096 1097 if (0 <= pct) 1098 { 1099 if (asprintf (&cell, "%.0f%%", pct) == -1) 1100 cell = NULL; 1101 } 1102 else 1103 cell = strdup ("-"); 1104 1105 if (!cell) 1106 xalloc_die (); 1107 1108 break; 1109 }
-- 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%