すでに実行中の lvresize コマンドの進行状況を確認するにはどうすればよいですか?

すでに実行中の lvresize コマンドの進行状況を確認するにはどうすればよいですか?

まず、ファイルシステムがバックアップされ、正常にアンマウントされました。

次に、lvresize が実行され、すでに実行されています。

lvresize --resizefs --size 1024G /dev/dbdrp/db

出力を表示します:

fsck from util-linux-ng 2.17.2
/dev/mapper/dbdrp-db: 1718907/201326592 files (0.4% non-contiguous), 92969270/805304320 blocks
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/dbdrp-db to 268435456 (4k) blocks.

ファイルシステムの出力は前者でした:

[root@generic-linux-hostname ~]# df -hP
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/dbdrp-db  3.0T  310G  2.7T  11% /usr/local/oracle

物理ボリューム テーブルは次のようになります。

PV         VG       Fmt  Attr PSize  PFree
  /dev/xvdc1 dbdrp    lvm2 a--   1.50t    0
  /dev/xvdd1 dbdrp    lvm2 a--   1.50t    0

サイズ変更が完了すると、このボリュームの 1 つが pvremoved され、仮想ハード ディスクがリサイクルされます。

この lvresize の進行状況を確認するにはどうすればよいでしょうか? 1 時間実行されていますが、あまり多くの情報は出力されていません。

みんなありがとう :)

答え1

内部のことは知らないので、これは行き過ぎかもしれませんが、アイデアを得るために、次のことを試してみてください。

実行中のプロセスの pid を取得します。

pgrep -afl resize2fs
2377 resize2fs -M /dev/vg0/lv-3

ここでは、resize2fslvresize に変更されています (実際にサイズ変更を行うコマンドの場合)。次に、strace -e pread64,pwrite64 -p 2377コマンドが実行しているシステム コールを監視して、読み取り元と書き込み先を確認します。

出力は次のようになります。

pread64(3, "<!-- ..........................."..., 1236992, 2441878626304) = 1236992
pwrite64(3, "<!-- ..........................."..., 1236992, 181592702976) = 1236992
pread64(3, "<!-- ..........................."..., 479232, 2441880231936) = 479232
pwrite64(3, "<!-- ..........................."..., 479232, 181593939968) = 479232

のマニュアル ページを確認するとpread64、そのシグネチャが so であることがわかりますssize_t pread(int fd, void *buf, size_t count, off_t offset)。呼び出しの最後のパラメーターは、現在読み取っているブロックのオフセットまたはポイントです。2441880231936バイトを TB に変換すると、約 2.2 TB になり、以下に示すようにボリュームには 3.44 TB、2.2/3.34 = ~65% があります。ただし、これは現在の状況の概算にすぎません。その場合、空き領域に基づいてパーティションのサイズが最小限に抑えられるためです (resize2f -M のため)。また、ext4 (私の場合) がデータを連続したブロックに書き込むかどうかはわかりません。そのため、ディスク全体よりも作業が少なくなる可能性があります。

lv-3 vg0  -wi-ao----  <3.34t

答え2

lvresize には進行状況バーのオプションはありません。ただし、複数のステップでサイズ変更を実行すると、次のことを確認できます。

  1. fs の初期サイズを確認します。
# df -h /mnt
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/vg00-vol_projects   19G  5.3G   13G  30% /mnt
  1. アンマウント:
# umount /mnt
  1. fsを確認してください:
# e2fsck -f /dev/mapper/vg00-vol_projects
e2fsck 1.42.5 (29-Jul-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/vg00-vol_projects: 13/1245184 files (0.0% non-contiguous), 1447987/4980736 blocks
  1. 進行状況 (-p) オプションを使用してファイル サイズを変更します。
# resize2fs -p /dev/mapper/vg00-vol_projects 6G
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/mapper/vg00-vol_projects to 1572864 (4k) blocks.
Begin pass 2 (max = 32768)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 152)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/vg00-vol_projects is now 1572864 blocks long.
  1. LVの初期サイズを確認します。
# lvs vg00/vol_projects
  LV           VG   Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  vol_projects vg00 -wi-a--- 19.00g
  1. resizefs オプションを使用せずに LV のサイズを変更します (前の手順で実行しました)。
# lvresize --size 6G /dev/mapper/vg00-vol_projects
  WARNING: Reducing active logical volume to 6.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vol_projects? [y/n]: y
  Reducing logical volume vol_projects to 6.00 GiB
  Logical volume vol_projects successfully resized
  1. サイズを確認してください:
# lvs vg00/vol_projects
  LV           VG   Attr     LSize Pool Origin Data%  Move Log Copy%  Convert
  vol_projects vg00 -wi-a--- 6.00g
  1. マウントしてファイルシステムのサイズを確認します。
# mount /dev/mapper/vg00-vol_projects /mnt
# df -h /mnt
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/vg00-vol_projects  6.0G  5.3G  402M  94% /mnt

...でもこの方法はもっと複雑だと思います :/

関連情報