왜 ext 파일 시스템이 전체 장치를 채우지 않습니까?


8

방금 500G HDD로 만들려고하는 ext {2,3,4} 파일 시스템이 사용 가능한 공간 (466G)을 모두 사용하지 않는 것을 알았습니다. 또한 reiser3, xfs, jfs, btrfs 및 vfat도 시도했습니다. 모두 466G 크기의 fs를 만듭니다 ( df -h 로 표시 ). 그러나 ext *는 fs 459G를 생성합니다. 예약 된 블록을 비활성화하면 사용자가 사용할 수있는 공간이 증가하지만 fs의 크기는 여전히 459G입니다.

1Tb HDD : 932G reiserfs, 917G ext4도 마찬가지입니다.

이 1.5 % 차이는 무엇입니까? 왜 이런 일이 발생하고 ext fill 전체 볼륨을 만드는 방법이 있습니까?

UPD : 동일한 시스템, 동일한 HDD 등에서 수행 된 모든 테스트. 466G가 500G 마케팅과 어떻게 다른지는 중요하지 않습니다. 문제는 FS마다 다릅니다.

df 정보-총 FS 크기, 사용 된 크기 및 여유 공간을 보여줍니다. 이 경우에는 다음이 있습니다.

reiserfs의 경우 :

/ dev / sda1 466G 33M 466G 1 % / mnt

ext4의 경우 :

/ dev / sda1 459G 198M 435G 1 % / mnt

루트 블록 예약을 끄면 435G가 459G로 바뀌고 fs의 전체 크기 (-198M 빼기)가됩니다. 그러나 fs 자체는 여전히 ext4의 경우 459G이고 Reiser의 경우 466G입니다!

UPD2 : dd를 통해 실제 데이터로 볼륨 채우기 :

레이즈

fs : ~ # dd if = / dev / zero of = / mnt / 1
dd : запись в«/ mnt / 1»: На устройстве кончилось место
975702649 + 0 записей считано
975702648 + 0 записей написано
 скопировано 499559755776 байт (500 GB), 8705,61 c, 57,4 MB / c

블록 예약이 해제 된 ext2 (mke2fs -m 0) :

fs : ~ # dd if = / dev / zero of = / mnt / 1
dd : запись в«/ mnt / 1»: На устройстве кончилось место
960356153 + 0 записей считано
960356152 + 0 записей написано
 скопировано 491702349824 байта (492 GB), 8870,01 c, 55,4 MB / c

러시아어에 대해서는 죄송하지만 기본 로케일로 실행하고 반복하는 것이 너무 깁니다. dd 출력은 분명합니다.

따라서 mke2fs는 다른 mkfs보다 더 작은 파일 시스템을 만듭니다.


2
모든 FS에 일정한 양의 오버 헤드가 있습니다 ... 디스크의 모든 사용 가능한 물리적 공간에 액세스 할 수있는 것을 알 수 없습니다.
prodigitalson

광고 노출을 줄이려면 표시 이름을 변경하고 자신의 블로그로 보이는 내용을 프로필의 웹 사이트 필드에 넣는 것이 좋습니다.
Hello71

1
안녕하세요, 조언 감사합니다. 웹 사이트는 실제로 중요하지 않으며 openid 전용입니다.
Ineu

빠르게 영어로 출력하는 프로그램을 원하는 경우 향후 참고를 들어, 사용 LANG=C foo또는LC_ALL=C foo
앨런 피어스

