Linux

為什麼我得到的 HDD 總空間小於 931 GiB?

  • January 24, 2022

我已經嘗試了幾天,但仍然無法弄清楚如何使用 python 腳本獲得正確大小的硬碟驅動器。我的硬碟是 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 disk它也顯示 931GiB:

*-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 = 915 GiB。

535805952 = 500 MiB。

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 = 16 GiB 的硬碟空間在哪裡?以及如何以正確的方式獲得尺寸?Linux Mint 20.1 x64

謝謝。

如果那是 ext4,它是文件系統元數據失去的大小,主要是 inode 表。例如,這裡的 /home 分區。

  • 分區為 751619276800 字節 ( sudo /sbin/blockdev --getsize64 /dev/mapper/Watt-home)
  • “df” 大小為 739691814912 ( df --block-size=1 /home)
  • 索引節點數為 45875200 ( df -i /home)
  • ext4 上的 inode 為 256 字節。

所以如果你算一下,(751619276800-739691814912-(45875200*256))/1024^2 ≈ 175MiB。這就是文件系統元數據的其餘部分(超級塊等)。

為確保這是正確的,請與使用較低 inode 比率初始化的文件系統進行比較——一種方法是使用-T largefileor-T largefile4選項(請參閱/etc/mke2fs.conf了解可能性)。我這裡有一個:

  • 分區大小:429496729600
  • df 大小:429229522944
  • 索引節點:409600

請注意 df 大小與分區大小的接近程度(超過 99.9%)。那是因為索引節點少得多。如果你再做一次數學運算,(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% 的空間,通常用於 root。這不會從總大小中減去,但會從可用空間中減去。您可以更改此金額tune2fs -m;其他選項讓您通過塊計數指定 ( -r) 並更改哪個使用者 ( -u) 或組 ( -g) 可以使用保留空間。一個好處是即使使用者填充了一個分區,系統管理員也有一些空間可用於恢復。

注意:ext2/ext3 使用 128 字節的 inode,大小只有一半。小文件系統仍然可以。您實際上可以使用該-I選項將其設置為 mkfs 時間;請參閱 mkfs.ext4 手冊頁以了解警告(我不建議更改為 128)。

引用自:https://unix.stackexchange.com/questions/687421