我似乎找到了一种方法来近似 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
Run Code Online (Sandbox Code Playgroud)
df:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/workbackup 5813233164 1217095176 4596121604 21% /mnt/backup_work
Run Code Online (Sandbox Code Playgroud)
11720976351 扇区 * 512 字节/扇区/1024 = 5860488175.5 kiB(接近 5.5 TiB,如 fdisk 所说)。减去 df 的 5813233164 等于 47255011.5 kiB(约 45 GiB),即 inode 表的大致大小。
步骤 2:获取(写入分区的总 kiB):
awk '{ print $3"\t"$10 }' /proc/diskstats
Run Code Online (Sandbox Code Playgroud)
为您的分区选择正确的行并将其转换为 kiB。
编辑:示例:
sdb 260040
sdb1 260040
sdd 2530109116
sdd1 2530108940
Run Code Online (Sandbox Code Playgroud)
在我的例子中使用 sdd1,写入的总 kiB = 2530108940 扇区 * 512 字节/扇区 / 1024 = 1265054470 kiB(接近 1.2 TiB)。
步骤 3:仅当您已将任何数据写入文件系统时才需要。从(写入分区的总 kiB)减去(已使用的 1K 块数,在 df 中显示)即可得到(写入 inode 表的大约 kiB)。
编辑:示例:写入 inode 表的近似 kiB = 1265054470(来自步骤 2)- 1217095176(请参阅步骤 1 中的 df 输出)= 47959294 kiB (45.7 GiB)
步骤 4:将(写入 inode 表的大约 kiB)除以(inode 表的大约大小(以 kiB 为单位))并乘以 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") %"
Run Code Online (Sandbox Code Playgroud)
调用 $1 =“分区名称”(例如 sdd1),$2 =“根据 fdisk 的分区扇区”,$3 =“不带尾部斜杠的挂载点”
检测结果
我的方法只测试过一次。设置:
6TB分区
使用 cryptsetup 进行加密
使用除 -m 0 之外的默认参数创建的文件系统
在 ext4lazyinit 完成之前,已向分区写入 279 GiB 文件。
结果:完成时读数为 99.7% :-)
编辑:同一个磁盘,在向其写入几乎另一个 TiB 数据后,现在的估计产量为 101.5%。我认为足够准确,很有用。
归档时间: |
|
查看次数: |
7859 次 |
最近记录: |