DOBON.NETプログラミング道掲示板
(現在 過去ログ5 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■34866 / inTopicNo.1)  ファイルがドライブ内で占有する容量
  
□投稿者/ Iraquser 一般人(1回)-(2021/08/12(Thu) 06:55:16)
  • アイコン環境/言語:[Win10 VB.NET] 
    分類:[.NET] 

    詳細は省略しますが、特定フォルダ内の特定の条件に当てはまる複数ファイルを削除するプログラムを作成しようとしています。ファイル削除後のドライブ空き容量を削除処理実行前に表示したいです。個々のファイルがドライブ内で占有する容量を見積もる方法についてアドバイス下さい。多少の誤差は仕方ないと考えています。
引用返信 削除キー/
■34870 / inTopicNo.2)  Re[1]: ファイルがドライブ内で占有する容量
□投稿者/ 魔界の仮面弁士 大御所(1386回)-(2021/08/12(Thu) 09:23:20)
  • アイコンNo34866に返信(Iraquserさんの記事)
    > 個々のファイルがドライブ内で占有する容量を見積もる方法について
    > アドバイス下さい。多少の誤差は仕方ないと考えています。

    高速化が目的なら、低レベル処理とはなりますが、
    WizTree のように MFT を直接読み取るという選択肢がありそうです。
    とはいえ、こちらは当方に知識が無いので何とも言えないところ。
    https://forest.watch.impress.co.jp/library/software/wiztree/
    https://www.vector.co.jp/soft/dl/winnt/prog/se508167.html


    簡易的な処理となれば、単純にはファイルサイズを合計することになるでしょう。
    列挙については、.NET Framework よりも .NET 6/.NET 5 の方が効率が良いですが、
    今回は列挙については問題視しておらず、個々のファイルサイズの求め方が
    必要ということなのですね?
    https://gist.github.com/Benshi/af8d0bb4bc1ae28768567f72f0b87120

    厳密には、ファイルサイズだけを見ても判断できないのが厄介な点ですね。
    懸念材料としては下記などが思い当たりますが、これらにどこまで対応するかで
    「多少の誤差」の精度が変わってきそうです。


    (1)消費量を求めるには、ファイルサイズだけでなく、
     ストレージのセクタ・クラスタの単位まで考慮する必要がある。
    http://tooljp.com/windows/doc/cluster-sector-difference/cluster-sector-difference.html
    https://oshiete.goo.ne.jp/qa/4343309.html
    →ファイル数が多くなるほど(そして個々のファイルが小さいほど)、誤差が累積する。

    (2)小容量のファイルの場合、MFT 内に記録されることで(resident)、
     見た目上の容量消費が 0 になりえる。
    http://tooljp.com/qa/size-0byte-on-disk-E846.html
    https://milestone-of-se.nesuke.com/sv-basic/windows-basic/ntfs-filesystem-structure/

    (3)ディスクは「ドライブ」だけでなく「フォルダー」にも割り当てできるため、
     上位のフォルダーと下位のフォルダーで空き容量が変化することがある。
    https://docs.microsoft.com/ja-jp/windows-server/storage/disk-management/assign-a-mount-point-folder-path-to-a-drive

    そのほか、データ重複削除、圧縮ファイル、代替データストリーム、スパースファイル、
    シンボリックリンク、ハードリンク、ジャンクションなど…。
    https://ascii.jp/elem/000/001/550/1550399/
    https://so-da.tech/tech/infra/winsv-data-deduplication-1/
引用返信 削除キー/
■34871 / inTopicNo.3)  Re[2]: ファイルがドライブ内で占有する容量
□投稿者/ Iraquser 一般人(2回)-(2021/08/12(Thu) 13:17:07)
  • アイコンNo34870に返信(魔界の仮面弁士さんの記事)
    魔界の仮面弁士さん、丁寧なアドバイス有難うございます。
    ファイルがクラスターサイズ単位で切り上げられて容量を消費する事については何となく想像していました。
    「多少の誤差」についてですが、不要ファイル削除後のディスク容量を推測したいって程度ですので、(1)でご説明頂いた方式のみで対応しようと思っています。
    本当にありがとうございました。今後もよろしくお願いします。

解決み!
引用返信 削除キー/
■34873 / inTopicNo.4)  Re[3]: ファイルがドライブ内で占有する容量
□投稿者/ 魔界の仮面弁士 大御所(1388回)-(2021/08/12(Thu) 15:44:25)
  • アイコンNo34871に返信(Iraquserさんの記事)
    > 「多少の誤差」についてですが、不要ファイル削除後のディスク容量を推測したいって程度ですので、(1)でご説明頂いた方式のみで対応しようと思っています。

    クラスターを考慮した取得コードを書いてみました。
    拡張メソッドにしてあります。

    (2) の resident なファイルには対応できていませんが、
    圧縮属性やオフライン属性の付いたファイルの占有サイズなら拾えます。
    https://gist.github.com/Benshi/d115f057b81aa61e257186dbea49f9db


    さて、(2) はどうやって判定すればよいのだろう…。
    https://qiita.com/kusano_k/items/45b0a86649aabb8040ff
    https://github.com/search?q=PowerForensics+resident&type=code
解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -