큰 XFS 파일 시스템에서 파일을 작성할 수 없습니다


24

우리는 4TB 파일 시스템을 가진 Linux 서버를 가지고 있는데, 이는 서브 버전 저장소를 저장하는 데 사용됩니다. 많은 리포지토리가 있으며 그중 몇 년 동안 사용되었습니다.

디스크는 원래 약 1TB 였지만 공간이 부족해 약 1 년 전에 4TB로 증가했습니다. 이제 사람들은 파일을 자신의 저장소에 체크인 할 수 없다고보고합니다. 오류 메시지는 No space left on device입니다.

디스크에는 약 1,5TB의 여유 공간이 있으며 사용 가능한 inode가있는 보고서도 있지만 새 파일을 만들 수는 없습니다. 여전히 오래된 파일을 업데이트 할 수 있으며 간헐적으로 일부 리포지토리가 업데이트되지만 다음에 동일한 리포지토리가 실패 할 수 있습니다.

답변:


44

문제의 이유

XFS가 inode를 할당하는 방식에 문제가있는 것으로 나타났습니다. 대부분의 파일 시스템과 달리 할당은 새 파일이 생성 될 때 동적으로 발생합니다. 그러나 달리 지정하지 않으면 inode는 32 비트 값으로 제한됩니다. 즉, 파일 시스템의 첫 번째 테라 바이트 스토리지에 맞아야합니다. 따라서 첫 번째 테라 바이트를 완전히 채우고 디스크를 확장하면 새 공간에서 inode를 만들 수 없으므로 새 파일을 만들 수 없습니다.

해결 방법 1-마운트 옵션 변경

한 가지 해결책은 mount 옵션을 사용하여 파일 시스템을 다시 마운트하는 것 inode64입니다. 그러나 일부 응용 프로그램은 이것 (예 : MySQL)에서 이상하게 동작 할 것이며 NFS는 매우 혼란 스러울 것입니다. 따라서 시스템이이 옵션으로 작동하는지 확실하지 않으면 다음 옵션으로 넘어갈 수 있습니다.

해결 방법 2-파일 이동

두 번째 해결책은 현재 첫 번째 테라 바이트에 저장된 일부 파일을 찾아 파일 시스템의 다른 영역으로 옮기는 것입니다.

나이로 이동

이 경우 파일 시스템은 수년 동안 사용되어 왔기 때문에 가장 오래된 파일을 찾아서 파일 시스템에서 멀리 옮긴 다음 다시 옮길 수있었습니다. 이것은 find를 사용하여 쉽게 수행되었습니다.

find /extra -mindepth 3 -maxdepth 3 -type d -mtime +730 -exec du -sh {} \; > /tmp/olddirs.txt

2 년보다 오래된 마운트 포인트 아래 정확히 3 단계에있는 모든 디렉토리의 크기와 디렉토리 이름을 포함하는 목록을 제공했습니다. 그런 다음 목록을 정렬하여 가장 큰 디렉토리를 찾은 다음이를 사용 mv하여 다른 파일 시스템으로 이동했다가 다시 되돌릴 수 있습니다.

할당 그룹 별 이동

예를 들어, 많은 파일이 동시에 생성 된 경우와 같이 나이가 지나갈 수없는 경우에도 올바른 파일을 찾을 수 있지만 시간이 조금 더 걸립니다.

XFS에는 0으로 시작하는 할당 그룹 (일명 AG )이 있습니다 xfs_info /path/to/mountpoint.를 사용하여 각 테라 바이트의 블록 크기와 블록 수를 확인하여 첫 번째 테라 바이트에있는 그룹을 파악할 수 있습니다. 또는 처음 몇 개의 AG를 확인하여 어떤 AG가 가득 찬지 확인한 후 지울 수 있습니다.

  1. 처음 네 개의 AG에서 여유 공간 확인 :
`식 1 15 '에서 ag에 대해; AG $ ag에서 자유 공간을 반향하십시오. xfs_db -r -c "freesp -s -a $ ag"/ dev / CACHE / CACHE; grep "total free"; 끝난

그룹의 총 여유 공간이 40 미만이면 새 파일을 만들 수 없습니다.

  1. 해당 AG에서 파일 찾기

파일 시스템에서 각 파일의 메타 데이터를 확인해야합니다. 시간 이 오래 걸립니다 ... 여기에 제안 사항이 있습니다.

   / extra -mindepth 3 -type f -exec 찾기 xfs_bmap -v {} \; > /tmp/agfilelist.txt

그런 다음 grep " 0 "(공백, 0 및 다른 공간)을 사용하여 AG 0에서 모든 파일 " 1 "을 찾고 AGp에서 AG 1에서 파일 을 찾도록 grep 하십시오. AG 0부터 시작하여 가장 큰 파일을 이동하십시오 mv)가 아니라 cp다시 돌아옵니다. 여유 공간이 충분해질 때까지 반복하십시오.

결과

/ extra에서 충분한 파일을 옮겼다가 다시 되 돌리면 AG 0에 많은 공간이 생겨 다시 새 파일을 만들 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.