Чи є спосіб виміряти прогрес ext4lazyinit?


17

Я задав питання про ext4lazyinit тут . З усього, що я прочитав і зрозумів, він просто дозволяє почати використовувати hdd, не створюючи всі вставки для вашої файлової системи.

Єдиний спосіб , що ви знаєте або може міра контролю ext4lazyinitв iotop. Чи є спосіб досягти прогресу у відсотках?


2
перевірити цю дискусію з виправленням
Кшиштоф Стасяк

Ви спробували утиліти bar [1] або pv [2]? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89

@ mattia.b89 ext4lazyinit - це не програма простору користувача, це процес фонового ядра. Перевірте посилання у запитанні, яке вказує на оригінальне запитання щодо цього сорочка для отримання інформації.
Остін Хеммельгарн

Крім того, я схильний би погодитися з оцінкою Теда Т'со в дискусії про виправлення, яку @KrzysztofStasiak пов'язував, якщо ви потрапляєте в ситуацію, коли вам доведеться чекати, коли це закінчиться, ви, ймовірно, не повинні його використовувати.
Остін Хеммельгарн

@KrzysztofStasiak ви могли б дати йому відповідь, я думаю, що це найближче, до якого я можу дійти до відповіді, FWIW Тед Цо є синонімом ext *, тому якими б не були його переконання, вони важливі.
shirish

Відповіді:


1

Перевірте цю дискусію з виправленням . Ви можете ініціалізувати систему без lazyinit, але не можете її виміряти. Якщо у вас є час дочекатися, просто зачекайте. Ви можете спробувати патч з обговорення, але згідно з Patchwork його стан "відхилено".


1

Я, здається, знайшов спосіб наблизити хід ext4lazyinit.

TL; DR: див. Сценарій нижче.

Цей метод передбачає, що диск ніколи не був відключений (і система не перезавантажувалася) з першого разу, коли розділ був змонтований, і що ви записали стільки даних, скільки в ньому використовується, (тому жодного видалення або модифікація файлів).

Крок 1 : Порівняйте розмір розділу в fdisk (перетворений в kiB) до кількості 1K-блоків, показаних у df. Відніміть (кількість 1К-блоків) з (розмір розділу в кіБ), щоб отримати (приблизний розмір таблиці inode).

EDIT: Приклад, 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 сектори * 512 байт / сектор / 1024 = 5860488175,5 кіБ (майже 5,5 TiB, як каже fdisk). Мінус df's 5813233164 дорівнює 47255011,5 kiB (приблизно 45 GiB) для приблизного розміру таблиці inode.

Крок 2 : Отримайте (загальний кіБ, записаний у розділ):

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

Виберіть правильний рядок для свого розділу та перетворіть його в кіБ.

EDIT: приклад:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

Використовуючи sdd1 в моєму випадку, загальна кількість kiB записано = 2530108940 секторів * 512 байт / сектор / 1024 = 1265054470 kiB (майже 1,2 TiB).

Крок 3 : Необхідний лише у тому випадку, якщо ви вже записали будь-які дані у файлову систему. Віднімаємо (кількість 1К-блоків, використаних, показаних у df) від (загальний кіБ, записаний у розділ), щоб отримати (приблизно kiB записано в таблицю inode).

EDIT: приклад: приблизний kiB, записаний у таблицю inode = 1265054470 (з кроку 2) - 1217095176 (див. Вихід df на кроці 1) = 47959294 kiB (45,7 GiB)

Крок 4 : Розділіть (приблизно kiB, записаний у таблицю inode) на (приблизний розмір таблиці inode в kiB) і помножте на 100, щоб отримати прогрес у відсотках.

EDIT: приклад: приблизний прогрес = 47959294 / 47255011.5 * 100% = 101.5%

Сценарій

Або написати це як частковий скрипт (де я відмовляюся скриптувати дзвінок на fdisk з міркувань безпеки):

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 = "ім'я розділу" (наприклад, sdd1), $ 2 = "сектори розділу відповідно до fdisk", $ 3 = "точка монтажу без косої риски"

Результати тесту

Я перевірив свій метод лише один раз. Налаштування:

  • 6 туберкульозний розділ

  • шифрування за допомогою cryptsetup

  • файлова система, створена з параметрами за замовчуванням, за винятком -m 0

  • 279 GiB файлів, записаних на розділ до завершення ext4lazyinit.

Результат : читання 99,7% на момент завершення :-)

EDIT: той самий диск, після запису майже іншого TiB даних, тепер дає оцінку в 101,5%. Думаю, досить точний, щоб бути корисним.


було б приємніше мати приклад, щоб ми мали уявлення про те, що саме ми дивимось.
shirish

@shirish Дякую за пропозицію.
theaviatrix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.