Tôi dường như đã tìm ra một cách gần đúng tiến trình của ext4lazyinit.
TL; DR: xem Tập lệnh bên dưới.
Phương pháp này giả định rằng đĩa chưa bao giờ bị ngắt kết nối (hệ thống cũng không được khởi động lại) kể từ lần đầu tiên phân vùng được gắn kết và bạn đã ghi chính xác nhiều dữ liệu vào phân vùng được sử dụng trên đó (vì vậy không xóa hoặc sửa đổi các tập tin).
Bước 1 : So sánh kích thước phân vùng trong fdisk (được chuyển đổi thành kiB) với số khối 1K được hiển thị trong df. Trừ (số khối 1K) từ (kích thước phân vùng tính bằng kiB) để lấy (kích thước xấp xỉ của bảng inode).
EDIT: Ví dụ, 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 các ngành * 512 byte / sector / 1024 = 5860488175.5 kiB (gần 5,5 TiB, như fdisk nói). Minus df's 5813233164 bằng 47255011,5 kiB (khoảng 45 GiB) cho kích thước bảng inode gần đúng.
Bước 2 : Nhận (tổng kiB được ghi vào phân vùng):
awk '{ print $3"\t"$10 }' /proc/diskstats
Chọn đúng dòng cho phân vùng của bạn và chuyển đổi nó thành kiB.
EDIT: ví dụ:
sdb 260040
sdb1 260040
sdd 2530109116
sdd1 2530108940
Sử dụng sdd1 trong trường hợp của tôi, tổng kiB được viết = 2530108940 sector * 512 byte / sector / 1024 = 1265054470 kiB (gần 1,2 TiB).
Bước 3 : Chỉ cần thiết nếu bạn đã ghi bất kỳ dữ liệu nào vào hệ thống tập tin. Trừ (số khối 1K USED, được hiển thị trong df) từ (tổng kiB được ghi vào phân vùng) để lấy (khoảng kiB được ghi vào bảng inode).
EDIT: ví dụ: xấp xỉ kiB được ghi vào bảng inode = 1265054470 (từ bước 2) - 1217095176 (xem đầu ra df ở bước 1) = 47959294 kiB (45,7 GiB)
Bước 4 : Chia (xấp xỉ kiB được ghi vào bảng inode) cho (kích thước gần đúng của bảng inode trong kiB) và nhân với 100 để lấy tiến trình theo tỷ lệ phần trăm.
EDIT: ví dụ: tiến độ gần đúng = 47959294/47255011.5 * 100% = 101.5%
Kịch bản
Hoặc để viết đó dưới dạng tập lệnh một phần (nơi tôi từ chối kịch bản cuộc gọi đến fdisk, vì lý do an toàn):
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") %"
Gọi với $ 1 = "tên của phân vùng" (ví dụ: sdd1), $ 2 = "các phân vùng theo fdisk", $ 3 = "điểm gắn kết mà không dấu gạch chéo"
Kết quả kiểm tra
Tôi chỉ thử nghiệm phương pháp của tôi một lần. Thiết lập:
Kết quả : tỷ lệ đọc 99,7% tại thời điểm hoàn thành :-)
EDIT: cùng một đĩa, sau khi ghi gần như một TiB dữ liệu khác vào nó, giờ đây mang lại ước tính 101,5%. Chính xác, đủ để có ích, tôi nghĩ vậy.