Có cách nào để đo lường sự tiến bộ của ext4lazyinit không?


17

Tôi đã hỏi một câu hỏi về ext4lazyinit ở đây . Từ tất cả những gì tôi đã đọc và hiểu, nó chỉ đơn giản cho phép bạn bắt đầu sử dụng hdd mà không cần tạo tất cả các nút cho hệ thống tệp của bạn.

Cách duy nhất mà bạn biết hoặc có thể đo được theo dõi ext4lazyinittrong iotop. Có cách nào để có được sự tiến bộ của nó như là một tỷ lệ phần trăm không?


2
kiểm tra thảo luận về bản vá này
Krzysztof Stasiak

Bạn đã thử tiện ích thanh [1] hoặc pv [2] chưa? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89

@ mattia.b89 ext4lazyinit không phải là chương trình không gian người dùng, đó là một quá trình nhân nền. Kiểm tra liên kết trong câu hỏi chỉ ra câu hỏi ban đầu của shirish về điều này để biết thông tin.
Austin Hemmelgarn

Ngoài ra, tôi có xu hướng đồng ý với đánh giá của Ted T trong cuộc thảo luận về bản vá mà @KrzysztofStasiak đã liên kết, nếu bạn đang ở trong tình huống phải chờ đợi điều này kết thúc, có lẽ bạn không nên sử dụng nó.
Austin Hemmelgarn

@KrzysztofStasiak bạn có thể trả lời được không, tôi nghĩ đây là câu trả lời gần nhất mà tôi có thể trả lời, FWIW Ted Tso đồng nghĩa với ext * vì vậy dù niềm tin của anh ấy là gì, chúng đều quan trọng.
shirish

Câu trả lời:


1

Kiểm tra thảo luận bản vá này . Bạn có thể khởi tạo hệ thống mà không có lazyinit, nhưng không thể đo lường được. Nếu bạn có thời gian để chờ đợi, chỉ cần chờ đợi. Bạn có thể thử vá từ thảo luận, nhưng theo chắp vá, nó có trạng thái "bị từ chối".


1

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:

  • Phân vùng 6 TB

  • mã hóa bằng cryptsetup

  • hệ thống tập tin được tạo với các tham số mặc định ngoại trừ -m 0

  • 279 GiB của các tệp được ghi vào phân vùng trước khi ext4lazyinit hoàn thành.

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.


sẽ tốt hơn nếu có một ví dụ được đưa ra để chúng tôi có ý tưởng về chính xác những gì chúng tôi sẽ xem xét.
shirish

@shirish Cảm ơn bạn đã gợi ý.
theaviatrix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.