如何检查已运行的 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

调整大小完成后,将删除其中一个卷以回收虚拟硬盘。

我怎样才能看到这个lvresize的进度?它已经运行了一个小时,并没有抛出太多信息。

多谢你们 :)

答案1

这可能是一个过冲,因为我不知道内部原理,但是,为了有一个想法,您可以尝试以下操作:

获取正在运行的进程的pid:

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

这里只是resize2fs更改为 lvresize (如果它是实际执行调整大小的命令)。接下来,运行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,您会发现它的签名是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. 检查文件系统:
# 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. 挂载并检查 fs 大小:
# 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

...但我认为这种方式更复杂:/

相关内容