저는 직장에서 xfs 파일 시스템을 사용하여 이미지 처리 데이터를 저장합니다. 현재 여유공간은 약 8.8T 정도이다.
/dev/sdh1 106T 97T 8.8T 92%
일부 데이터를 테이프로 옮기고 공간을 확보할 계획이 있지만 다음 주까지는 그런 일이 일어나지 않을 것입니다. 현재 '기기에 남은 공간이 없습니다' 오류가 계속 발생합니다.
전송되는 일반적인 이미지 크기는 약 128mb이고, 시간당 전송되는 이미지 수는 약 100~500개입니다.
이 ~8TB의 여유 공간을 사용할 수 없게 만드는 파일 시스템에 특정한 것이 있습니까?
fallocate
제 경우에는 이 명령을 사용하여 최소 8TB의 공간을 사용하여 TB 정도의 매우 큰 파일을 생성 할 수 있는지 확인할 수 있었습니다 .
내가 무엇을 놓치고 있나요? 내가 수행해야 할 확실한 파일 시스템 수준 검사가 있습니까?
xfs_info
다음은 참조용 파일 시스템 명령의 출력입니다.
meta-data=/dev/sdh1 isize=256 agcount=106, agsize=268435455 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=28319810304, imaxpct=1
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
동일한 오류를 재현하기 위해 많은 수의 파일(10k), 작은 파일(크기 1M)을 생성하는 간단한 셸 스크립트를 작성했지만 다음 오류로 인해 실패합니다.
fallocate: temfile-7464: open failed: No space left on device
df -i
스크립트를 실행하기 전의 출력입니다.
/dev/sdh1 4531169600 648793 4530520807 1% /jumbo/K2LEGINON
~ 후에
/dev/sdh1 4531169600 656256 4530513344 1% /jumbo/K2LEGINON
약 7500개의 파일을 생성한 후 실패했습니다. 총 약 7.3G.
답변1
댓글의 답변 덕분에 해당 문제가 XFS 파일 시스템과 관련된 문제임을 확인할 수 있었습니다.
본질적으로 파일 시스템은 inode 생성에 사용 가능한 공간을 모두 사용했습니다. XFS 파일 시스템은 이 작업을 수행하기 위해 디스크의 첫 번째 테라바이트를 사용하는 것으로 보입니다.
답변2
inode64를 이미 실행 중인 파일 시스템의 경우 파일 시스템에 디스크 공간이 부족하거나 부족하거나 다른 inode에 4개의 연속 블록을 할당할 수 없는 경우 이 오류가 발생할 수 있습니다. 따라서 파일 시스템이 심하게 조각난 경우(1-3개의 블록만 함께 있음을 의미) 새 파일을 만들 수는 없지만 이전 파일에 추가 데이터를 쓸 수 있습니다.
여유 공간이 얼마나 조각화되어 있는지 식별하는 방법에 대한 자세한 내용은 TID 7014320 - XFS 파일 시스템에서 조각화된 여유 공간이 얼마나 있는지 확인하는 방법을 참조하세요.
파일 시스템이 심각하게 조각화된 경우 다음을 수행할 수 있습니다. 많은 양의 여유 공간(예: 20% 이상)을 추가합니다. 데이터를 다른 파일 시스템으로 이동한 다음 다시 복사합니다. 이렇게 하면 파일 사이의 여유 블록이 제거되어 연속적으로 만들어집니다. 이는 4,096바이트 이하의 파일을 저장하는 파일 시스템에서 가장 유용할 수 있습니다.