Apakah ada cara untuk mengukur kemajuan ext4lazyinit?

17

Saya telah mengajukan pertanyaan tentang ext4lazyinit di sini . Dari semua yang saya baca dan pahami, ini memungkinkan Anda untuk mulai menggunakan hdd tanpa membuat semua inode untuk sistem file Anda.

Satu-satunya cara yang Anda tahu atau dapat mengukur adalah pemantauan ext4lazyinitdi iotop. Apakah ada cara untuk mendapatkan kemajuan dalam persentase?

shirish
sumber
2
periksa diskusi patch ini
Krzysztof Stasiak
Apakah Anda mencoba bilah utilitas [1] atau pv [2]? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89
@ mattia.b89 ext4lazyinit bukan program userspace, ini adalah proses kernel latar belakang. Periksa tautan dalam pertanyaan yang menunjuk ke pertanyaan asli shirish tentang ini untuk info.
Austin Hemmelgarn
Juga, saya akan cenderung setuju dengan penilaian Ted T dalam diskusi tambalan yang terkait @KrzysztofStasiak, jika Anda berada dalam situasi di mana Anda harus menunggu sampai selesai, Anda mungkin tidak seharusnya menggunakannya.
Austin Hemmelgarn
@KrzysztofStasiak dapatkah Anda menjawabnya, saya pikir ini adalah yang terdekat dengan jawaban saya, FWIW Ted Tso identik dengan ext * jadi apa pun kepercayaannya, mereka penting.
shirish

Jawaban:

1

Periksa diskusi tambalan ini . Anda dapat menginisialisasi sistem tanpa lazyinit, tetapi tidak dapat mengukurnya. Jika Anda punya waktu untuk menunggu, tunggu saja. Anda dapat mencoba menambal dari diskusi, tetapi menurut Patchwork itu menyatakan "ditolak".

Krzysztof Stasiak
sumber
1

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.

theaviatrix
sumber
akan lebih baik untuk memiliki contoh yang diberikan sehingga kami memiliki ide tentang apa yang sebenarnya akan kita lihat.
shirish
@ Shirish Terima kasih atas saran Anda.
theaviatrix