Есть ли способ измерить прогресс ext4lazyinit?

Время от времени у меня возникает эта проблема. Совсем недавно я попытался изменить "максимальное количество подключений к кешу" на 1, и это решило проблему (возможно, просто совпадение, но оно было достаточно коррелированным, чтобы размещать здесь).

Вы можете сделать это в Edit-> Account Settings -> Настройки сервера-> Дополнительно ...

17
27.08.2017, 14:31
3 ответа

Ознакомьтесь с обсуждением патча . Вы можете инициализировать систему без lazyinit, но не можете ее измерить. Если у вас есть время ждать, просто подождите. Вы можете попробовать патч из обсуждения, но, согласно Patchwork, он имеет статус «отклонен».

2
27.01.2020, 19:48

Я, кажется, нашел способ приблизить прогресс ext4lazyinit.

TL;DR :см. Сценарий ниже.

Этот метод предполагает, что диск никогда не отключался (и система не перезагружалась )с момента самого первого монтирования раздела, и что вы записали в раздел ровно столько данных, сколько находится в используйте на нем (, чтобы не удалять и не изменять файлы ).

Шаг 1:Сравните размер раздела в fdisk (, преобразованный в килобайты ), с количеством блоков по 1 КБ -, показанным в df. Вычтите (количество 1K -блоков )из (размера раздела в килобайтах ), чтобы получить (примерный размер таблицы инодов ).

РЕДАКТИРОВАТЬ :Пример, 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

дф:

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 ТиБ, как говорит fdisk ). Минус df 5813233164 равен 47255011,5 КБ (около 45 ГБ )для приблизительного размера таблицы инодов.

Шаг 2:Получить (общее количество килобайт, записанное в раздел):

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

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

РЕДАКТИРОВАТЬ :пример:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

При использовании sdd1 в моем случае общее количество записанных килобайт = 2530108940 секторов *512 байт/сектор / 1024 = 1265054470 килобайт (почти 1,2 ТиБ ).

Шаг 3:Требуется только в том случае, если вы уже записали какие-либо данные в файловую систему. Вычтите (количество 1K -ИСПОЛЬЗУЕМЫХ блоков, показанное в df )из (общего количества КБ, записанных в раздел ), чтобы получить (приблизительно КБ, записанных в таблицу инодов ).

РЕДАКТИРОВАТЬ :пример :приблизительное количество килобайт, записанное в таблицу inode = 1265054470 (из шага 2)-1217095176 (см. вывод df на шаге 1 )= 47959294 килобайт (45,7 ГиБ)

Шаг 4:Разделите (приблизительное количество килобайт, записанное в таблицу инодов ), на (приблизительный размер таблицы инодов в килобайтах )и умножьте на 100, чтобы получить прогресс в процентах.

РЕДАКТИРОВАТЬ :пример :приблизительный прогресс = 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 ГиБ файлов, записанных в раздел до завершения ext4lazyinit.

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

РЕДАКТИРОВАТЬ :тот же диск, после записи на него почти еще одного ТиБ данных, теперь дает оценку 101,5%. Думаю, достаточно точно, чтобы быть полезным.

4
27.01.2020, 19:48

( вот увидишь, английский не мой родной язык)

По крайней мере, в Ubuntu -Основанные системы (Я использую ZorinOS 15 )Возможно косвенное измерение прогресса следующим образом:

  1. Вы можете получить информацию об устройстве и текущем секторе, который обрабатывается ext4lazyinit.

a )Поэтому вам нужно записать «1» в дамп /proc/sys/vm/block _. (Важно :Вы должны установить дамп блока _обратно на «0», если вы готовы к работе):

   echo 1 > /proc/sys/vm/block_dump

b )Затем вы получаете информацию по

tail -f /var/log/syslog | grep ext4

вывод будет похож на (, возможно, вам придется подождать, пока ext4lazyinit не получит доступ к устройству):

May  7 13:19:59 xxx kernel: [ 1130.643118] ext4lazyinit(1070): WRITE block 9235888384 on md0 (2048 sectors)
May  7 13:20:01 xxx kernel: [ 1132.594961] ext4lazyinit(1070): WRITE block 9235890432 on md0 (2048 sectors)
May  7 13:20:01 xxx kernel: [ 1132.632755] ext4lazyinit(1070): WRITE block 9235892480 on md0 (2048 sectors)

Вы видите текущий сектор (блок 9235892480 )и устройство (md0 ), на котором работает ext4lazyinit.

  1. Вы можете получить информацию о количестве секторов на вашем устройстве (в моем случае /dev/md0 ). Это возможно, например. с помощью графического инструмента "gparted" или командой "fdisk -l". В моем случае:

     sudo fdisk -l /dev/md0
    

Вывод будет таким:

Festplatte /dev/md0: 5,5 TiB, 5990282952704 Bytes, 11699771392 Sektoren
...
  1. Теперь у вас есть количество секторов, которые в данный момент находятся в обработке, и размер устройства в секторах, так что вы можете рассчитать прогресс ext4lazyinit .

  2. установить сброс блока _обратно в "0"

    echo 0 > /proc/sys/vm/block_dump
    

См. также

Für unser eins

2
07.05.2021, 12:17

Теги

Похожие вопросы