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.