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

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

ext4lazyinitについて質問しましたここ。私が読んで理解したところによれば、ファイルシステム用のすべてのinodeを作成せずにハードドライブの使用を開始できます。

知っているか測定できる唯一の方法はext4lazyinit監視することですiotop。進行状況をパーセントで確認する方法はありますか?

ベストアンサー1

ext4lazyinitの進行状況を大まかに把握する方法を見つけたようです。

簡単に言うと:参照スクリプト次のような。

この方法は、パーティションが最初にマウントされてからディスクが切断されたことがなく(システムが再起動されない)、パーティションが使用するのとまったく同じ量のデータをパーティションに書き込むと仮定します。ファイルを修正してください)

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

編集:はい、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.5kiB(fdiskによると5.5TiBに近い) 5813233164からdfを減算すると、47255011.5kiB(約45GiB)になり、これはinodeテーブルのおおよそのサイズです。

ステップ2:get(パーティションに記録された合計kiB):

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

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

編集:はい:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

私の場合、sdd1を使用して作成された合計kiB = 2530108940セクタ* 512バイト/セクタ/ 1024 = 1265054470kiB(ほぼ1.2TiB)です。

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

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

ステップ4:(inodeテーブルに作成されたおおよそのkiB)を(inodeテーブルのおおよそのサイズ(kiB))で除算し、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 = "後にスラッシュがないマウントポイント"

試験結果

私の方法は一度だけテストされました。設定:

  • 6TBパーティション

  • cryptsetup を使用した暗号化

  • -m 0以外のデフォルトパラメータを使用して生成されたファイルシステム

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

結果:完成後99.7%読み取り:-)

編集:同じディスクにほぼ別のTiBのデータを書き込んだ後、予想収率は101.5%です。役に立つほど正確だと思います。

おすすめ記事