Попередження: я реалізував це рішення, і воно спрацьовує, але час злиття для повернення до знімка може призвести до тривалого завантаження процесу завантаження, якщо в систему відбулися великі зміни під час останнього завантаження. У цей період очікування користувачам може здатися, що система висить!
Також майте на увазі, що кожен, хто має достатньо знань для монтажу знімка, може внести зміни до «замороженого» стану. Я скористався цією можливістю оновити "заморожені" системи, але знову ж таки, це теж може збільшити час, необхідний для злиття (повернення до) знімка!
Знімки 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), дорівнює кількості простору, зайнятого коренем логічного обсягу " "(LSize під lvs виведенням). У моєму випадку у ubuntu-vg у мене 506,44 г безкоштовно, а мій кореневий розділ на 506,44 г великий. Якщо вільний простір, залишений у групі томів, дорівнює розміру розділу, який я хочу заморозити, я повинен мати змогу стерти весь розділ і все-таки мати можливість відновити за допомогою перезавантаження. Залиште решту вільного місця в ubuntu-vg невикористаною наразі. Ми будемо використовувати його пізніше.
- Тепер встановіть Ubuntu за допомогою ручного розділення
- По завершенні установки йдіть вперед і перезавантажте в нещодавно встановлену систему.
- Завантажившись у нову систему, налаштуйте її так, щоб це було саме так, як ви хочете, коли комп'ютер завантажується кожного разу.
- Якщо ви не випадково змінили знімок і не хочете, щоб розділ знімка відображався на панелі меню ...
mkdir /steady
- Відредагуйте
/etc/fstab
, додавши (це все в один рядок) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1
як останній рядок файлу
- Оскільки такі речі, як оновлення, будуть завантажуватися з кожним перезавантаженням, ви можете вимкнути їх.
- Якщо у вас є заморожений розділ, такий як мій, в / не заморожений, не забудьте зробити його доступним для користувачів, які потребують доступу до нього
- Після того, як система налаштована саме так, як вам потрібно, створіть наступний скрипт (вам знадобляться привілеї root) та збережіть, як
/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для збереження)
- Перезавантажте систему, і у вас повинна бути система, яка заморожена, за винятком розділу, встановленого в / unrozen
Це працює тому, що знімок створюється під час завантаження, і навіть якщо ми передаємо команду злити знімок відразу після цього, знімок не може бути об'єднаний, поки активний логічний том для root. Тому він відкладає дію злиття до наступного разу, коли не буде активовано / dev / ubuntu-vg / root, що відбувається при наступному перезавантаженні. Ця дія також буде спровокована, якби система була завантажена з живого USB.
Тільки для ударів, я ввійшов після перезавантаження і побіг, sudo apt remove --purge firefox* libreoffice-* unity*
що зазвичай не радив би робити, оскільки це видаляє деякі корисні програми і ставить систему в стан, який може бути менш бажаним!
Система навіть не відключиться належним чином від GUI. То як же це виправити? Перезавантажте!
Після перезавантаження все було в порядку. Firefox, LibreOffice та Unity повернулися туди, де їм належало.
Я також спробував видалити Linux *. Це не дозволило завантажувати машину, але просто завантаження з живого диска Ubuntu, здавалося, зробило злиття. Перезапуск знову залишив систему в її "замороженому" стані
Якщо ви хочете мати змогу вносити зміни, ви можете (повторно) змонтувати знімок з правами rw, а потім перезавантажити його та внести будь-які зміни, які ви хочете залишатись постійними. Це не бездоганно, але це доказ концепції.