如何从日志中只过滤掉碎片文件?

如何从日志中只过滤掉碎片文件?

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 比较输入中的两列,看看它们是否不相等,并打印出整行后面的值的差异。然后,我们根据在行开头添加的差异对过滤后的行进行排序。

如果你想检查第一个数字大于 1 的行,你可以使用

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

这里我们只是对第四列进行排序,而不是创建新的差异列。

编辑

要处理文件名中的空格和行开头的奇怪字符并过滤掉其他行,请使用

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. 比较我们关心的从字符串末尾开始计数的两个字段,并打印出两个数字存在此差异的行。

相关内容