Ext4lazyinit'in ilerlemesini ölçmenin bir yolu var mı?


17

Burada ext4lazyinit hakkında bir soru sormuştum . Okuduğum ve anladığım kadarıyla, dosya sisteminiz için tüm inodeları oluşturmadan hdd kullanmaya başlamanıza izin veriyor.

Tek yol bildiğine göre ya kutu ölçüsü izlemektedir ext4lazyinitiçinde iotop. Yüzde olarak ilerlemesinin bir yolu var mı?


2
bu yama tartışma kontrol
Krzysztof Stasiak

Bar [1] veya pv [2] yardımcı programlarını denediniz mi? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89 16:17

@ mattia.b89 ext4lazyinit bir kullanıcı alanı programı değil, bir arka plan çekirdek işlemi. Bilgi için büzüşmenin orijinal sorusunu gösteren sorudaki bağlantıyı kontrol edin.
Austin Hemmelgarn

Ayrıca, Ted T'so'nun @KrzysztofStasiak'ın bağladığı yama tartışmasındaki değerlendirmesine katılıyorum, eğer bunun bitmesini beklemek zorunda olduğunuz bir durumdaysanız, muhtemelen kullanmamalısınız.
Austin Hemmelgarn

@KrzysztofStasiak bir cevap verebilir misiniz, bu cevaba ulaşabileceğim en yakın şey olduğunu düşünüyorum , FWIW Ted Tso ext * ile eşanlamlıdır, bu yüzden inançları ne olursa olsun önemlidir.
shirish

Yanıtlar:


1

Bu yama tartışmasını kontrol edin . Sistemi lazyinit olmadan başlatabilirsiniz, ancak ölçemezsiniz. Beklemek için zamanınız varsa, bekleyin. Tartışmadan yama deneyebilirsiniz, ancak Patchwork'e göre "reddedildi" durumuna sahiptir.


1

Ext4lazyinit ilerleme yaklaşık bir yol bulmuş gibi görünüyor.

TL; DR: aşağıdaki Script'e bakınız.

Bu yöntem, diskin ilk kez takılmasından bu yana diskin hiçbir zaman bağlantısının kesilmediğini (veya sistemin yeniden başlatılmadığını) ve bölüme kullanımda olduğu kadar çok veri yazdığınızı varsayar (bu nedenle silinmez) veya dosyaların değiştirilmesi).

Adım 1 : fdisk'teki (kiB'ye dönüştürülmüş) bölüm boyutunu df'de gösterilen 1K-blok sayısıyla karşılaştırın. Elde etmek için (1K-blok sayısı) (kiB cinsinden bölüm boyutu) (yaklaşık inode tablosunun boyutu) çıkarın.

EDIT: Örnek, 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 sektörler * 512 bayt / sektör / 1024 = 5860488175.5 kiB (fdisk'in dediği gibi yaklaşık 5.5 TiB). Eksi df'nin 5813233164 değeri yaklaşık inode tablosu boyutu için 47255011,5 kiB'ye (yaklaşık 45 GiB) eşittir.

Adım 2 : Getir (bölüme yazılan toplam kiB):

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

Bölümünüz için doğru satırı seçin ve kiB'ye dönüştürün.

DÜZENLEME: örnek:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

Benim durumumda sdd1 kullanıldığında, yazılan toplam kiB = 2530108940 sektör * 512 bayt / sektör / 1024 = 1265054470 kiB (yaklaşık 1,2 TiB).

3. Adım : Yalnızca dosya sistemine önceden veri yazdıysanız gerekir. Almak için (bölüme yazılan toplam kiB) (inode tablosuna yazılan yaklaşık kiB) 'den (df cinsinden gösterilen 1K-blok sayısı kullanılır).

EDIT: örnek: inode tablosuna yazılan yaklaşık kiB = 1265054470 (2. adımdan) - 1217095176 (1. adımdaki df çıktısına bakın) = 47959294 kiB (45.7 GiB)

Adım 4 : İlerlemeyi yüzde olarak almak için (inode tablosuna yazılan yaklaşık kiB) değerini (kiB cinsinden inode tablosunun yaklaşık boyutu) olarak bölün ve 100 ile çarpın.

EDIT: örnek: yaklaşık ilerleme = 47959294 / 47255011.5 * 100% = 101.5%

Senaryo

Veya kısmi bir komut dosyası olarak yazmak için (burada güvenlik nedeniyle fdisk çağrısını kodlamayı reddediyorum):

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 = "bölüm adı" (örn. Sdd1), $ 2 = "fdisk'e göre bölüm bölümleri", $ 3 = "sondaki eğik çizgi olmadan bağlama noktası" ile çağırın

Test sonuçları

Metodumu sadece bir kez test ettim. Kurmak:

  • 6 TB bölme

  • cryptsetup kullanarak şifreleme

  • -m 0 dışında varsayılan parametrelerle oluşturulan dosya sistemi

  • 279 GiB dosyaları ext4lazyinit önce bölüme yazılmış tamamlandı.

Sonuç : tamamlanma anında% 99,7 okuma :-)

EDIT: aynı disk, neredeyse başka bir TiB veri yazdıktan sonra, şimdi% 101.5 bir tahmin verir. Yararlı olacak kadar doğru bence.


tam olarak neye bakacağımız konusunda bir fikrimiz olması için verilen bir örneğe sahip olmak daha hoş olurdu.
şirish

@ shirish Öneriniz için teşekkür ederiz.
theaviatrix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.