Como verificar o progresso de um comando lvresize já em execução?

Como verificar o progresso de um comando lvresize já em execução?

Primeiro, o backup do sistema de arquivos foi feito e desmontado com sucesso.

Então, um lvresize foi executado e já está rodando:

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

E mostra a saída:

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.

A saída dos sistemas de arquivos foi a anterior:

[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

E tabelas de volumes físicos são as seguintes:

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

Após a conclusão do redimensionamento, um desses volumes será removido para reciclar o disco rígido virtual.

Como posso ver o progresso deste lvresize? Já está funcionando há uma hora e não foram divulgadas muitas informações.

Obrigado rapazes :)

Responder1

Isso pode ser um exagero porque não conheço os detalhes internos, mas, para se ter uma ideia, você pode tentar o seguinte:

Obtenha o pid do processo em execução:

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

Aqui foi resize2fssó mudar para lvresize (caso seja o comando que realmente faz o redimensionamento). A seguir, execute strace -e pread64,pwrite64 -p 2377para monitorar quais são os syscalls que o comando está fazendo para ver de onde ele lê e onde grava.

A saída seria algo assim:

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

e se você verificar a página de manual de pread64, verá que sua assinatura é ssize_t pread(int fd, void *buf, size_t count, off_t offset)assim, o último parâmetro da chamada é o deslocamento ou de qual ponto do bloco ele está lendo agora. Se você converter 2441880231936bytes em TB, seria aproximadamente 2,2 TB e meu volume, conforme mostrado abaixo, tem 3,44 TB, 2,2/3,34 = ~65%. Mas, isso é apenas uma estimativa de onde está agora porque, nesse caso, ele redimensionará a partição para o mínimo possível (por causa de resize2f -M) com base no espaço livre. Além disso, não tenho certeza se o ext4 (no meu caso) gravaria dados em blocos contíguos, portanto, poderia ser menos trabalhoso do que o disco cheio.

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

Responder2

O lvresize não possui opção de barra de progresso. Mas, se você fizer o redimensionamento em mais etapas, poderá verificar isso:

  1. Verifique o tamanho inicial do fs:
# df -h /mnt
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/vg00-vol_projects   19G  5.3G   13G  30% /mnt
  1. quantidade:
# umount /mnt
  1. verifique o 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. redimensione o fs com a opção progress (-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. verifique o tamanho inicial do LV:
# lvs vg00/vol_projects
  LV           VG   Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  vol_projects vg00 -wi-a--- 19.00g
  1. redimensione o LV sem a opção resizefs (fizemos na etapa anterior):
# 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. verifique o tamanho:
# lvs vg00/vol_projects
  LV           VG   Attr     LSize Pool Origin Data%  Move Log Copy%  Convert
  vol_projects vg00 -wi-a--- 6.00g
  1. monte e verifique o tamanho do 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

... mas acho que assim é mais complicado :/

informação relacionada