Como os Instantâneos do LVM funcionam no nível do PE?

1

Como os instantâneos do LVM funcionam no nível do PE? O que é armazenado onde? Quais dados são perdidos quando o instantâneo fica sem espaço de reserva?

(descrição + explicação abaixo)

Eu estava experimentando com LVM e snapshots no VirtualBox, e estou percebendo um comportamento estranho. Eu queria ver como um sistema reagiria sob várias situações, então eu instalei o Lubuntu 13.04 em uma máquina virtual com a opção LVM marcada. Depois de instalar meu sistema, adicionei outra unidade de 8 GB à máquina virtual, usei vgcreate para estender o grupo de volume lubuntu-vg para /dev/sdb e, em seguida, tirei um instantâneo de lubuntu-vg/root com lvcreate , com tamanho 6.74G criando lubuntu-vg/rootsnap (note que o comando lvdisplay registrado abaixo foi executado antes de eu criar o instantâneo)

user@user-VirtualBox:~$ sudo fdisk /dev/sda
Command (m for help): p

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c4cee

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758    16775167     8136705    5  Extended
/dev/sda5          501760    16775167     8136704   8e  Linux LVM

Command (m for help): q

user@user-VirtualBox:~$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/lubuntu-vg/root
  LV Name                root
  VG Name                lubuntu-vg
  LV UUID                JeyQ7Z-dtu1-Yr5R-hTTU-6Vya-Dr67-qSXwTf
  LV Write Access        read/write
  LV Creation host, time lubuntu, 2013-05-02 18:09:41 -0500
  LV Status              available
  # open                 1
  LV Size                6.73 GiB
  Current LE             1723
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/lubuntu-vg/swap_1
  LV Name                swap_1
  VG Name                lubuntu-vg
  LV UUID                ZkyAxG-mFB0-zhDH-GjfK-CHlz-RbMc-ilumbj
  LV Write Access        read/write
  LV Creation host, time lubuntu, 2013-05-02 18:09:41 -0500
  LV Status              available
  # open                 2
  LV Size                1020.00 MiB
  Current LE             255
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

user@user-VirtualBox:~$ sudo vgdisplay
  --- Volume group ---
  VG Name               lubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               15.75 GiB
  PE Size               4.00 MiB
  Total PE              4033
  Alloc PE / Size       1978 / 7.73 GiB
  Free  PE / Size       2055 / 8.03 GiB
  VG UUID               2ZEhCz-Q988-oBAc-nE14-MdUs-j7un-2oicHD

user@user-VirtualBox:~$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               lubuntu-vg
  PV Size               7.76 GiB / not usable 2.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1986
  Free PE               8
  Allocated PE          1978
  PV UUID               OYCQrn-p7PH-4D52-4xRR-xphi-9DyL-Klys3t

  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               lubuntu-vg
  PV Size               8.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2047
  Free PE               2047
  Allocated PE          0
  PV UUID               ErizVU-o1Vf-73GO-Pkwf-PeM9-xoWo-snSmm2

Baixei algumas atualizações para preencher /var/cache/apt/archives e, em seguida, desliguei o sistema. Para simular uma falha na unidade, removi / dev / sdb das configurações do VirtualBox e inicializei o backup da máquina. Não foi possível montar porque não foi possível encontrar lubuntu-vg/root . Neste ponto, tentei descobrir como a configuração LE e PE "se parecia" para o meu sistema.

Eu tentei imaginar como seria o layout da minha configuração do LVM; No /dev/sda , ele teria alocado alguns PEs no início para o swap, em seguida, alocava o restante dos PEs para lubuntu-vg/root . Em seguida, estendi lubuntu-vg para /dev/sdb e tirei um instantâneo, que imaginei que alocaria a maioria dos PEs em /dev/sdb . Meu palpite é que lubuntu-vg/rootsnap agora usa os mesmos PEs que lubuntu-vg/root fizeram originalmente e agora lubuntu-vg/root (com o .debs em cache em /var/cache/apt/archives ) usa uma mistura dos PE antigos e os PEs recém alocados em /dev/sdb para fins de COW. Então, para mim, quando eu removi /dev/sdb (supostamente com os PEs COW), a máquina falhou ao inicializar porque não encontrou lubuntu-vg/root .

Depois, adicionei novamente /dev/sdb , inicializei e excluí o instantâneo. Neste ponto, eu esperava que, se eu fosse remover /dev/sdb novamente, o sistema não conseguiria inicializar, já que os PEs de COW estavam nessa unidade. No entanto, quando tentei fazer isso, o sistema conseguiu inicializar com sucesso e os .debs ainda estavam em /var/cache/apt/archives , apesar de /dev/sdb não estarem conectados.

Como isso é possível? Eu pensei que os PEs COW estavam em /dev/sdb , que eu removi. O LVM moveu os PEs COW para /dev/sda quando removi o instantâneo ou alguns outros movimentos extravagantes ao criar o instantâneo?

Um pensamento que tive foi que talvez quando o LVM aloca PEs, ele faz virtualmente e na verdade não os reserva fisicamente quando um LV é criado, permitindo que os PEs de LV sejam intercalados entre si. Se esse for o caso, por que o sistema não conseguiu inicializar quando /dev/sdb foi removido? Os PEs COW não estariam em /dev/sda então?

    
por drdrez 03.05.2013 / 03:22

1 resposta

2

Ao criar o instantâneo, você aloca PEs para manter os blocos de COW. Se ele for preenchido ou não estiver acessível, é o instantâneo que morre, não a origem. Seu sistema deve ter sido capaz de inicializar bem sem / dev / sdb, já que o snapshot não é necessário para inicializar. Se isso não aconteceu, então há um bug em algum lugar.

Além disso, você não precisa imaginar onde os PEs estão alocados, você pode executar pvdisplay -m para ver.

    
por 03.05.2013 / 04:08