Linuxでファイルのサイズを確認する方法と応用例

Linuxでファイルのサイズを確認する方法と応用例の実務上の結論は「fileのlogical sizeはstat %s、filesystemでの割当量はduを使い分けます。human-readable表示だけで閾値判定せず、byte値と単位を記録します。」です。file sizeはlogical byte数と割当block数を分けて読みます。sparse fileや圧縮・reflink環境では両者が一致しないため、用途に合うmetric名を省略しません。

日程Fit。無料・登録不要。「いつ空いてる?」を、ひとつのリンクで。リンクを送って、○△×でかんたん日程調整。無料で日程を作る。
目次

logical sizeとallocated usageの違い

statの%sはfileのlogical byte数、duは通常filesystem上で割り当てられたblock使用量を示します。sparse、圧縮、reflink、deduplicationでは二つが大きく異なることがあります。ls -lのsizeも通常logical byte数です。転送量、quota、disk逼迫、application record数では必要なmetricが違うため、『サイズ』の定義を先に決めます。

正確なbyte数はstat –format=’%n %s’、割当blockはstatの%bと%B、directoryを含む使用量はduで確認します。du –apparent-sizeはlogical量に近い別metricです。human-readable表示は目視用で、閾値判定には整数byteまたは明示block sizeを使います。symbolic link自体と参照先のsizeも区別します。

logical bytesとallocated blocksの測定目的を決める

  • logical sizeかallocated usageかを決める
  • sparse、compression、reflinkの可能性を確認する
  • symbolic linkと参照先の扱いを決める
  • 閾値の単位とroundingを明示する

転送見積りならstat %s、filesystem消費なら%b×%Bまたはduを基準にします。対象が更新中、別mount、symlinkだった場合は測定を止め、device・inodeとsnapshotを固定してから比較します。

stat %s・%bとduを同じsampleで比較する

logical byte sizeを表示

stat --format='%n %s bytes' -- ./archive.img

regular fileの見かけ上のbyte長を取得します。

allocated block usageを表示

du -B1 -- ./archive.img

filesystemが報告する割当量をbyte blockで表示します。

apparent sizeを比較

du -B1 --apparent-size -- ./archive.img

stat %sに近いlogical sizeをduの集計規則で確認します。

sparse状況を一行で確認

stat --format='size=%s blocks=%b block_unit=%B' -- ./archive.img

%bと%Bから割当量の目安を算出します。

複数fileをbyte順へ表示

find ./data -maxdepth 1 -type f -printf '%s %p\n' | sort -n

閾値判定は整数byteで行い、表示用単位は後段で付けます。

stat・du・lsの単位を揃える

stat %sはlogical length、duは通常allocated spaceを集計します。sparse fileではlogical sizeが大きくても割当量が小さく、compressionやcopy-on-writeではduも物理device消費を正確に表さない場合があります。hard linkの重複countもcommand optionと引数構成に依存します。

logical sizeが大きくduが小さいfileはsparseの可能性があり、故障とは限りません。逆にfilesystemのcompressionやreflinkではduの値もphysical device全体の実消費と一対一ではありません。directoryのstat sizeは中身の合計ではなくdirectory entry用metadataの大きさです。数値にはmetric名、単位、取得methodを添えます。

read権限がなくてもstatできる場合と、parent directoryのsearch権限不足でpath解決できない場合を分けます。logやdownload中fileは取得直後にも増え、sizeとhashを別時刻に取ると対応が崩れます。32-bit処理や表計算への取込みで巨大値が丸められることもあるため、文字列化や整数型の上限を確認します。

sparse・reflink・権限不足をsize異常から外す

  • ls -lhの丸め値で閾値判定する
  • stat %sとduを同じ値と考える
  • sparse fileのcopy先容量を誤る
  • compressed/reflink環境で物理消費を断定する
  • hard linkを重複fileとして無条件に合算する

logical値とallocated値の差を破損と決め付けず、sparse、圧縮、reflink、block sizeを確認します。statまたはduが失敗した値は0へ丸めず、権限とpathを直した同一snapshotで再採取します。

size調査でfileをcopy、decompress、allocateしません。巨大fileを別filesystemへ試験copyするとcapacityを圧迫するため、stat/duの読み取りから始めます。共有storageではsnapshot、quota、reserved spaceを別に確認します。

容量不足の調査中に、大きいという理由だけでlog、database、snapshotを削除しません。sparse fileを通常copyすると宛先で実割当が増える場合があり、backup/transfer toolのsparse保持をtestします。productionでtruncateや圧縮を試さず、owner、retention、open process、backup、復元時間を確認して別の変更手順へ渡します。

成長中fileとsparse fileの検証

通常、空、sparse、hard link、compressed filesystem上のsampleでstatとduを比較します。byte値、blocks、filesystem type、tool versionを記録し、copy計画ではtarget側の実測testも小規模に行います。

0 byte、通常file、sparse file、hard link、symbolic link、圧縮対象、成長中copyをtest directoryへ作り、stat %s/%b/%B、du通常/apparent、lsの値を期待表へ並べます。取得前後でdevice、inode、mtime、sizeを再確認し、変化したsampleは一貫性なしとして除外します。閾値の直前・一致・直後も自動testへ含めます。

logical_bytesとallocated_bytesを別fieldへ出す

収集値はlogical_bytes、allocated_bytes、blocks、block_sizeを別fieldにし、human表示文字列を数値parseしません。更新中fileでは同一inodeの前後sizeを測り、rateとsnapshot sizeを区別します。missing、permission error、overflowを0へ変換せずstatus列へ残し、集計時に不明値を合計から黙って落とさない設計にします。

転送量・quota・disk逼迫に対応metricを渡す

network転送やapplication上限にはlogical byte、filesystem逼迫にはallocated usageとdf、directory別内訳にはduを使います。object storage、container overlay、snapshot付きvolumeではstorage側metricが必要です。どの数字でactionを起こすかをmetricごとに決め、stat一値をdisk容量対策へ直接つなぎません。

合格は通常file、空file、sparse fileで%sと%b×%Bの関係を説明でき、find集計も同じinode集合になることです。測定中にsizeが変わったrunは破棄して再取得します。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次