ここで ext4lazyinitについて質問しました。私が読んで理解したすべてから、ファイルシステムのすべてのiノードを作成せずにhddの使用を開始することができます。
知っている、または測定できる唯一の方法は、で監視ext4lazyinit
することiotop
です。進捗をパーセンテージで取得する方法はありますか?
ここで ext4lazyinitについて質問しました。私が読んで理解したすべてから、ファイルシステムのすべてのiノードを作成せずにhddの使用を開始することができます。
知っている、または測定できる唯一の方法は、で監視ext4lazyinit
することiotop
です。進捗をパーセンテージで取得する方法はありますか?
回答:
このパッチの説明を確認してください。lazyinitなしでシステムを初期化できますが、測定することはできません。待つ時間があれば、待ってください。ディスカッションからパッチを試すことができますが、Patchworkによると、状態は「拒否」です。
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のデータを書き込んだ後、101.5%の推定値が得られます。役に立つほど正確だと思います。