Avertissement: j'ai implémenté cette solution et cela fonctionne, mais les temps de fusion pour revenir à l'instantané peuvent entraîner un processus de démarrage long si des modifications importantes ont été apportées au système lors de son dernier démarrage. Pendant cette période d'attente, il peut sembler aux utilisateurs que le système se bloque!
Sachez également que toute personne disposant de connaissances suffisantes pour monter l'instantané peut modifier l'état "figé". J'ai profité de cette possibilité pour mettre à jour des systèmes "gelés", mais encore une fois, cela peut également augmenter le temps nécessaire pour fusionner (revenir à) l'instantané!
Instantanés LVM + cron + script = état "figé"
J'ai récemment commencé à creuser dans LVM et il m'est apparu que l'on pouvait créer un état "figé" sur une machine utilisant LVM et ses capacités de capture instantanée. Bien sûr, cette méthode nécessite un système configuré à l'aide de LVM (ou au moins LVM sur les partitions à figer).
Sommaire:
- Installer le système sur les partitions LVM en réservant suffisamment d'espace sur un PV pour un instantané
- Obtenez le système configuré comme vous le souhaitez.
- Créez un travail cron qui s'exécute en tant que root au démarrage pour fusionner l'instantané et créer un nouvel instantané pour remplacer celui fusionné
- Tous les redémarrages successifs reviennent à l'instantané. Tous les instantanés créés sont pris du système dans l'état dans lequel vous l'avez créé.
- En prime, l'instantané peut être monté et modifié (à condition que vous ayez les privilèges root) et l'état "figé" peut être mis à jour si nécessaire.
Preuve de concept: geler tout sauf une partition d'une installation propre
L'installation:
- Démarrez à partir d'un disque / USB Ubuntu en direct et choisissez l'option "Essayer Ubuntu sans installer". Ceci est important pour configurer manuellement des partitions avec LVM
- Lorsque Ubuntu charge partitionnez votre disque en utilisant l'outil de votre choix afin qu'il ait une partition qui occupe tout l'espace du disque. Voici avec quoi je travaille:
- Ensuite, dans un terminal, configurez LVM
/dev/sda1
. Je vais mettre la plupart du système sur une seule partition, mais vous n'auriez pas à le faire.
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
- Maintenant, si vous exécutez
sudo vgs
suivi de, sudo lvs
vous devriez pouvoir voir que la quantité d'espace libre restant dans le groupe de volumes "ubuntu-vg" (VFree sous sortie vgs) est égale à la quantité d'espace occupée par le volume logique "root" "(LSize sous sortie lvs). Dans mon cas, j'ai 506,44 g de libre dans ubuntu-vg et ma partition racine est grande de 506,44 g. Si l'espace libre laissé dans le groupe de volumes est égal à la taille de la partition que je veux geler, je devrais pouvoir effacer la partition entière et toujours pouvoir récupérer avec un redémarrage. Laissez le reste de l'espace libre dans ubuntu-vg inutilisé pour l'instant. Nous l'utiliserons plus tard.
- Installez maintenant Ubuntu en utilisant le partitionnement manuel
- Une fois l'installation terminée, redémarrez le système nouvellement installé.
- Une fois démarré dans votre nouveau système, configurez-le afin qu'il soit exactement comme vous le souhaitez lorsque l'ordinateur démarre à chaque fois.
- Si vous ne modifiez pas accidentellement l'instantané et que vous ne souhaitez pas que la partition d'instantané apparaisse dans la barre de menus ...
mkdir /steady
- Modifiez
/etc/fstab
en ajoutant (il s'agit d'une seule ligne) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1
comme dernière ligne du fichier
- Étant donné que des choses comme les mises à jour seront supprimées à chaque redémarrage, vous souhaiterez peut-être les désactiver.
- Si vous avez une partition non gelée comme la mienne à / unfrozen, n'oubliez pas de la rendre accessible aux utilisateurs qui en ont besoin
- Une fois que le système est configuré exactement comme vous le souhaitez, créez le script suivant (vous aurez besoin des privilèges root) et enregistrez-le
/root/steadystate.sh
avec votre éditeur préféré. Notez que si vous avez modifié le nom du groupe de volumes lors de la configuration de LVM, vous devrez également le mettre à jour dans le script ci-dessous.
#!/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
- Enfin, exécutez
sudo crontab -e
, sélectionnez un éditeur et placez-le @reboot /bin/bash /root/steadystate.sh
à la fin du fichier. Enregistrer et fermer ( Ctrl+ X; répondre Ypour enregistrer)
- Redémarrez, et vous devriez avoir un système qui est gelé à l'exception de la partition montée à / non gelée
Cela fonctionne car l'instantané est créé au démarrage et même si nous transmettons la commande pour fusionner l'instantané juste après cela, l'instantané ne peut pas être fusionné tant que le volume logique pour la racine est actif. Il reporte donc l'action de fusion jusqu'à ce que la prochaine fois / dev / ubuntu-vg / root soit activé, c'est-à-dire au prochain redémarrage. Cette action serait également déclenchée si le système était démarré à partir d'une clé USB en direct.
Juste pour les coups de pied, je suis entré après un redémarrage et sudo apt remove --purge firefox* libreoffice-* unity*
j'ai couru ce que je ne conseillerais pas normalement de faire car il supprime certains programmes utiles et met le système dans ce qui pourrait être un état moins que souhaitable!
Le système ne s'arrêterait même pas correctement à partir de l'interface graphique. Alors, comment peut-on résoudre ce problème? Redémarrez!
Au redémarrage, tout était en ordre. Firefox, LibreOffice et Unity étaient tous revenus à leur place.
J'ai également essayé de supprimer Linux *. Cela a laissé la machine incapable de démarrer, cependant, le simple démarrage à partir d'un disque Ubuntu en direct a semblé faire la fusion. Le redémarrage a de nouveau laissé le système dans son état "figé"
Si vous souhaitez pouvoir apporter des modifications, vous pouvez (re) monter l'instantané avec les privilèges rw, puis y chrooter et apporter les modifications que vous souhaitez conserver permanentes. Ce n'est pas parfait, mais c'est une preuve de concept.