ハードウェアの不一致:新しい1 TBドライブを購入したばかりですが、Linuxシステムのディスクツールでは977GBと報告されています。ねえ、その23 GBはどこに行きましたか?
どこにもありません、そしてあなたの意見に応じて、それはまだそこにあるか、または決してそこにありませんでした!この違いは、異なる測定単位を使用するディスクメーカーとオペレーティングシステムプログラマーに起因します。ディスクメーカーは真のメートル法を使用しているため、1000 GB =1TBです。ただし、コンピューターの世界では、10の累乗では動作せず、2の累乗で動作するため、1024 GB =1TBになります。この測定単位の違いは、1TBと977GBの違いです。
うわー、それは信じられないほど迷惑です!言うまでもなく、実際には標準ベースではありません。これは、オープンソースコミュニティのすべてですよね。基本的に、コンピュータ業界では、1024が1000に近いという事実を悪用してきました。ただし、ファイル、メモリ、ドライブ、パケットなどがどんどん大きくなるにつれて、この違いはますます顕著になります。
では、何をすべきでしょうか?国際電気標準会議(IEC)や国際標準化機構(ISO)などの国際標準化団体は、計算で使用している真のメートル法と大まかな近似値の使用法の違いを説明するための測定単位を作成しました。 GiBとTiBを入力します(他の小さい単位と大きい単位は同じ命名法に従います)。基本的に、1024 GiB =1TiBです。つまり、1 TBドライブを購入することはできますが、ディスクユーティリティが測定に使用しているのはメートル法の1000ではなく、1024の係数であることを反映するために、ディスクユーティリティはそれを977GiBとして報告する必要があります。
最新バージョンのツールは、すでにこの方法の使用を開始しています。たとえば、私のfdisk
を参照してください 以下のRedHatEnterprise Linux 8.2システムからのユーティリティ出力:
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
さらに詳細が必要な場合は、バイナリプレフィックスに関する記事をご覧ください。
ファイルシステムの不一致
以下のコンテンツは、多くの異なるLinux、特にext4にデプロイされている従来の拡張ファイルシステムに基づいています。ただし、Red HatEnterpriseLinuxは現在XFSをデフォルトのファイルシステムとしてデプロイしています。このセクションの終わりに向けて、これらのトピックがXFSにどのように影響するかについての具体的な議論があります。今のところ、ext4に焦点を当てましょう。
状況:ユーザーからファイルシステムがいっぱいであると報告されましたが、ディスクが空いていることを確認すると(df
)出力、次のように表示されます:
[root@somehost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vdb1 991M 924M 0 100% /mnt
上記の出力から、サイズに気付くでしょう。 991 MBと報告されていますが、使用済み は924MBで、明らかにいっぱいではありません。ただし、ユーザーがコマンドを実行して、dd
などのより多くのディスク領域を消費する場合 コマンドを実行すると、次のメッセージが表示されます:
[user@somehost mnt]$ dd if=/dev/zero of=bigfile2
dd: writing to 'bigfile2': No space left on device
ただし、touch
を使用する場合 ファイルを作成するには、次のように表示されます:
[user@somehost mnt]$ touch file3
[user@somehost mnt]$ ls
bigfile file3 lost+found
さらに、rootがdd
を使用してファイルを作成する場合 、以下に示すように、問題なく動作します:
[root@somehost mnt]# dd if=/dev/zero of=root-file count=100
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.000748385 s, 68.4 MB/s
[root@somehost mnt]# ls
bigfile file3 lost+found root-file
明らかに、ファイルの作成はdd or touch
を介して成功します あなたがルートなら!何が起こっているのですか?
touch
の理由 動作は、ファイルシステムがファイルのコンテンツを保存するためのデータブロックが不足していることです。 。ただし、ファイルシステムには多くのiノード(ファイルポインタ)があります。これは、df
で別のオプションを使用して確認されます コマンド:
[root@somehost mnt]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vdb1 65536 14 65522 1% /mnt
touch
コマンドは空のファイルを作成します。つまり、ファイルメタデータを格納するためにiノードを消費しますが、関連するデータブロックは消費しません。
ext4ファイルシステムは、非特権ユーザーがアクセスできない予約済みスペースを保持しているため、rootユーザーのファイル作成は機能します。ルートまたはルート所有のプロセスのみが、このディスク領域を消費するファイルを書き込むことができます。 ext2、ext3、およびext4ファイルシステムの場合、tune2fs
を使用して、ファイルシステムスーパーブロックに保存されているこのデータを検査できます。 指図。以下の出力では、tune2fs
によって報告されたデータのほとんどを削除しました 合計と予約済みのスペースを表示できるようにします:
[root@somehost mnt]# tune2fs -l /dev/vdb1
tune2fs 1.45.4 (23-Sep-2019)
Filesystem volume name: <none>
Last mounted on: /mnt
<<< OUTPUT ABRIDGED >>>
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536
Block count: 261888
Reserved block count: 13094
Free blocks: 253029
Free inodes: 65525
First block: 0
Block size: 4096
<< OUTPUT ABRIDGED>>
上記の出力で、予約済みブロック数に注意してください。 パラメータ。 mkfs.ext4
によると manページの場合、これはデフォルトでファイルシステムスペースの5%になります。このファイルシステムでは、約51MiBのスペースです。
予約済みブロック数xブロックサイズ=バイト単位の量
13094x 4096=53633024バイト
次に、結果の数値を1024で割って、適切と思われる測定単位をアップサイズすることにより、最大KiBまたはMiBのバイトを変換できます。次に例を示します:
53633024バイト/1024=52376 KiB
52376 KiB / 1024 =51.15 MiB
ファイルシステム全体は約1GiBであるため、予約ブロック数が5%の場合、予約ブロックスペースは約50MiBになります。
この予約済みブロックのセットは、ルートが所有するdd
です。 上記の例では、ユーザーが明らかに「完全な」ファイルシステムにファイルを保存し続けていないときに機能したデータを保存するために使用されていました。管理者はtune2fs
を使用できます ファイルシステム上の予約済みブロックの数を増減します。ただし、ファイルシステムがアクティブなときにこの量を増やす場合は、ディスクの既存の予約済みブロック領域に隣接する空き領域を利用して、予約済みブロックをさらに蓄積する必要があります。通常、デフォルトよりも多く予約する場合は、mkfs.ext4
のオプションを使用してファイルシステムをフォーマットするときにこれを行うことをお勧めします。 指図。このプロセスにより、必要な数の予約済みブロックを割り当てるのに十分な連続スペースが確保されます。
最後に、ファイルシステム、ファイルシステムの検査に使用しているツール、またはディストリビューションによっては、ツールがファイルシステムの使用率を100%を超えて報告している場合があります。ツールレポートが102%使用されているのを見ると、ファイルシステム上のユーザーアクセス可能なディスクスペースが100%消費されており、それらの予約済みブロックの一部も消費されていることがわかります。
では、XFSはどうですか?このセクションの前半で、Red Hat EnterpriseLinux7および8がデフォルトのファイルシステム形式としてXFSを使用していることを説明しました。 XFSは予約済みブロックを利用しますが、予約されるファイルシステム形式は拡張ファイルシステム形式よりも少なく、ユーザーがそのスペースにアクセスすることはできません。このスペースは、XFSファイルシステム自体が使用するために予約されています。予約済みスペースには、ファイルシステムがファイルシステム操作のためにスペースを利用できるようにし、システムからスペースを隠すという別の目的があるため、XFSユーティリティの使用に関するレポートを作成するのは簡単ではありません。それでも、xfs_info
の組み合わせを使用して実行できます 、ブロック数とサイズを確認し、それをKiBに変換して、df
の出力と比較します。 。
まとめ
では、「失われた」ディスクスペースはどこにありますか?これは、ディスク容量の報告に使用されるさまざまな測定単位に隠されています。このスペースがどのように報告および使用されるかは、ファイルシステムやツールによっても異なります。
[Red Hat Enterprise Linuxを試してみませんか?今すぐ無料でダウンロードしてください。 ]