Ostrzeżenie: wdrożyłem to rozwiązanie i działa, ale czasy scalania, aby wrócić do migawki, mogą powodować długi proces ładowania, jeśli w systemie dokonano dużych zmian podczas ostatniego rozruchu. Podczas tego okresu oczekiwania użytkownikom może się wydawać, że system się zawiesił!
Uważaj również, aby każdy, kto ma wystarczającą wiedzę, aby zamontować migawkę, może wprowadzić zmiany w stanie „zamrożonym”. Skorzystałem z tej możliwości aktualizacji „zamrożonych” systemów, ale to także może wydłużyć czas potrzebny do scalenia (przywrócenia) migawki!
Migawki LVM + cron + skrypt = stan „zamrożony”
Niedawno zacząłem kopać w LVM i przyszło mi do głowy, że możliwe jest stworzenie „zamrożonego” stanu na maszynie za pomocą LVM i jego możliwości tworzenia migawek. Oczywiście ta metoda wymaga systemu skonfigurowanego przy użyciu LVM (lub przynajmniej LVM na partycjach do zamrożenia).
Podsumowanie:
- Zainstaluj system na partycjach LVM, rezerwując wystarczającą ilość miejsca na PV do wykonania migawki
- Skonfiguruj system tak, jak chcesz.
- Utwórz zadanie CRON uruchamiane jako root podczas rozruchu, aby scalić migawkę i utwórz nową migawkę, aby zastąpić scaloną
- Wszystkie kolejne restarty powracają do migawki. Wszystkie utworzone migawki są pobierane z systemu w stanie, w którym go utworzono.
- Jako dodatkowy bonus, migawka może być montowana i modyfikowana (pod warunkiem, że masz uprawnienia roota), a stan „zamrożony” może być aktualizowany w razie potrzeby.
Dowód koncepcji: Zatrzymaj wszystko oprócz jednej partycji z czystej instalacji
Instalacja:
- Uruchom z dysku Live Ubuntu / USB i wybierz opcję „Wypróbuj Ubuntu bez instalacji”. Jest to ważne przy ręcznym konfigurowaniu partycji za pomocą LVM
- Gdy Ubuntu ładuje partycjonowanie dysku za pomocą wybranego narzędzia, tak aby miał jedną partycję, która zajmuje całą przestrzeń dysku. Oto z czym pracuję:
- Następnie w terminalu włącz LVM
/dev/sda1. Zamierzam umieścić większość systemu na jednej partycji, ale nie musiałbyś tego robić.
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
- Teraz, jeśli były do uruchomienia
sudo vgs, a następnie przez sudo lvswas powinien być w stanie zobaczyć, że ilość wolnego miejsca w grupie woluminów „ubuntu-VG” (VFree pod wyjście VGS) jest równa ilości miejsca podjętej przez wolumin logiczny „root „(LSize poniżej wyjścia lvs). W moim przypadku mam 506,44 g za darmo w Ubuntu-vg, a moja partycja root ma 506,44 g. Jeśli wolne miejsce pozostawione w grupie woluminów jest równe rozmiarowi partycji, którą chcę zamrozić, powinienem być w stanie wymazać całą partycję i nadal móc odzyskać system po ponownym uruchomieniu. Pozostaw resztę wolnego miejsca w Ubuntu-vg na razie nieużywanym. Użyjemy go później.
- Teraz zainstaluj Ubuntu przy użyciu ręcznego partycjonowania

- Po zakończeniu instalacji idź ponownie do nowo zainstalowanego systemu.
- Po uruchomieniu w nowym systemie skonfiguruj go tak, aby był dokładnie taki, jak chcesz, gdy komputer uruchamia się za każdym razem.
- Jeśli nie wprowadzisz przypadkowych zmian do migawki i nie chcesz, aby partycja migawki była wyświetlana na pasku menu ...
mkdir /steady
- Edytuj
/etc/fstab, dodając (to wszystko jeden wiersz) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1jako ostatni wiersz pliku
- Ponieważ rzeczy takie jak aktualizacje będą zdmuchiwane przy każdym ponownym uruchomieniu, możesz je wyłączyć.
- Jeśli masz niezamrożoną partycję taką jak moja w / unfrozen, nie zapomnij udostępnić jej użytkownikom, którzy potrzebują do niej dostępu
- Po skonfigurowaniu systemu dokładnie tak, jak tego chcesz, utwórz następujący skrypt (będziesz potrzebować uprawnień roota) i zapisz jak
/root/steadystate.shw swoim ulubionym edytorze. Pamiętaj, że jeśli zmieniłeś nazwę grupy woluminów podczas konfigurowania LVM, musisz zaktualizować ją również w skrypcie poniżej.
#!/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
- Na koniec uruchom
sudo crontab -e, wybierz edytor i umieść @reboot /bin/bash /root/steadystate.shna końcu pliku. Zapisz i zamknij ( Ctrl+ X; odpowiedz, Yaby zapisać)
- Uruchom ponownie i powinieneś mieć system, który jest zamrożony, z wyjątkiem partycji zamontowanej w / unfrozen
Działa to, ponieważ migawka jest tworzona w czasie uruchamiania, i mimo że zaraz po tym przekazujemy polecenie scalenia migawki, migawki nie można scalić, gdy wolumin logiczny dla roota jest aktywny. W związku z tym odkłada akcję scalania do następnego uruchomienia / dev / ubuntu-vg / root, który jest przy następnym restarcie. Ta akcja byłaby również uruchomiona, gdyby system został uruchomiony z aktywnego USB.
Tylko dla kopnięć, wszedłem po ponownym uruchomieniu i uruchomiłem, sudo apt remove --purge firefox* libreoffice-* unity*co normalnie nie radzę robić, ponieważ usuwa niektóre przydatne programy i ustawia system w stanie, który może być mniej niż pożądany!
System nawet nie zamknąłby się poprawnie z GUI. Jak to naprawić? Restart!
Po ponownym uruchomieniu wszystko wróciło do porządku. Firefox, LibreOffice i Unity wróciły tam, gdzie były.
Próbowałem także usunąć system Linux *. To sprawiło, że maszyna nie mogła się uruchomić, jednak zwykłe uruchomienie z dysku Ubuntu na żywo sprawiało, że scalanie miało miejsce. Ponowne uruchomienie pozostawiło system w stanie „zamrożenia”
Jeśli chcesz mieć możliwość wprowadzania zmian, możesz (ponownie) zamontować migawkę z uprawnieniami rw, a następnie wykonać do niej chroot i wprowadzić wszelkie zmiany, które chcesz pozostawić na stałe. To nie jest bezbłędne, ale jest dowodem koncepcji.