Предупреждение: я реализовал это решение, и оно работает, но время слияния, чтобы вернуться к моментальному снимку, может привести к тому, что процесс загрузки займет много времени, если во время последней загрузки в систему были внесены большие изменения. В течение этого периода ожидания пользователям может показаться, что система зависла!
Также помните, что любой, кто обладает достаточными знаниями для монтирования снимка, может внести изменения в «замороженное» состояние. Я воспользовался этой возможностью для обновления «замороженных» систем, но опять же, это также может увеличить время, необходимое для объединения (возврата) снимка!
Снимки LVM + cron + script = "замороженное" состояние
Недавно я начал копаться в LVM, и мне пришло в голову, что можно реально создать «замороженное» состояние на машине, используя LVM и его возможности моментальных снимков. Конечно, для этого метода требуется система, настроенная с использованием LVM (или, по крайней мере, LVM на замороженных разделах).
Резюме:
- Установите систему на разделы LVM, зарезервировав достаточно места на PV для моментального снимка
- Настройте систему так, как вы хотите.
- Создайте задание cron, которое запускается с правами root при загрузке, чтобы объединить снимок и создать новый снимок вместо замененного.
- Все последующие перезагрузки возвращаются к снимку. Все созданные снимки принимаются системой в том состоянии, в котором вы ее создали.
- В качестве дополнительного бонуса снимок может быть смонтирован и изменен (при условии, что у вас есть права суперпользователя), а состояние «заморожено» может быть обновлено при необходимости.
Подтверждение концепции: заморозьте все, кроме одного раздела, из чистой установки
Установка:
- Загрузитесь с живого диска Ubuntu / USB и выберите опцию «Попробуйте Ubuntu без установки». Это важно для ручной настройки разделов с помощью LVM
- Когда Ubuntu загружает разделы вашего диска, используя инструмент по вашему выбору, чтобы иметь один раздел, который занимает все пространство диска. Вот с чем я работаю:
- Далее в терминале настройте LVM на
/dev/sda1
. Я собираюсь поместить большую часть системы в один раздел, но вам не придется этого делать.
sudo pvcreate /dev/sda1
sudo vgcreate ubuntu-vg /dev/sda1
sudo lvcreate -n swap -L 1G ubuntu-vg
sudo lvcreate -n unfrozen -L 10G ubuntu-vg
sudo lvcreate -n root -l +50%free ubuntu-vg
- Теперь, если вам нужно запустить,
sudo vgs
а затем sudo lvs
вы должны увидеть, что количество свободного места, оставшегося в группе томов "ubuntu-vg" (VFree под выводом vgs), равно количеству пространства, занимаемого логическим томом "root". Msgstr "(LSize под выводом lvs). В моем случае у меня есть 506,44 г свободного в ubuntu-vg, а мой корневой раздел имеет размер 506,44 г. Если свободное место в группе томов равно размеру раздела, который я хочу заморозить, я смогу стереть весь раздел и все равно восстановить после перезагрузки. Оставьте оставшееся свободное место в Ubuntu-VG пока неиспользованным. Мы будем использовать это позже.
- Теперь установите Ubuntu, используя разметку вручную
- После завершения установки продолжите и перезагрузитесь во вновь установленную систему.
- После загрузки в новую систему настройте ее так, чтобы она всегда была такой, какой вы хотите, когда компьютер загружается каждый раз.
- Если вы не случайно изменили снимок и не хотите, чтобы раздел снимка отображался в строке меню ...
mkdir /steady
- Отредактируйте
/etc/fstab
, добавив (это все одна строка) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1
в качестве последней строки файла
- Поскольку такие вещи, как обновления, сдуваются с каждой перезагрузкой, вы можете отключить их.
- Если у вас есть незамерзающий раздел, такой как у меня в / unfrozen, не забудьте сделать его доступным для пользователей, которым нужен доступ к нему
- Если у вас есть система , сконфигурированный именно так , как вы хотите его, создайте следующий скрипт (вам понадобятся права администратора) и сохранить как
/root/steadystate.sh
с вашим любимым редактором. Обратите внимание, что если вы изменили имя группы томов при настройке LVM, вам также потребуется обновить его в приведенном ниже сценарии.
#!/bin/bash
LOG=/dev/kmsg
# wait for merge in progress
echo -n "Reverting to snapshot if present... " | tee -a $LOG
merging=1
while [ "$merging" == "1" ];
do
/usr/sbin/service lightdm stop #prevent the auto-login/login screen from loading
[ "$(sudo lvs -a | grep steadystate)" == "" ] && merging=0
sleep 1
done
# create snapshot
echo -n "Creating new snapshot... " | tee -a $LOG
/sbin/lvcreate -s -n steadystate -l +100%free /dev/ubuntu-vg/root
# make sure root comes online before trying to merge
while [ ! -e /dev/mapper/ubuntu--vg-root];
do
sleep .5;
done
echo -n "Scheduling reset to snapshot... " | tee -a $LOG
/sbin/lvconvert --merge /dev/ubuntu-vg/steadystate
echo -n "Starting lightdm... " | tee -a $LOG
/usr/sbin/service lightdm start
- Наконец, запустите
sudo crontab -e
, выберите редактор и поместите @reboot /bin/bash /root/steadystate.sh
в конец файла. Сохранить и закрыть ( Ctrl+ X; ответ, Yчтобы сохранить)
- Перезагрузите компьютер, и система должна быть заморожена, за исключением раздела, смонтированного в / не замороженном
Это работает, потому что моментальный снимок создается во время загрузки, и хотя мы передаем команду на объединение моментального снимка сразу после этого, моментальный снимок не может быть объединен, пока логический том для root активен. Поэтому он откладывает действие слияния до следующей активации / dev / ubuntu-vg / root, что происходит при следующей перезагрузке. Это действие также будет запущено, если система была загружена с живого USB.
Просто для удовольствия, я вошел после перезагрузки и запустил, sudo apt remove --purge firefox* libreoffice-* unity*
что я обычно не советую делать, потому что это удаляет некоторые полезные программы и переводит систему в состояние, которое может быть менее желательным!
Система даже не будет корректно завершать работу из графического интерфейса. Так как же это исправить? Перезагрузка!
После перезагрузки все вернулось в порядок. Firefox, LibreOffice и Unity вернулись на свои места.
Я также пытался удалить Linux *. Это оставляло машину неспособной к загрузке, однако простая загрузка с живого диска Ubuntu, казалось, способствовала слиянию. Перезапуск снова оставил систему в «замороженном» состоянии
Если вы хотите иметь возможность вносить изменения, вы можете (повторно) смонтировать снимок с правами rw, а затем выполнить привязку к нему и внести любые изменения, которые вы хотите сохранить постоянными. Это не безупречно, но это доказательство концепции.