앨런, 고마워 LANG = 또는 LANG = POSIX 일 수도 있습니다. 내가 말했듯이 단지 라인의 몇 다른 로케일로 다시 실행하는 것이 불합리하므로 그러나,이 과정은 시간이 많이 소요 :) 두 경우 모두, 그것은 EXT2에 대한 FS 크기 문제를 증명 :(
Ineu

답변:


19

이것이 사실 인 두 가지 이유가 있습니다.

첫째, 어떤 이유로 든 다른 OS 작성자는 여전히 기본 2 시스템 측면에서 여유 공간을보고하고 하드 드라이브 제조업체는 기본 10 시스템으로 여유 공간을보고합니다. 예를 들어, OS 작성기는 킬로바이트 1024 바이트 (2 ^ 10 바이트)를 호출하고 하드 드라이브 제조업체는 킬로바이트 1000 바이트를 호출합니다. 이 차이는 킬로바이트에게는 매우 미미하지만 일단 테라 바이트에 도달하면 상당히 중요합니다. OS 작성기는 테라 바이트 단위로 1099511627776 바이트 (2 ^ 40 바이트)를 호출하고 하드 드라이브 제조업체는 테라 바이트 단위로 1000000000000 바이트를 호출합니다.

크기에 대해 이야기하는이 두 가지 다른 방법은 종종 많은 혼란을 초래합니다.

이진 크기에 대해 지원되는 ISO 접두사가 있습니다. 새로운 접두사를 염두에두고 설계된 사용자 인터페이스는 기본 2 접두사 시스템으로 크기를 표시 할 때 TiB, GiB (또는 더 일반적으로 XiB)를 표시합니다.

둘째, df -h는 사용 가능한 공간이 얼마나되는지보고합니다. 모든 파일 시스템은 당신을 위해 물건을 추적하기 위해 가사 정보를 작성해야합니다. 이 정보는 드라이브의 일부 공간을 차지합니다. 일반적으로 많이는 아니지만 일부. 그것은 또한 당신이보고있는 겉보기 손실 중 일부를 설명합니다.

내 답변 중 실제로 귀하의 질문에 대한 답변이 없음을 명확하게하기 위해 게시물을 편집 한 후에는 귀하의 질문에 답변 할 것입니다 ...

다른 파일 시스템은 하우스 키핑 정보를 위해 다른 양의 공간을 사용하고 해당 공간 사용량을 다른 방식으로보고합니다.

예를 들어, ext2는 디스크를 실린더 그룹으로 나눕니다. 그런 다음 inode 및 여유 공간 맵에 대해 각 실린더 그룹의 공간을 미리 할당합니다. ext3은 기본적으로 ext2 + 저널링이므로 동일한 기능을 수행합니다. 그리고 ext4는 ext3을 상당히 간단하고 (거의 이전 버전과 호환 가능) 수정했기 때문에 똑같은 일을합니다. 이 메타 데이터 오버 헤드는 파일 시스템 생성 또는 크기 조정시 고정되어 있으므로 '사용 된'공간으로보고되지 않습니다. 또한 실린더 그룹 메타 데이터가 디스크의 고정 된 위치에 있기 때문에 사용 된 것으로 암시되어 여유 공간 맵에서 표시되지 않거나 설명되지 않습니다.

그러나 reiserfs는 어떤 종류의 메타 데이터도 미리 할당하지 않습니다. 데이터 블록과 마찬가지로 모든 inode를 즉시 할당하기 때문에 파일 시스템 생성시 고정되는 inode 제한이 없습니다. 루트 디렉토리와 일종의 여유 공간 맵을 설명하는 구조가 필요합니다. 따라서 공간이 없을 때 훨씬 적은 공간을 사용합니다.

그러나 이는 파일을 추가 할 때 파일의 실제 데이터 공간뿐만 아니라 메타 데이터 (노 노드와 같은)를 할당하기 때문에 reiserfs가 더 많은 공간을 차지함을 의미합니다.

jfs와 btrfs가 메타 데이터 공간 사용량을 어떻게 추적하는지 정확히 알지 못합니다. 그러나 나는 그들이 reiserfs처럼 그것을 추적한다고 생각합니다. vfat는 특히 inode 개념이 전혀 없습니다. 사용 가능한 공간 맵 (파일 시스템 작성 (유명한 FAT 테이블)에서 크기가 고정됨)은 inode에있는 많은 데이터를 저장하고 디렉토리 항목 (동적으로 할당 된)은 나머지를 저장합니다.


2
이에 대한 ISO 표준이 있습니다. en.wikipedia.org/wiki/Binary_prefix
Bobby

@Bobby-예, 디스플레이에 표시되기 시작했습니다. 내 답변에 추가하겠습니다. 감사!
Omnifarious

8

ext2 / 3 / 4에서 일부 공간은 루트로 예약되어 있습니다.이 예약 된 공간은 df의 출력에 표시되지 않습니다.

예를 들어, 저널이 차지하는 공간을 무시하기 위해 3 또는 4 대신 ext2를 사용하여 기본 옵션으로 작은 파일 시스템 (~ 100mb)을 작성하는 경우 :

swann:/tmp# dd if=/dev/zero of=./loop.fs bs=10240 count=10240
swann:/tmp# mkfs.ext2 loop.fs
swann:/tmp# mkdir loop
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     92480   2% /tmp/loop

예약 된 블록 옵션 조정 ( tune2fs's -m옵션은 예약 된 블록을 백분율로 -r설정하고 옵션은 예약 된 블록을 직선 블록 수로 설정) :

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 25 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     72000   3% /tmp/loop

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 0 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     97600   2% /tmp/loop

위의 예에서 볼 수 있듯이 루트로 로그인 한 경우에도 df"사용 가능"수에 예약 된 공간이 표시되지 않습니다. 예약 된 공간은 루트로 로그인했는지 또는 권한이 낮은 사용자인지에 관계없이 "Used"카운트에 표시되지 않습니다. 이 두 가지 사실을 예상하지 않으면 파일 시스템이 가득 찼을 때 혼동을 일으킬 수 있습니다.

또한 tune2fs이름에도 불구하고 ext2 및 ext4 및 ext4 파일 시스템과 관련이 있습니다.


답변 해주셔서 감사합니다. 아니요, 예약 블록에 관한 것이 아닙니다. 질문이 업데이트되었습니다.
Ineu

0

파일 시스템의 차이점에 대해, 다른 파일 시스템은 블록을 다르게 구성하며 블록을 식별하고 추적하기 위해 더 많거나 적은 데이터가 필요합니다. 블록 크기는 같은 공간에 대한 블록이 많거나 적은 것처럼 "손실 된"공간이있는 것처럼 차이를 만듭니다. 또한 파일 시스템은 파일 조각화를 피하기 위해 블록을 그룹화하고 각 블록 클러스터에는 일정한 크기의 식별자가 있으므로 블록 클러스터는 디스크에서 서로 다른 물리적 공간을 사용합니다. 따라서 파일 시스템이 물리적 공간을 구성하는 방식이 다릅니다.

다음은 ext2에 대한 설명이며 아마도 reiserfs와 비슷한 것을 찾을 수는 있지만 결코 사용하지 않았으므로 아무것도 사용하지 않았습니다.


2
Reiserfs 및 btrfs는 거의 모든 부기 정보가 동적으로 할당된다는 점에서 특이합니다. 수퍼 블록 사본 및 여유 공간 비트 맵 만 파일 시스템 설정에서 할당됩니다. 물론 이는 데이터에 사용 가능한 실제 공간이 이러한 파일 시스템에 대해 결정적이지 않음을 의미합니다.
Omnifarious

@Omnifarious +1-그래서, reiserfs와 btrfs를 잘 이해한다면, 사용 가능한 공간이 처음에 더 커지지 만 데이터가 아닌 데이터와 부기 정보와 함께 사용될 것입니다.
laurent

@ laurent-rpnet-그렇습니다. btrfs의 경우 훨씬 더 흥미 롭습니다. btrfs는 개별 파일 단위로 RAID를 구현할 수 있으므로 사용 가능한 여유 공간에 대한보고는 데이터에 사용되는 블록 당 사용되는 추가 공간이 있다고 가정 할 수 없기 때문에 고정하기가 더 어렵습니다. 또한 매우 저렴한 COW 기반 사본을 허용하므로 기존 파일의 중간에 블록을 작성하면 공간이 할당 될 수 있습니다.
Omnifarious

그리고 XFS, JFS 및 VFAT는 어떻습니까? FAT32와 같은 원시적 fs는 ext4보다 역동적이라고 믿기가 어렵습니다.
Ineu

FAT32에는 또한 조직 용으로 예약 된 블록이 있습니다. 여기에서 다이나믹의 의미는 무엇입니까? dynamyc 할당 인 경우 FAT32에는 ext와 같은 동적 할당이없고 데이터에 사용 가능한 디스크의 모든 블록이 표시되지 않습니다. 또한 ext4 파일 시스템에는 권한 시스템이없는 반면 ext4에는 POSIX 권한과 ACL이 있으며 최대 파일 크기는 FAT32에서 4GB, ext3에서 2TB입니다 (ext4에 대해서는 확실하지 않지만 적어도 동일해야 함).
laurent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.