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
}
- 过滤掉其中不存在的任何行
extents:
。 - 将起始字符替换为 ,
]/
以/
去除行开头的无意义内容。 - 从文件名中删除
:
以使其更清晰 - 比较我们关心的从字符串末尾开始计数的两个字段,并打印出两个数字存在此差异的行。