如何檢查已執行的 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

……但我認為這種方式更複雜:/

相關內容