ext4 파티션 크기 / 여유 공간 불일치


14

내 데이터에 250GiB 백업 파티션을 생성하는 동안보고 된 파티션 크기와 Nautilus, gParted, df, tune2fs 등의 여유 공간간에 많은 불일치가 있음을 발견했습니다.

처음에는 GiB / GB 혼란이라고 생각했습니다. 아니었다 .

그런 다음 ext4의 예약 블록이 될 수 있다고 생각했습니다. 아니었다 .

나는 완전히 당황했다. 다음은 일부 이미지입니다. 단계는 다음과 같습니다.

  • 먼저 NTFS. 524288000 섹터 x 512 바이트 / 섹터 = 268435456000 바이트 = 268.4GB = 250GiB

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

노틸러스는 " 총 용량 : 250.0GB "라고 말합니다 (실제로는 GB가 아니라 GiB 임에도 불구하고). 사소한 잘못된 라벨링과는 별개로

  • 이제 gparted를 사용하여 ext4로 포맷 된 동일한 파티션 :

여기에 이미지 설명을 입력하십시오

첫째, 마지막 섹터와 총 섹터가 동일합니다. 동일한 250GiB 파티션입니다. 사용 된 크기는 4.11GiB입니다 (예약 된 블록일까요?)

여기에 이미지 설명을 입력하십시오

아니. 예약 된 블록은 12.7 GiB (~ 5 %. ouch! ) 인 것 같습니다. 그러나 ... 총 용량이 246.1GiB 인 이유는 무엇입니까 ??? . 그 차이 (정렬)는 gparted가보고 한 4.11 GiB와 일치합니다. 그러나 ... 예약 된 블록이 아니라면 무엇입니까? gparted가 12.7GiB의 사용 된 공간을보고하지 않은 이유는 무엇입니까?

$ df -h /dev/sda5
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             247G  188M  234G   1% /media/BACKUP

df보고 된 여유 공간에서 노틸러스와 일치합니다. 그러나 .. 188M 만 사용 했습니까? ~ 12GB 여야합니까? 그리고 총 용량은 여전히 ​​잘못되었습니다. 그래서 나는 tune2fs단서를 찾기 위해 달렸다 . (관련없는 출력은 생략 됨)

$ sudo tune2fs -l /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   BACKUP
Filesystem UUID:          613d592e-47f5-4206-96a7-210090d340ef
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Filesystem state:         clean
Filesystem OS type:       Linux
Block count:              65536000
Reserved block count:     3276800
Free blocks:              64459851
First block:              0
Block size:               4096

65536000 총 블록 * 4096 바이트 / 블록 = 268435456000 바이트 = 268.4GB = 250GiB gparted와 일치합니다.

3276800 예약 블록 = 13421772800 바이트 = 13.4GB = 12.5GiB 그것은 (다시 말해서) 노틸러스와 일치합니다.

64459851 여유 블록 = 264027549696 바이트 = 264.0 GB = 245.9 GiB. 왜? 250-12.5 = 237.5 (또는 250- (12.5 + 4.11) = ~ 233)이어야합니까?

예약 된 블록 제거 :

$ sudo tune2fs -m 0 /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 0% (0 blocks)

$ sudo tune2fs -l /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   BACKUP
Filesystem UUID:          613d592e-47f5-4206-96a7-210090d340ef
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Filesystem state:         clean
Filesystem OS type:       Linux
Block count:              65536000
Reserved block count:     0
Free blocks:              64459851
Block size:               4096

예상대로, 동일한 블록 수, 0 개의 예약 된 블록, 그러나 ... 동일한 자유 블록 ? 방금 12.5 GiB를 해제하지 않았습니까?

$ df -h /dev/sda5
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             247G  188M  246G   1% /media/BACKUP

여기에 이미지 설명을 입력하십시오

내가 한 것처럼 보입니다. 사용 가능한 공간이 233에서 245.9 GiB로 증가했습니다. 보여주는, 전혀 didnt가 치료를 gparted를 정확히 동일한 정보를! (동일한 스크린 샷을 게시 할 수 없음)

정말 엉망이야!

나는 최선을 다해 그것을 문서화하려고 노력했다. 그래서, 누군가 여기에 무슨 일이 일어나고 있는지에 대한 힌트를 줄 수 있을까?

  • NTFS-> ext4 형식에서 누락 된 4.11 GiB는 무엇입니까?
  • gparted, Nautilus, tune2fs, df 사이에 왜 많은 차이가 있습니까?
  • 내 수학에 어떤 문제가 있습니까? (이 게시물에 굵은 글씨가 흩어져 있음)

도움을 주시면 감사하겠습니다. 나는 무슨 일이 일어나고 있는지 알 수 없지만, 내 / 파티션 이외의 모든 것을 위해 NTFS를 선호하여 ext4를 포기하는 것을 신중하게 고려하고 있습니다.

감사!




@Uri Herrera : 실제로 내 질문이나 적어도 처음 몇 줄을 읽었 습니까? 이것은 GiB / GB 문제 가 아닙니다 . 파티션은 268.4GB = 250.0GiB입니다 하지 246.1
MestreLion

1
: 다른 대답 당신은 한 번 봐 걸릴 수 askubuntu.com/questions/5335/...
enzotib

답변:


13

