ログから断片化されたファイルのみをフィルタリングする方法は?

ログから断片化されたファイルのみをフィルタリングする方法は?

ext4ちょうどハードドライブのファイルシステムの最適化を終えたとしましょう。

sudo e4defrag -v / > ~/defrag-2017-11-05 2>&1 &

これはおそらく不要なことですが、どのファイルが断片化されているかを確認したいと思います。

ログは次のとおりです。

==> defrag-2017-11-05 <==
ext4 defragmentation for directory(/)
[1/403415] "/"
    File is not regular file        [ NG ]
[2/403415] "/usr"
    File is not regular file        [ NG ]
[3/403415] "/usr/share"
    File is not regular file        [ NG ]
[4/403415] "/usr/share/ppp"
    File is not regular file        [ NG ]
[5/403415]^[[79;0H^[[K[5/403415]/usr/share/ppp/chap-secrets:    100%  extents: 1 -> 1   [ OK ]
[6/403415]^[[79;0H^[[K[6/403415]/usr/share/ppp/provider.chatscript: 100%  extents: 1 -> 1   [ OK ]
[7/403415]^[[79;0H^[[K[7/403415]/usr/share/ppp/provider.peer:   100%  extents: 1 -> 1   [ OK ]
[8/403415]^[[79;0H^[[K[8/403415]/usr/share/ppp/pap-secrets: 100%  extents: 1 -> 1   [ OK ]
[9/403415] "/usr/share/backgrounds"
    File is not regular file        [ NG ]
[10/403415] "/usr/share/backgrounds/linuxmint-retro"
    File is not regular file        [ NG ]
[11/403415]^[[79;0H^[[K[11/403415]/usr/share/backgrounds/linuxmint-retro/Gloria.jpg:    100%  extents: 1 -> 1   [ OK ]
[12/403415]^[[79;0H^[[K[12/403415]/usr/share/backgrounds/linuxmint-retro/aviatorjk_2441.jpg:    100%  extents: 1 -> 1   [ OK ]
[13/403415]^[[79;0H^[[K[13/403415]/usr/share/backgrounds/linuxmint-retro/theaeffect_3.png:  100%  extents: 1 -> 1   [ OK ]
[14/403415]^[[79;0H^[[K[14/403415]/usr/share/backgrounds/linuxmint-retro/multigons.jpg: 100%  extents: 1 -> 1   [ OK ]
[15/403415]^[[79;0H^[[K[15/403415]/usr/share/backgrounds/linuxmint-retro/Felicia.png:   100%  extents: 1 -> 1   [ OK ]
[16/403415]^[[79;0H^[[K[16/403415]/usr/share/backgrounds/linuxmint-retro/LinuxMint.png: 100%  extents: 1 -> 1   [ OK ]
[17/403415]^[[79;0H^[[K[17/403415]/usr/share/backgrounds/linuxmint-retro/air.jpg:   100%  extents: 1 -> 1   [ OK ]
[18/403415]^[[79;0H^[[K[18/403415]/usr/share/backgrounds/linuxmint-retro/curve.jpg: 100%  extents: 1 -> 1   [ OK ]
[19/403415]^[[79;0H^[[K[19/403415]/usr/share/backgrounds/linuxmint-retro/fizzy.jpg: 100%  extents: 1 -> 1   [ OK ]
[20/403415]^[[79;0H^[[K[20/403415]/usr/share/backgrounds/linuxmint-retro/silent_green.jpg:  100%  extents: 1 -> 1   [ OK ]
[21/403415]^[[79;0H^[[K[21/403415]/usr/share/backgrounds/linuxmint-retro/aviatorjk_2112.jpg:    100%  extents: 1 -> 1   [ OK ]
[22/403415]^[[79;0H^[[K[22/403415]/usr/share/backgrounds/linuxmint-retro/Emotion.jpg:   100%  extents: 1 -> 1   [ OK ]
[23/403415]^[[79;0H^[[K[23/403415]/usr/share/backgrounds/linuxmint-retro/pr09studio_spring.png: 100%  extents: 1 -> 1   [ OK ]
[24/403415]^[[79;0H^[[K[24/403415]/usr/share/backgrounds/linuxmint-retro/Talento-1.jpg: 100%  extents: 1 -> 1   [ OK ]
[324150/403415]^[[79;0H^[[K[324150/403415]/home/ruzena/StaM-EM->enM-CM-)/Altitude.2017.DVDRip.XviD.AC3-EVO/Altitude.2017.DVDRip.XviD.AC3-EVO.avi:   100%  extents: 20 -> 20 [ OK ]
[324290/403415]^[[79;0H^[[K[324290/403415]/home/ruzena/StaM-EM->enM-CM-)/Savage.Dog.2017.BRRip.XviD.AC3-EVO/Savage.Dog.2017.BRRip.XviD.AC3-EVO.avi: 100%  extents: 20 -> 20 [ OK ]
[325184/403415]^[[79;0H^[[K[325184/403415]/home/ruzena/StaM-EM->enM-CM-)/Death.Race.2050.2017.DVDRip.XviD.AC3-EVO/Death.Race.2050.2017.DVDRip.XviD.AC3-EVO.avi: 100%  extents: 20 -> 20 [ OK ]
[325356/403415]^[[79;0H^[[K[325356/403415]/home/ruzena/StaM-EM->enM-CM-)/Kong.Skull.Island.2017.TS.XviD.AC3-RUSSIAN.avi:    100%  extents: 20 -> 20 [ OK ]
[352147/403415]^[[79;0H^[[K[352147/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d9b788060b0d42ce_0:     0%^[[79;0H^[[K[352147/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d9b788060b0d42ce_0:  100%  extents: 5 -> 1   [ OK ]
[352943/403415]^[[79;0H^[[K[352943/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d7789aeea4cbf251_1:     0%^[[79;0H^[[K[352943/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d7789aeea4cbf251_1:  100%  extents: 5 -> 1   [ OK ]
[354676/403415]^[[79;0H^[[K[354676/403415]/home/ruzena/.cache/google-chrome/Default/Cache/98b71219db7f9992_1:     0%^[[79;0H^[[K[354676/403415]/home/ruzena/.cache/google-chrome/Default/Cache/98b71219db7f9992_1:  100%  extents: 5 -> 1   [ OK ]
[400977/403415]^[[79;0H^[[K[400977/403415]/home/ruzena/.local/share/zeitgeist/fts.index/postlist.DB:      0%^[[79;0H^[[K[400977/403415]/home/ruzena/.local/share/zeitgeist/fts.index/postlist.DB:   100%  extents: 5 -> 1   [ OK ]

同様のツールの経験がないので、次のことをawk知りたいです。

ログから断片化されたファイルのみをフィルタリングする方法は?可能であれば...

専門家の場合:最も散在しているファイルに基づいてファイルを並べ替えることができればと思いますが、これはこの質問に答えるための必須ではありません。

私が見たくない行は次のように終わります。

... extents: 1 -> 1 [ OK ]

私が見たい行は次のように終わります。

... extents: 5 -> 1 [ OK ]
...  extents: 20 -> 5   [ OK ]

5その場所には明らかに1より大きい数字を持つ行を表示するだけです。


編集する:

コマンドを試すことができる詳細なデフラグの出力例:

https://www.vlastimilburian.cz/public/linux/defrag-2017-11-05.bz2

抽出するだけです。

ベストアンサー1

awk '{ if ($4!=$6) print $4 - $6" "$0_}' ~/defrag-2017-11-05 | sort -g 

awk を使用して、入力の 2 つの列を比較して、異なることを確認し、行全体の後の値の差を印刷します。次に、行の先頭に追加された差に基づいてフィルタリングされた行を並べ替えます。

最初の数字が1より大きい行を確認するには、次のようにします。

awk '{ if ($4>1) print $0_}' ~/defrag-2017-11-05 | sort -gk4

ここでは、新しい差分列を作成するのではなく、4番目の列をソートします。

編集する

ファイル名のスペースと行の先頭の奇妙な文字を処理し、他の行をフィルタリングするには、次のようにします。

awk '/extents: / { sub(/.*\]\//, "/"); sub(/:/, "", $1); if ($(NF-5)!=$(NF-3)) print $(NF-5) - $(NF-3)" "$1 }' ~/defrag-2017-11-05 | sort -g

以下は、読みやすくフォーマットされたawkスクリプトです。

/extents: / { 
  sub(/.*\]\//, "/");
  sub(/:/, "", $1);
  if ($(NF-5)!=$(NF-3)) print $(NF-5) - $(NF-3)" "$1
}
  1. 存在しない行をフィルタリングしますextents:
  2. 行の先頭から意味のない内容を削除する]/には、開始文字をに置き換えます。/
  3. :より明確にするためにファイル名から削除されました
  4. 文字列の末尾から計算する2つのフィールドを比較し、2つの数字に差がある行を印刷します。

おすすめ記事