Saya tampaknya telah menemukan cara untuk memperkirakan perkembangan ext4lazyinit.
TL; DR: lihat Skrip di bawah ini.
Metode ini mengasumsikan bahwa disk tidak pernah terputus (atau sistem tidak pernah reboot) sejak pertama kali partisi dipasang, dan bahwa Anda telah menulis data sebanyak mungkin ke partisi seperti yang digunakan di dalamnya (jadi tidak ada penghapusan atau modifikasi file).
Langkah 1 : Bandingkan ukuran partisi dalam fdisk (dikonversi ke kiB) dengan jumlah 1K-blok yang ditunjukkan dalam df. Kurangi (jumlah 1K-blok) dari (ukuran partisi dalam kiB) untuk mendapatkan (kira-kira ukuran tabel inode).
EDIT: Contoh, 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 sektor * 512 byte / sektor / 1024 = 5860488175,5 kiB (hampir 5,5 TiB, seperti kata fdisk). Minus df's 5813233164 sama dengan 47255011.5 kiB (sekitar 45 GiB) untuk perkiraan ukuran tabel inode.
Langkah 2 : Dapatkan (total kiB ditulis ke partisi):
awk '{ print $3"\t"$10 }' /proc/diskstats
Pilih baris yang tepat untuk partisi Anda dan konversikan ke kiB.
Sunting: contoh:
sdb 260040
sdb1 260040
sdd 2530109116
sdd1 2530108940
Menggunakan sdd1 dalam kasus saya, total kiB yang ditulis = 2530108940 sektor * 512 byte / sektor / 1024 = 1265054470 kiB (hampir 1,2 TiB).
Langkah 3 : Hanya diperlukan jika Anda sudah menulis data apa pun ke sistem file. Kurangi (jumlah 1K-blok DIGUNAKAN, ditampilkan dalam df) dari (total kiB ditulis ke partisi) untuk mendapatkan (kira-kira kiB ditulis ke tabel inode).
EDIT: contoh: perkiraan kiB ditulis ke tabel inode = 1265054470 (dari langkah 2) - 1217095176 (lihat output df di langkah 1) = 47959294 kiB (45,7 GiB)
Langkah 4 : Bagi (kira-kira kiB ditulis ke tabel inode) dengan (perkiraan ukuran tabel inode dalam kiB) dan kalikan dengan 100 untuk mendapatkan kemajuan sebagai persentase.
SUNTING: contoh: perkiraan kemajuan = 47959294 / 47255011.5 * 100% = 101.5%
Naskah
Atau untuk menuliskannya sebagai skrip parsial (tempat saya menolak skrip panggilan ke fdisk, untuk alasan keamanan):
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") %"
Panggilan dengan $ 1 = "nama partisi" (mis. Sdd1), $ 2 = "sektor partisi sesuai dengan fdisk", $ 3 = "mount point tanpa trailing slash"
Hasil tes
Saya hanya menguji metode saya sekali. Mempersiapkan:
Partisi 6 TB
enkripsi menggunakan cryptsetup
filesystem dibuat dengan parameter default kecuali -m 0
279 GiB file yang ditulis ke partisi sebelum ext4lazyinit selesai.
Hasil : pembacaan 99,7% pada saat selesai :-)
EDIT: disk yang sama, setelah menulis hampir TiB data lain untuk itu, sekarang menghasilkan perkiraan 101,5%. Cukup akurat untuk berguna, saya pikir.