Btrfs - 누락된 공간 - du와 df의 40% 차이

Btrfs - 누락된 공간 - du와 df의 40% 차이

나는 (raid가 없는) btrfs 디스크를 가지고 있는데 이것은 du와 df 사이에 큰 차이를 줍니다:

$ df -h /pgdata
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-pgdata   85G   77G  7.1G  92% /pgdata

$ du -sh /pgdata
56G     /pgdata

btrfs 명령은 동일한 결과를 제공합니다.

$ btrfs fi df -h /pgdata/
Data, single: total=82.94GiB, used=75.63GiB
System, DUP: total=32.00MiB, used=16.00KiB
Metadata, DUP: total=1.00GiB, used=365.73MiB
GlobalReserve, single: total=228.33MiB, used=0.00B

$ btrfs fi du -s /pgdata/
     Total   Exclusive  Set shared  Filename
  55.84GiB    55.36GiB   491.34MiB  /pgdata/

하위 볼륨이 없고(제 생각에는) btrfs subvolume list /pgdata비어 있습니다. 나는 달렸 btrfs balance start /pgdata/ -dusage=66지만 별로 달라진 것은 없었다.

$ btrfs fi usage /pgdata/
Overall:
    Device size:                  85.00GiB
    Device allocated:             85.00GiB
    Device unallocated:            1.00MiB
    Device missing:                  0.00B
    Used:                         76.50GiB
    Free (estimated):              7.15GiB      (min: 7.15GiB)
    Data ratio:                       1.00
    Metadata ratio:                   2.00
    Global reserve:              228.52MiB      (used: 0.00B)

Data,single: Size:82.94GiB, Used:75.79GiB (91.38%)
   /dev/mapper/ubuntu--vg-pgdata          82.94GiB

Metadata,DUP: Size:1.00GiB, Used:365.78MiB (35.72%)
   /dev/mapper/ubuntu--vg-pgdata           2.00GiB

System,DUP: Size:32.00MiB, Used:16.00KiB (0.05%)
   /dev/mapper/ubuntu--vg-pgdata          64.00MiB

Unallocated:
   /dev/mapper/ubuntu--vg-pgdata           1.00MiB

문제는 삭제된 inode가 아니며(머신이 3시간 전에 다시 시작됨) 다음과 같습니다.

$ lsof /pgdata |grep deleted
postgres  4107 postgres    4u   REG   0,58   16777216 238658 /pgdata/postgresql/13/main/pg_wal/00000001000001E40000008A (deleted)
postgres  5589 postgres   45u   REG   0,58   16777216 238753 /pgdata/postgresql/13/main/pg_wal/00000001000001E50000000E (deleted)
postgres  5590 postgres   45u   REG   0,58   16777216 222523 /pgdata/postgresql/13/main/pg_wal/00000001000001E40000006A (deleted)
postgres  5591 postgres   26u   REG   0,58   16777216 238992 /pgdata/postgresql/13/main/pg_wal/00000001000001E4000000F3 (deleted)
postgres  5592 postgres   52u   REG   0,58   16777216 238986 /pgdata/postgresql/13/main/pg_wal/00000001000001E4000000ED (deleted)
postgres  5595 postgres   28u   REG   0,58   16777216 238995 /pgdata/postgresql/13/main/pg_wal/00000001000001E4000000F6 (deleted)
postgres  5596 postgres   19u   REG   0,58   16777216 222523 /pgdata/postgresql/13/main/pg_wal/00000001000001E40000006A (deleted)
postgres  5597 postgres   44u   REG   0,58   16777216 222523 /pgdata/postgresql/13/main/pg_wal/00000001000001E40000006A (deleted)
postgres  5598 postgres   12u   REG   0,58   16777216 238986 /pgdata/postgresql/13/main/pg_wal/00000001000001E4000000ED (deleted)
postgres  5604 postgres   85u   REG   0,58   16777216 238988 /pgdata/postgresql/13/main/pg_wal/00000001000001E4000000EF (deleted)
postgres  5605 postgres   61u   REG   0,58   16777216 238986 /pgdata/postgresql/13/main/pg_wal/00000001000001E4000000ED (deleted)
postgres 12936 postgres   58u   REG   0,58   16777216 238995 /pgdata/postgresql/13/main/pg_wal/00000001000001E4000000F6 (deleted)

이 문제에 대한 다른 게시물을 찾았지만 그다지 큰 차이는 없었고(예상했던 것보다 사용량이 약 40% 더 많음) 항상 메타데이터나 스냅샷이었습니다. 여기는 그렇지 않은 것 같습니다.

여유 공간에 20GiB가 누락된 이유를 아는 사람이 있습니까?

답변1

보이는 것보다 더 많은 Btrfs 공간이 데이터에 할당되는 한 가지 가능한 이유는 익스텐트(덮어쓴 이전 버전의 파일 내용을 포함하는 익스텐트의 데이터)의 액세스할 수 없는 부분 때문입니다.

이러한 문제를 분석하기 위해 btrfs용 디스크 사용량 분석기인 btdu를 만들었습니다.

https://github.com/CyberShadow/btdu

이 도구는 불일치의 실제 원인을 식별합니다.

관련 정보