在启动时,fsck 有时会报告磁盘碎片:“5.3%不连续”。
我如何自己获取这些信息?是否有特定的 fsck 调用?
答案1
即使像这样挂载,你也可以在 ext2 ext3 或 ext4 文件系统上安全地运行 fsck.ext2
sudo fsck.ext2 -fn /dev/sdXY
如果驱动器已安装,它将输出很多错误,但 -n 参数告诉它不要触碰该驱动器。
$ sudo fsck.ext2 -fn /dev/sda1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Ubuntu_Rescue: 291595/1222992 files (0.2% non-contiguous), 1927790/4882432 blocks
答案2
现代 ext 系列文件系统在分配文件时会考虑平衡和连续性。在 ext3 和 ext4 中,平衡通常通过按顺序应用日志条目来实现,而在 ext4 中,具体来说,平衡是通过预分配文件系统扩展区来增加连续块来实现的。追求低于 20% 的碎片化水平可能不值得您花时间,尤其是当您的系统重复访问一些文件时。我建议采用以下策略来提高单个磁盘系统的读取速度:
增加内存:这会增加文件系统缓存
增加块大小:通过将块大小从 1k 移至 4k,您可以获得接近或大于块大小的文件的读取性能
如果你很严谨,你可以按照块大小将大文件和小文件组织到分区中,如果你将照片、视频和源代码存储在单独的目录中,你可能只想这样做
使用 hdparm 和/或 laptop-mode 实用程序增加预读设置
以线性方式备份和恢复文件系统,例如使用 tar
如果您有多个磁盘并且正在使用 RAID 条带化和/或 LVM,您还需要考虑其他因素,例如条带大小。
答案3
是的,有一个特定的fsck
调用(以 root 或 sudo 身份):
$ fsck /dev/sdXY
将 X 和 Y 替换为适合您情况的正确参数(例如/dev/sda1
)。
请勿在已安装的分区上运行此程序!它可能会严重损坏您的文件系统。
有关 Linux 和碎片整理的更多信息,请参阅我的回答这里。
如果你不需要专门运行 fsck,而只是想检查驱动器的碎片,则可以使用以下脚本(取自这里)应该可以解决问题:
#!/usr/bin/perl -w
#this script search for frag on a fs
use strict;
#number of files
my $files = 0;
#number of fragment
my $fragments = 0;
#number of fragmented files
my $fragfiles = 0;
#search fs for all file
open (FILES, '-|', "find '$ARGV[0]' -xdev -type f -print0");
$/ = "\0";
while (defined (my $file = <FILES>)) {
open (FRAG, "-|", "filefrag", $file);
my $res = <FRAG>;
if ($res =~ m/.*:\s+(\d+) extents? found/) {
my $fragment = $1;
$fragments += $fragment;
if ($fragment > 1) {
$fragfiles++;
}
$files++;
} else {
print ("$res : not understand for $file.\n");
}
close (FRAG);
}
close (FILES);
print ( $fragfiles / $files * 100 . "% non contiguous files, " . $fragments / $files . " average fragments.\n");
然后您可以在相关目录(或挂载点)上运行它:
$ frag_check.pl $HOME/
1.32410691664555% non contiguous files, 1.05380668862427 average fragments.
答案4
您可以使用 e2defrag 之类的工具来获取此信息。
请注意,由于 Linux 文件系统的性质,碎片整理通常是不必要的。