총 HDD 공간이 931GiB보다 작은 이유는 무엇입니까?

총 HDD 공간이 931GiB보다 작은 이유는 무엇입니까?

며칠 동안 노력했지만 여전히 Python 스크립트를 사용하여 HDD 드라이브의 올바른 크기를 얻는 방법을 알 수 없습니다. 내 하드 드라이브는 1Tb입니다. 내가 아는 한, Gb는 약 1000Gb이고 GiB는 약 931GiB입니다. 터미널에 입력하면 다음과 같이 lsblk표시됩니다.

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 931,5G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0   931G  0 part /

좋아요 그런 다음 lshw --class disk931GiB도 표시되도록 시도했습니다 .

*-disk                    
       description: ATA Disk
       product: ST1000LM035-1RK1
       physical id: 0.0.0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda
       version: SDM2
       serial: WDEWEKZF
       size: 931GiB (1TB)
       capabilities: gpt-1.00 partitioned partitioned:gpt
       configuration: ansiversion=5 guid=f166251c-436c-421f-aba8-9910d76f9fab logicalsectorsize=512 sectorsize=4096

그런 다음 Python 스크립트를 통해 크기를 얻으려고합니다.

total, used, free, percent = disk_usage('/')

print(f"Total: {total}")
print(f"Used: {used}")
print(f"Free: {free}")

total2, used2, free2, percent2 = disk_usage('/boot/efi')

print(f"Total: {total2}")
print(f"Used: {used2}")
print(f"Free: {free2}")

산출:

Total: 982900588544
Used: 118413897728
Free: 814486605824

Total: 535805952
Used: 5484544
Free: 530321408

982900588544 / 1024 / 1024 / 1024 = 915GiB.

535805952 = 500MiB.

df명령은 다음을 표시합니다.

Filesystem     1K-blocks      Used Available Use% Mounted on
udev             8092080         0   8092080   0% /dev
tmpfs            1627768      1712   1626056   1% /run
/dev/sda2      959863856 115646148 795389500  13% /
tmpfs            8138832     12368   8126464   1% /dev/shm
tmpfs               5120         4      5116   1% /run/lock
tmpfs            8138832         0   8138832   0% /sys/fs/cgroup
/dev/sda1         523248      5356    517892   2% /boot/efi
tmpfs            1627764        24   1627740   1% /run/user/1000

모든 1K 블록의 합은 1Tb입니다.

그렇다면 나머지 931 - 915 = 16GiB의 HDD 공간은 어디에 있습니까? 그리고 올바른 방법으로 치수를 얻는 방법은 무엇입니까? 리눅스 민트 20.1 x64

감사해요.

답변1

ext4의 경우 파일 시스템 메타데이터(주로 inode 테이블)의 크기가 손실됩니다. 예를 들어, 다음은 /home 파티션입니다.

  • 파티션 크기는 751619276800바이트( sudo /sbin/blockdev --getsize64 /dev/mapper/Watt-home) 입니다.
  • "df" 크기는 739691814912( df --block-size=1 /home) 입니다.
  • inode 수는 45875200( df -i /home) 입니다.
  • ext4의 Inode는 256바이트입니다.

따라서 계산을 하면 (751619276800-739691814912-(45875200*256))/1024^2 ≒ 175MiB입니다. 이는 파일 시스템 메타데이터(수퍼블록 등)의 나머지 부분입니다.

이것이 올바른지 확인하려면 더 낮은 inode 비율로 초기화된 파일 시스템과 비교하십시오. 한 가지 방법은 -T largefile또는 -T largefile4옵션을 사용하는 것입니다( /etc/mke2fs.conf가능성은 참고자료 참조). 여기에 하나가 있습니다.

  • 파티션 크기: 429496729600
  • df 크기: 429229522944
  • 인덱스 노드: 409600

df 크기가 파티션 크기에 얼마나 가까운지 확인하십시오(99.9% 이상). 그 이유는 inode 수가 훨씬 적기 때문입니다. 다시 계산하면 (429496729600-429229522944-(409600*256))/1024^2 ≒ 155MiB입니다.

ext4에서는 inode 수가 사용자가 가질 수 있는 파일 수에 대한 엄격한 제한이라는 점을 기억하십시오. 이 비율(또는 N 블록당 1개의 inode 비율)도 mkfs에서 한 번 설정되며 변경할 수 없습니다. 그러나 하나의 파일 시스템이 대용량 파일을 저장하는 데만 사용된다는 것을 알고 있다면 두 번째 파일 시스템에서 했던 것처럼 inode를 줄여 공간을 절약할 수 있습니다.

커널 소스 코드에서 감산된 오버헤드를 볼 수 있습니다.https://elixir.bootlin.com/linux/latest/source/fs/ext4/super.c#L6095- minixdf이를 방지하는 마운트 옵션도 있는데, 아마도 훨씬 더 이상한 일을 일으킬 수도 있습니다. 나는 확인하지 않았으며 내가 찾은 유일한 문서는 그들이 그것을 제거하려고 시도했지만 사람들이 불평할 때 그대로 두었다는 것입니다.

참고: inode 테이블 등의 오버헤드 외에도 일반적으로 루트 디렉터리용으로 공간의 5%가 예약됩니다. 이는 전체 크기에서 차감되지 않지만 사용 가능한 공간에서는 차감됩니다. 이 양을 변경할 수 있습니다 tune2fs -m. 다른 옵션을 사용하면 대신 블록 수를 지정하고( ) 예약된 공간을 사용할 수 있는 -r사용자( -u) 또는 그룹( )을 변경할 수 있습니다. -g한 가지 이점은 사용자가 파티션을 가득 채우더라도 시스템 관리자가 복구에 사용할 수 있는 공간을 확보할 수 있다는 것입니다.

참고: ext2/ext3은 크기가 절반인 128바이트 inode를 사용합니다. 이는 소규모 파일 시스템의 경우에도 마찬가지입니다. 다음 옵션을 사용하여 실제로 mkfs 시간으로 설정할 수 있습니다 -I. 주의 사항은 mkfs.ext4 맨페이지를 참조하세요(128로 변경하는 것을 권장하지 않음).

답변2

파일 시스템 자체에서 모든 파일 구조의 숨겨진 내부 데이터 손실을 기록하는 데 사용됩니다. 사용 중인 도구가 표시되지 않아 누락된 것으로 나타납니다.

관련 정보