Как работают снимки 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
?