C'è un modo per misurare i progressi di ext4lazyinit?


17

Avevo fatto una domanda su ext4lazyinit qui . Da tutto quello che ho letto e capito, ti permette semplicemente di iniziare a usare l'hdd senza creare tutti gli inode per il tuo file system.

L'unico modo che si sa o può misurare sta monitorando ext4lazyinitin iotop. C'è un modo per ottenere i suoi progressi in percentuale?


2
controlla questa discussione patch
Krzysztof Stasiak il


@ mattia.b89 ext4lazyinit non è un programma userspace, è un processo del kernel in background. Controlla il link nella domanda che punta alla domanda originale di shirish su questo per informazioni.
Austin Hemmelgarn,

Inoltre, tenderei ad essere d'accordo con la valutazione di Ted T'so nella discussione sulla patch che @KrzysztofStasiak ha collegato, se ti trovi in ​​una situazione in cui devi aspettare che finisca, probabilmente non dovresti usarlo.
Austin Hemmelgarn,

@KrzysztofStasiak potresti farne una risposta, penso che questo sia il più vicino che posso ottenere per la risposta, FWIW Ted Tso è sinonimo di ext * quindi qualunque siano le sue convinzioni, sono importanti.
shirish

Risposte:


1

Controlla questa discussione sulla patch . È possibile inizializzare il sistema senza lazyinit, ma non è possibile misurarlo. Se hai tempo di aspettare, aspetta e basta. Puoi provare la patch dalla discussione, ma secondo Patchwork ha lo stato "rifiutato".


1

Mi sembra di aver trovato un modo per approssimare l'avanzamento di ext4lazyinit.

TL; DR: vedi Script sotto.

Questo metodo presuppone che il disco non sia mai stato disconnesso (né che il sistema sia stato riavviato) dalla prima volta in cui è stata montata la partizione e che hai scritto esattamente tutti i dati sulla partizione che sono in uso su di essa (quindi nessuna cancellazione o modifica dei file).

Passaggio 1 : confrontare la dimensione della partizione in fdisk (convertita in kiB) con il numero di blocchi 1K mostrati in df. Sottrai (numero di blocchi da 1K) da (dimensione della partizione in kiB) per ottenere (dimensione approssimativa della tabella degli inode).

EDIT: Esempio, 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 settori * 512 byte / settore / 1024 = 5860488175,5 kiB (quasi 5,5 TiB, come dice fdisk). 5813233164 di meno df equivale a 47255011,5 kiB (circa 45 GiB) per la dimensione approssimativa della tabella degli inode.

Passaggio 2 : Ottieni (kiB totale scritto nella partizione):

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

Scegli la linea giusta per la tua partizione e convertila in kiB.

EDIT: esempio:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

Usando sdd1 nel mio caso, kiB totale scritto = 2530108940 settori * 512 byte / settore / 1024 = 1265054470 kiB (quasi 1,2 TiB).

Step 3 : Necessario solo se hai già scritto dei dati nel filesystem. Sottrai (numero di blocchi 1K USATI, mostrato in df) da (kiB totale scritto nella partizione) per ottenere (circa kiB scritto nella tabella degli inode).

EDIT: esempio: kiB approssimativo scritto nella tabella di inode = 1265054470 (dal passaggio 2) - 1217095176 (vedere output df nel passaggio 1) = 47959294 kiB (45,7 GiB)

Passaggio 4 : dividere (approssimativamente kiB scritto nella tabella di inode) per (dimensione approssimativa della tabella di inode in kiB) e moltiplicare per 100 per ottenere l'avanzamento in percentuale.

EDIT: esempio: progresso approssimativo = 47959294 / 47255011.5 * 100% = 101.5%

copione

O per scriverlo come uno script parziale (dove rifiuto di scrivere una chiamata a fdisk, per motivi di sicurezza):

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") %"

Chiama con $ 1 = "nome della partizione" (es. Sdd1), $ 2 = "settori della partizione secondo fdisk", $ 3 = "punto di montaggio senza barra finale"

Risultati del test

Ho testato il mio metodo solo una volta. Impostare:

  • Partizione da 6 TB

  • crittografia tramite cryptsetup

  • filesystem creato con parametri predefiniti tranne -m 0

  • 279 GiB di file scritti nella partizione prima del completamento di ext4lazyinit.

Risultato : una lettura del 99,7% al momento del completamento :-)

EDIT: lo stesso disco, dopo aver scritto quasi un altro TiB di dati su di esso, ora fornisce una stima del 101,5%. Penso che sia abbastanza accurato per essere utile.


sarebbe stato meglio avere un esempio dato, quindi abbiamo un'idea di cosa esattamente guarderemmo.
shirish

@shirish Grazie per il tuo suggerimento.
theaviatrix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.