ext4lazyinitの進行状況を測定する方法はありますか?


17

ここで ext4lazyinitについて質問しまし。私が読んで理解したすべてから、ファイルシステムのすべてのiノードを作成せずにhddの使用を開始することができます。

知っている、または測定できる唯一の方法は、で監視ext4lazyinitすることiotopです。進捗をパーセンテージで取得する方法はありますか?


2
このパッチの説明を確認してください
Krzysztof Stasiak

bar [1]またはpv [2]ユーティリティを試しましたか?[1]:[ archlinux.org/packages/community/any/bar/] [2]:[ archlinux.org/packages/community/x86_64/pv/]
mattia.b89

@ mattia.b89 ext4lazyinitはユーザー空間プログラムではなく、バックグラウンドカーネルプロセスです。情報については、これに関するshirishの元の質問を指す質問のリンクを確認してください。
オースティンヘメルガルン

また、@ KrzysztofStasiakがリンクしたパッチディスカッションのTed T'soの評価に同意する傾向があります。これが完了するのを待つ必要がある場合は、おそらく使用しないでください。
オースティンヘメルガルン

@KrzysztofStasiakで答えていただけますか。答えに最も近いと思います。FWIWTed Tsoはext *と同義であるため、彼の信念が何であれ、それらは重要です。
シャーリッシュ

回答:


1

このパッチの説明を確認してください。lazyinitなしでシステムを初期化できますが、測定することはできません。待つ時間があれば、待ってください。ディスカッションからパッチを試すことができますが、Patchworkによると、状態は「拒否」です。


1

ext4lazyinitの進捗を概算する方法を見つけたようです。

TL; DR:以下のスクリプトを参照してください。

この方法は、パーティションが最初にマウントされてからディスクが切断されていない(システムが再起動されていない)こと、および使用中のパーティションとまったく同じ量のデータをパーティションに書き込んだことを前提としています(削除はありません)またはファイルの変更)。

ステップ1:fdisk(kiBに変換)のパーティションサイズを、dfに表示されている1Kブロックの数と比較します。(kiBのパーティションサイズ)から(1Kブロックの数)を減算して、(iノードテーブルのおよそのサイズ)を取得します。

編集:例、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 kiB(fdiskのように5.5 TiB近く)。マイナスdfの5813233164は、おおよそのiノードテーブルサイズの47255011.5 kiB(約45 GiB)に相当します。

ステップ2:取得(パーティションに書き込まれた合計kiB):

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

パーティションに適した行を選択し、kiBに変換します。

編集:例:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

私の場合、sdd1を使用すると、書き込まれたkiBの合計= 2530108940セクター* 512バイト/セクター/ 1024 = 1265054470 kiB(ほぼ1.2 TiB)。

ステップ3:ファイルシステムにすでにデータを書き込んでいる場合にのみ必要です。(パーティションに書き込まれた合計kiB)から(dfに示されている1Kブロックの数を差し引いた)を減算して(iノードテーブルに書き込まれた約kiB)を取得します。

編集:例:iノードテーブルに書き込まれるおおよそのkiB = 1265054470(ステップ2から)-1217095176(ステップ1のdf出力を参照)= 47959294 kiB(45.7 GiB)

ステップ4:(kiBのinodeテーブルのおよそのサイズ)を(kiBのinodeテーブルのおよそのサイズ)で除算し、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 TBパーティション

  • cryptsetupを使用した暗号化

  • -m 0を除くデフォルトのパラメーターで作成されたファイルシステム

  • 279 GiBのファイルがext4lazyinitが完了する前にパーティションに書き込まれました。

結果:完了時の読み取り値99.7%:-)

編集:同じディスクで、ほぼ別のTiBのデータを書き込んだ後、1​​01.5%の推定値が得られます。役に立つほど正確だと思います。


例を挙げておいた方がよかったので、正確に何を見ているかについてのアイデアがあります。
シャーリッシュ

@shirishご提案ありがとうございます。
theaviatrix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.