여기에 몇 가지 일이 있습니다. gparted는 실제 사용 된 / 여유 공간을보고합니다. 커널은 예약 된 공간으로 사용 가능한 수를 줄입니다. 예약 된 공간을 제거한 후에는 예약 된 블록이 이미 사용 가능했기 때문에 사용 가능한 수는 변경되지 않았습니다. 단지 루트가 아닌 사용자는 디스크를 가득 채워서 문제가 발생하지 않도록 해당 공간에 침입 할 수 없습니다. 그놈 숫자는 버그로 인해 약간 약합니다 . 커널이보고하는 사용 된 공간 (df가 표시)을보고하는 대신 총 공간에서 여유 공간을 빼서 계산합니다. 사용 된대로 예약 된 공간을 표시합니다.

누락 된 4GB가 실제로 사용되는 것은 ext4의 fs 오버 헤드입니다. NTFS는 처음에 MFT를위한 소량의 공간 만 할당하고 필요에 따라 확장합니다. 그러나 일련의 파일 시스템은 포맷 타임에 inode 테이블 (대략 MFT와 동일)을위한 공간을 할당하며 확장 할 수 없습니다. 보고 된 총 공간에서 누락 된 공간은 inode 테이블입니다. 사용 된 공간의 나머지 비트는 저널 (보통 128MB)에서 가져오고 inode 크기를 조정합니다.


일부 미스터리를 해결해 주셔서 감사합니다. 그러나 ~ 4GB가 파일 시스템 오버 헤드 인 경우 왜 일부 (3.9GB)가 전체 공간에서 차감되고 188MB가 실제로 사용 된 것으로 표시됩니까? 오버 헤드는 어느 것입니까? 왜 다르게 취급 했습니까? 또한 dfsudo를 사용하더라도 Nautilus와 같은 총 용량 (247GB) 및 사용 된 공간 (188MB)을 보여줍니다. 따라서 버그라면 그놈 만이 아닙니다.
MestreLion 2016 년

NTFS의 72MB와 비교할 때 188MB가 오버 헤드라고 생각했습니다. 그러나 시간이 지나도 NTFS 오버 헤드가 커지면 노틸러스는 나중에 총 용량이 줄었다 고 보고 합니까?
MestreLion 2016 년

수정 : df는 누가 실행하든 항상 사용 가능한 공간을 표시합니다. 사용 가능한 공간 (== 사용 가능한 공간 + 예약 된 공간)을 보려면을 사용하십시오 stat -f /media/BACKUP.
Marius Gedminas 2016 년

명확하게하기 위해 수정 된 답변. 그리고 NTFS는 MFT가 커짐에 따라 전체 사용량이 줄어들지 않고 더 많은 사용 공간을보고 할 것이라고 생각합니다. @Marius, 이것도 올바르지 않습니다. statfs () 및 df와 stat -f는 모두 예약 된 블록을 계산하지 않는 사용 가능한 공간을 보여줍니다. 또한 할당량에 맞게 조정하고 발신 사용자에 따라 응답을 다양하게하겠다고 맹세 할 수 있었지만 그 점에 대해서는 맞습니다. 할당량을 계산하지 않으며 사용자가 무엇을 호출하는지 상관하지 않습니다.
psusi

@psusi : 그래서 ~ 3.9GiB의 inode 테이블과 ~ 188MB의 저널 + 무언가가 있습니까? 그리고 노틸러스는 Total Size에서 inode 테이블을 빼고 저널은 사용 된 공간으로보고합니까? gparted는 단일 4.11GiB의 사용 된 공간으로보고합니까? 그 맞습니까? 그렇다면 Nautilus가 두 오버 헤드를 동일한 방식으로 처리하기를 원했습니다. 둘 다 총계에서 빼거나 ​​둘 다 "사용 공간"(바람직하게)으로 계산되었습니다.
MestreLion 2016 년

7

우선, 예약 블록 파일 시스템 내부 관리에 사용되는 블록 이 아닙니다 .

root관리자가 아닌 일부 사용자가 모든 공간을 채우면 해당 파티션의 파일을 사용하는 서비스를 공간에서 배제 할 수 없도록 예약 된 블록이 간단히 예약됩니다 .

예약 블록 ( -m 0)이 없어도 파일 시스템 내부 관리에 사용되는 공간의 일부가 항상 있습니다. 나는 그렇게 많은 지식을 가지고 있지 않습니다.

또한 Gparted 는로 실행 root되므로 예약 된 블록이 사용 가능한 것으로 간주됩니다. 사용자로 실행되는 Nautilus 는 무료로 표시됩니다.

좋아, @psusi 대답은 매우 분명합니다. 추가 할 것이 없습니다.


흠, 매우 유익한 +1. 적어도 이것은 내가 찾은 문제 중 일부를 해결합니다. "사용 된 블록"대신 비 루트에 대해 예약 된 블록을 "제한된 캡"으로 간주하면 gparted, df 및 tune2fs 판독 값이 일치하고 의미가 있습니다. 그러나 몇 가지 질문, 특히 4GB의 사용 된 공간 / 총 용량이 여전히 남아 있습니다.
MestreLion 2016 년

1
또한 루트에 5 %의 공간을 예약하면 extN 할당 알고리즘에 약간의 호흡 공간이 생겨서 분열.
Marius Gedminas 2016 년

1

gparted를 사용하여 파티션 크기를 몇 메가 바이트 줄인 다음 다시 원래 크기로 늘리십시오. 다른 응용 프로그램에서 크기를 올바르게 읽을 수 있습니다. 최근에 이런 식으로 50Gb 오류를 수정했습니다!

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