Перед установкой 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
Кстати, каждый раз перед тем, как делать снимки, я перезагружал систему с установочного USB-накопителя Kubuntu 18.04.2 и делал снимки lvroot
всегда, когда он не был установлен.
Почему lvroot_gcc7
все еще меняется после lvroot_gcc8
был создан?
Насколько я понимаю, после того, как я создал 1-й снимок lvroot, до 2-го, если данные в lvroot будут перезаписаны, они сначала будут считаны и записаны в 1-й снимок. Но после того, как я создал 2-й снимок, данные, которые должны быть перезаписаны, должны быть прочитаны и записаны на 2-й снимок. ТОЛЬКО, если второй снимок не является недействительным или не хватает места, старые данные будут скопированы в 1-й снимок. Таким образом системы LVM отслеживают изменения LV. Многие снимки одного и того же исходного LV образуют ссылку таким образом. Если я правильно понимаю, 1-й снимок был заморожен после создания 2-го снимка, поэтому не должно происходить никаких операций записи для 1-го, если на 2-м достаточно свободного места для отслеживания изменений в lvroot, и используемый размер 1-го должен НЕ постоянно меняться.
Снимки LVM копируются при записи. Это означает, что когда вы создаете его, у вас мгновенно появляется снимок, но он сохраняется постоянным алгоритмом копирования при записи: когда lvroot
записывается, данные для записи сначала считываются и записываются в моментальный снимок. Таким образом, вы сохраните исходные данные. Очевидно, что это требует места, и поэтому снимок должен иметь достаточно места.
Это нормальное поведение. Это также означает снижение производительности на снимок.
Еще хочу предупредить о возможности реально монтировать снапшот вместо оригинала lvroot
при загрузке. Часто /etc/fstab
содержит UUID для однозначной идентификации файловых систем. Однако UUID файловой системы снимков идентичны, поэтому может быть случайно смонтирован неправильный.
Вы можете смягчить это, добавив --permission r
при создании снимка. Таким образом, вы сразу узнаете, что используете неправильный, потому что вы получите ошибку о том, что он доступен только для чтения.
Что касается вашего дополнения к вашему вопросу: я никогда не использовал тонкие пулы, описанные A.B, но традиционные снимки, когда они взяты из корня, работают независимо друг от друга, могут быть объединены или удалены по отдельности.