1

Как работают снимки LVM на уровне PE? Что хранится где? Какие данные теряются, когда снимок исчерпывает пространство COW?

(описание + объяснение ниже)

Я экспериментировал с LVM и снимками на VirtualBox, и я заметил странное поведение. Я хотел посмотреть, как система будет реагировать в различных ситуациях, поэтому я установил Lubuntu 13.04 на виртуальную машину с проверенной опцией LVM. После установки моей системы я добавил еще один 8 ГБ диск на виртуальную машину, использовал vgcreate для расширения lubuntu-vg группы томов на /dev/sdb , а затем сделал снимок lubuntu-vg/root с lvcreate , размером 6,74. G создаем lubuntu-vg/rootsnap (обратите внимание, что указанная ниже команда lvdisplay была запущена до того, как я создал снимок)

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

Затем я загрузил несколько обновлений, чтобы заполнить /var/cache/apt/archives , и затем выключил систему. Чтобы смоделировать сбой диска, я удалил /dev /sdb из настроек VirtualBox и загрузил машину обратно. Не удалось смонтировать, потому что не смог найти lubuntu-vg/root . В этот момент я попытался выяснить, как "выглядят" конфигурации LE и PE для моей системы.

Я попытался представить, как будет выглядеть макет моей установки LVM; В /dev/sda он выделил бы несколько PE в начале для свопинга, а затем выделил остальные PE для lubuntu-vg/root . Затем я расширил lubuntu-vg на /dev/sdb и сделал снимок, который, как я предполагал, выделит большинство PE на /dev/sdb . Я предполагаю, что lubuntu-vg/rootsnap теперь использует те же PE, что и lubuntu-vg/root , и теперь lubuntu-vg/root (с кэшированными .debs в /var/cache/apt/archives) использует смесь старые PE и недавно выделенные PE в /dev/sdb для целей COW. Так что для меня имело смысл, что когда я удалил /dev/sdb (предположительно с PE COW), машина не смогла загрузиться, потому что не смогла найти lubuntu-vg/root .

Затем я повторно добавил /dev/sdb , загрузился и удалил снимок. В этот момент я ожидал, что, если мне удастся удалить /dev/sdb снова, система не сможет загрузиться, так как PE COW были на этом диске. Однако, когда я попробовал это сделать, система смогла успешно загрузиться, и .debs все еще были в /var/cache/apt/archives , несмотря на то, что /dev/sdb не был подключен.

Как это возможно? Я думал, что PE COW были на /dev/sdb , который я удалил. LVM переместил PE COW в /dev/sda когда я снимал снимок, или делает какие-то другие причудливые движения при создании снимка?

У меня была одна мысль: возможно, когда LVM распределяет PE, он фактически и фактически не резервирует их при создании LV, что позволяет чередовать PE LV друг с другом. Если это так, почему система не смогла загрузиться после удаления /dev/sdb ? Разве не будут COW PE на /dev/sda ?

1 ответ1

2

Когда вы создаете снимок, вы выделяете PE для размещения блоков COW. Если он заполняется или недоступен, умирает снимок, а не источник. Ваша система должна была нормально загружаться без /dev /sdb, так как снимок не требуется для загрузки. Если этого не произошло, то где-то есть ошибка.

Также вам не нужно представлять, где располагаются PE, вы можете запустить pvdisplay -m чтобы увидеть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .