総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スペースはどこにありますか?そして正しい方法で寸法を取得する方法は? Linux Mint 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比で初期化されたファイルシステムと比較してください。 1つの方法はまたは-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で一度設定され、変更することはできません。ただし、1つのファイルシステムが大容量ファイルを保存するためにのみ使用されることがわかっている場合は、2番目のファイルシステムで行ったようにinodeを減らすことでスペースを節約できます。

カーネルソースコードから減算されたオーバーヘッドを見ることができます。https://elixir.bootlin.com/linux/latest/source/fs/ext4/super.c#L6095-minixdfこれを防ぐためのマウントオプションもありますが、おそらくはるかに奇妙なことを引き起こす可能性があります。私は確認しておらず、私が見つけた唯一の文書は、彼らがそれを削除しようとしましたが、人々が文句を言ったときにそのままにしたことです。

注:inodeテーブルなどのオーバーヘッドに加えて、通常はルートディレクトリ用にスペースの5%が予約されています。これはフルサイズでは差し引かれませんが、利用可能なスペースでは差し引かれます。この量を変更できますtune2fs -m。他のオプションを使用すると、代わりにブロック数を指定し()、予約済みスペースを使用できる-rユーザー(-u)またはグループ()を変更できます。-g1つの利点は、ユーザーがパーティションをいっぱいにしても、システム管理者が回復に使用できるスペースを確保できることです。

注:ext2 / ext3は、半分のサイズの128バイトinodeを使用します。これは、小規模ファイルシステムの場合も同様です。次のオプションを使用して、実際にmkfs時間に設定できます-I。注意事項はmkfs.ext4のマンページを参照してください(128に変更することはお勧めできません)。

おすすめ記事