df 명령이 올바른 값을 표시하지 않습니다.

df 명령이 올바른 값을 표시하지 않습니다.

이것은 RHEL 서버이고 그 서버에서 MySQL 서버를 실행하고 있으며 데이터베이스와 로그 파일(그러나 로깅은 비활성화되어 있음)은 /srv사용 가능한 공간이 충분한 디렉터리에 있습니다.

최근에 테이블이 충돌하여 수정하려고 했지만 다음 날 디스크 공간이 없다는 오류와 함께 MySQL이 많은 쿼리에 응답할 수 없다는 사실을 발견했습니다.

ERROR 1030 (HY000): Got error 28 from storage engine

그래서 무엇이 공간을 차지하고 있는지 확인하기 위해 다음 명령을 실행했습니다.

[root@tms /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/server-slash
                      9.9G  9.5G     0 100% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/sda1             485M   58M  402M  13% /boot
/dev/mapper/server-var
                      739G  252G  450G  36% /srv

놀라운 것은 카탈로그입니다 /. 그러나 더욱 놀랍게도 아래 디렉토리에는 /사용된 공간이 다음보다 많다는 것을 나타내지 않습니다.2GB, df전체 공간을 표시 하면서9.9GB을 위한 /.

[root@tms /]# du -sh /*
7.5M    /bin
48M     /boot
200K    /dev
24M     /etc
4.0K    /home
223M    /lib
21M     /lib64
16K     /lost+found
4.0K    /media
4.0K    /mnt
183M    /opt
...deleted some file-not-found errors for files under /proc
0       /proc
144K    /root
14M     /sbin
4.0K    /selinux
252G    /srv
0       /sys
44K     /tmp
917M    /usr
259M    /var

그러면 df잘못된 값이 표시되는 이유는 무엇입니까? 실제로 공간을 차지하는 것이 무엇인지 어떻게 알 수 있나요?

답변1

일반적인 프로그래밍 기술은 임시 파일을 생성하고 즉시 링크를 해제()하는 것입니다. 이렇게 하면 프로그램이 실행되는 동안 파일(및 해당 공간)을 사용할 수 있지만 파일을 사용하는 프로그램이 종료되면 파일이 자동으로 삭제됩니다. 한 가지 장점은 에필로그(정리) 코드를 작성할 필요가 없다는 것입니다.

프로세스가 링크되지 않은 파일을 열어두는지 확인하려면 다음을 수행하십시오.

lsof -a +L1 /dev/server_slash

(또는)

lsof +D /dev/server_slash +L1

NLINK 값이 0인 모든 파일을 찾습니다. 이러한 파일의 링크 수는 0이며 마지막 프로세스가 종료되면 사라집니다. SIZE/OFFSET 열은 관련 파일의 문자 크기를 제공합니다.

답변2

1) dfUNIX 스타일 파일 시스템에서는 루트용으로 예약된 공간을 보고하지 않습니다(기본값은 5%). 따라서 df보고된 콘텐츠는 항상 필요한 것보다 적습니다.

2) 그런데 여기서는 srv 파티션을 마운트하지 않고 데이터베이스를 실행하고 있는 것 같습니다. srv 파티션이 마운트되지 않은 경우 내용이 마운트 지점에 기록됩니다. /- 파티션의 srv 디렉터리로 이동합니다. (루트 파티션)이므로 / 파티션에서 많은 공간을 차지합니다.

그러나, 당신이하다srv-directory에 srv-partition을 마운트하면 /-partition의 srv-directory 아래에 있는 모든 파일이 "마운트한" 파티션에 의해 "숨겨집니다". 하지만 공간은 여전히 ​​사용되지만 볼 수는 없습니다. 삭제하거나 액세스하여 삭제할 수 있습니다.

srv-partition을 마운트 해제해 보십시오(singleuser-moder/runlevel 1/maintenance 모드로 이동하여 모든 것이 중지됨). 실제로 마운트 해제되었는지 확인하고(를 사용하여 mount) 일반적으로 마운트 지점으로 사용하는 디렉토리에 숨겨진 파일이 있는지 확인하십시오. (usr, srv, home, var, tmp, ...)는 / 파티션에 있습니다. 나는 당신이 그들 중 일부에서 중요한 것을 발견할 것이라고 확신합니다. 완료하고 재부팅한 후에는 srv 파티션이 실제로 올바른 방식으로 마운트되었는지 확인하십시오.

이는 일반적으로 마운트된 파티션에 의해 숨겨진 디렉토리에 항목을 저장할 수 있으며 실제로 때때로 유용할 수 있습니다.

관련 정보