이것은 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) df
UNIX 스타일 파일 시스템에서는 루트용으로 예약된 공간을 보고하지 않습니다(기본값은 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 파티션이 실제로 올바른 방식으로 마운트되었는지 확인하십시오.
이는 일반적으로 마운트된 파티션에 의해 숨겨진 디렉토리에 항목을 저장할 수 있으며 실제로 때때로 유용할 수 있습니다.