有没有一种方法可以衡量ext4lazyinit的进度?


17

我在这里问了一个关于ext4lazyinit的问题。从我已阅读和理解的所有内容来看,它仅使您可以开始使用hdd,而无需为文件系统创建所有inode。

您知道或可以测量的唯一方法是ext4lazyinit在中进行监视iotop。有没有办法取得百分比进展?


2
检查补丁讨论
Krzysztof Stasiak

您尝试使用bar [1]或pv [2]实用程序吗?[1]:[ archlinux.org/packages/community/any/bar/] [2]:[ archlinux.org/packages/community/x86_64/pv/]
mattia.b89

@ mattia.b89 ext4lazyinit不是用户空间程序,它是后台内核进程。检查问题中指向shirish的原始问题的链接以获取信息。
奥斯汀·海默加恩

另外,在@KrzysztofStasiak链接的补丁讨论中,我倾向于同意Ted T'so的评估,如果您必须等待此操作完成,则可能不应该使用它。
奥斯汀·海默尔加恩

@KrzysztofStasiak你能给个答案吗,我这是我能找到的最接近的答案,FWIW Ted Tso是ext *的代名词,所以无论他的信念是什么,它们都很重要。
shirish

Answers:


1

检查此补丁讨论。您可以在没有lazyinit的情况下初始化系统,但无法进行测量。如果您有时间等待,请稍等。您可以尝试从讨论中打补丁,但根据Patchwork,它的状态为“已拒绝”。


1

我似乎找到了一种近似ext4lazyinit进度的方法。

TL; DR:请参见下面的脚本

此方法假定自从首次安装分区以来,从未断开磁盘的连接(也没有重新引导系统),并且已向分区写入了与正在使用的磁盘一样多的数据(因此不会删除)或修改文件)。

步骤1:将fdisk中的分区大小(转换为kiB)与df中显示的1K块数进行比较。从(以kiB为单位的分区大小)中减去(1K块的数量)以获得(inode表的大约大小)。

编辑:例如,fdisk:

Sector size (logical/physical): 512 bytes / 4096 bytes
(...omitted...)
Device     Start         End     Sectors  Size Type
/dev/sdd1   2048 11720978398 11720976351  5.5T Linux filesystem

df:

Filesystem              1K-blocks       Used  Available Use% Mounted on
/dev/mapper/workbackup 5813233164 1217095176 4596121604  21% /mnt/backup_work

11720976351扇区* 512字节/扇区/ 1024 = 5860488175.5 kiB(接近5.5 TiB,就像fdisk所说的那样)。对于近似的inode表大小,负df的5813233164等于47255011.5 kiB(约45 GiB)。

第2步:获取(写入分区的总kiB):

awk '{ print $3"\t"$10 }' /proc/diskstats

为您的分区选择正确的行并将其转换为kiB。

编辑:例如:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

在我的情况下使用sdd1,写入的总kiB = 2530108940扇区* 512字节/扇区/ 1024 = 1265054470 kiB(接近1.2 TiB)。

步骤3:仅当您已将任何数据写入文件系统时才需要。从(写入分区的总kiB)中减去(使用的1K块数,以df表示),得到(写入到inode表中的大约kiB)。

编辑。

步骤4:除(将大约kiB写入inode表)除以(在kiB中的inode表的大小),再乘以100,以百分比表示进度。

编辑:例如:近似进度= 47959294 / 47255011.5 * 100%= 101.5%

脚本

或将其编写为部分脚本(出于安全原因,在此我拒绝编写对fdisk的调用的脚本):

let sectorsize=$(cat /sys/block/sda/queue/hw_sector_size)
let partsize=$2*$sectorsize/1024
let fssize=$(df -- "$3" | tail -n -1 | awk '{print $2}')
let approxinodetablesize=$partsize-$fssize
let tkw=$(awk "/$1/"' {print $10}' /proc/diskstats | head -n 1)*$sectorsize/1024
let used=$(df -- "$3" | tail -n -1 | awk '{print $3}')
let tkw_inodetable=$tkw-$used
echo "Approximate progress: $(bc -l <<< "$tkw_inodetable*100.0/$approxinodetablesize") %"

调用$ 1 =“分区名称”(例如sdd1),$ 2 =“根据fdisk分区的分区”,$ 3 =“不带斜杠的装载点”

检测结果

我只测试了一次我的方法。设定:

  • 6 TB分区

  • 使用cryptsetup加密

  • 使用-m 0以外的默认参数创建的文件系统

  • 在ext4lazyinit完成之前,将279 GiB文件写入分区。

结果:完成时的读数为99.7%:-)

编辑:同一张磁盘上几乎写入了另一个TiB数据后,现在得出的估计值为101.5%。我认为准确到足以有用。


举个例子会更好,所以我们对我们将要看的东西有了一个想法。
shirish

@shirish谢谢您的建议。
theaviatrix
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.