Почему замороженный снимок LV постоянно изменяется?

Перед установкой gcc-8.3.0 я делаю снимок корневого ("/") LV с помощью следующей команды:

lvcreate -L 20G -s vgsys/lvroot -n lvroot_gcc7

Затем я установил gcc-8.3.0 и сделал еще один снимок корневого LV следующим образом:

lvcreate -L 25G -s vgsys/lvroot -n lvroot_gcc8

Теперь моя система выглядит так:

root# lvs
LV          VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log         Cpy%Sync Convert   
lvhome      vgsys -wi-ao---- 80.00g                
lvroot      vgsys owi-aos--- 64.00g                                   
lvroot_gcc7 vgsys swi-a-s--- 20.00g      lvroot 5.26  
lvroot_gcc8 vgsys swi-a-s--- 25.00g      lvroot 0.00

После того, как я некоторое время использовал эту систему, я обнаружил, что процент использования (% данных) для lvroot_gcc7 постоянно меняется так же, как lvroot_gcc8 !

Теперь это состояние моей системы:

LV          VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log    Cpy%Sync Convert
lvhome      vgsys -wi-ao---- 80.00g                
lvroot      vgsys owi-aos--- 64.00g                                   
lvroot_gcc7 vgsys swi-a-s--- 20.00g      lvroot 6.05                  
lvroot_gcc8 vgsys swi-a-s--- 25.00g      lvroot 0.86

BTW, каждый раз перед Я делал снимки, перезагружал систему с установочного USB-носителя Kubuntu 18.04.2 и делал снимки lvroot всегда, когда он не был смонтирован.

Почему lvroot_gcc7 все еще изменяется после создания lvroot_gcc8 ?

Как я понимаю, после того, как я создал 1-й снимок lvroot, перед 2-м, если данные в lvroot вот-вот будут превышены - написано, это ты Сначала я должен быть прочитан и записан в 1-й снимок. Но после того, как я создал 2-й снимок, данные, которые должны быть перезаписаны, должны быть считаны и записаны ТОЛЬКО на 2-й снимок , если только 2-й снимок не является недействительным или не хватает места, старые данные будут вместо этого скопирован в 1-й снимок. Таким образом системы LVM отслеживают изменения LV. Многие снимки одного и того же исходного LV составляют ссылку таким образом. Если я правильно понимаю, 1-й снимок был заморожен после создания 2-го снимка, так что не должно происходить никаких операций записи на 1-й, если на 2-м достаточно свободного места для отслеживания изменений в lvroot, и используемый размер 1-го не должен постоянно меняться.

1
задан 26 March 2019 в 15:06
1 ответ

Снимки LVM копируются на запись. Это означает, что при создании снимка вы мгновенно получаете его, но алгоритм копирования на запись сохраняет его неизменным: Когда lvroot записывается, данные, которые нужно записать, сначала считываются, а затем записываются на снэпшот. Таким образом, вы сохраняете исходные данные. Очевидно, что это стоит места, и поэтому для снимка должно быть достаточно места.

Это нормальное поведение. Это также означает снижение производительности на снэпшот.

Хочу также предупредить вас о возможности фактического монтирования снэпшота вместо оригинального lvroot при загрузке. Часто в /etc/fstab есть UUID для уникальной идентификации файловых систем. Однако, файловые системы UUID'ов снимков идентичны, поэтому они могут случайно смонтировать не тот снимок.

Это можно смягчить, добавив -разрешение r при создании снимка. Таким образом, вы сразу узнаете, когда используете не тот снэпшот, потому что получите ошибки, связанные с тем, что он доступен только для чтения.

Что касается добавления к вашему вопросу: Я никогда не пользовался тонкими пулами, описанными в A.B, но традиционные снэпшоты, когда они берутся из корня, работают независимо друг от друга, могут быть объединены или удалены по отдельности.

5
ответ дан 3 December 2019 в 17:01

Теги

Похожие вопросы