Peringatan: Saya telah menerapkan solusi ini dan itu berfungsi, tetapi waktu penggabungan untuk kembali ke snapshot dapat menyebabkan proses boot membutuhkan waktu lama jika perubahan besar dibuat ke sistem selama boot terakhir. Selama masa tunggu ini, mungkin tampak bagi pengguna bahwa sistem sedang hang!
Berhati-hatilah juga bahwa siapa pun yang memiliki pengetahuan yang cukup untuk memasang snapshot, dapat membuat perubahan pada status "beku". Saya telah memanfaatkan kemungkinan ini untuk memperbarui sistem "beku", tetapi sekali lagi, ini juga dapat meningkatkan waktu yang diperlukan untuk menggabungkan (kembali ke) snapshot!
Snapshots LVM + cron + script = "beku" status
Saya baru-baru ini mulai menggali ke dalam LVM dan terlintas dalam benak saya bahwa orang bisa membuat keadaan "beku" pada mesin menggunakan LVM dan kemampuan snapshot-nya. Tentu saja, metode ini membutuhkan sistem yang dikonfigurasi menggunakan LVM (atau setidaknya LVM pada partisi yang akan dibekukan).
Ringkasan:
- Instal sistem pada partisi LVM yang menyediakan ruang yang cukup pada PV untuk snapshot
- Dapatkan sistem dikonfigurasi seperti yang Anda inginkan.
- Buat pekerjaan cron yang dijalankan sebagai root saat boot untuk menggabungkan snapshot dan membuat snapshot baru untuk menggantikan yang digabungkan
- Semua reboot berturut-turut kembali ke snapshot. Semua foto yang dibuat diambil dari sistem di negara tempat Anda membuatnya.
- Sebagai bonus tambahan, foto itu dapat dipasang dan dimodifikasi (asalkan Anda memiliki hak akses root) dan keadaan "beku" dapat diperbarui jika diperlukan.
Bukti konsep: Bekukan semuanya kecuali satu partisi dari instalasi yang bersih
Instal:
- Boot dari disk Ubuntu langsung / USB dan pilih opsi untuk "Coba Ubuntu tanpa menginstal." Ini penting untuk mengkonfigurasi partisi secara manual dengan LVM
- Ketika Ubuntu memuat partisi disk Anda menggunakan alat pilihan Anda sehingga memiliki satu partisi yang memakan seluruh ruang drive. Inilah yang saya kerjakan:
- Selanjutnya di terminal mengatur LVM aktif
/dev/sda1
. Saya akan meletakkan sebagian besar sistem pada satu partisi, tetapi Anda tidak harus melakukannya.
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
- Sekarang jika Anda menjalankan
sudo vgs
diikuti oleh sudo lvs
Anda harus dapat melihat bahwa jumlah ruang kosong yang tersisa di grup volume "ubuntu-vg" (VFree di bawah vgs output) sama dengan jumlah ruang yang diambil oleh volume logis "root" "(LSize dalam keluaran lvs). Dalam kasus saya, saya memiliki 506.44g gratis di ubuntu-vg dan partisi root saya berukuran besar 506.44g. Jika ruang kosong yang tersisa di grup volume sama dengan ukuran partisi yang ingin saya beku, saya harus dapat menghapus seluruh partisi dan masih dapat memulihkan dengan reboot. Biarkan sisa ruang kosong di ubuntu-vg tidak digunakan untuk saat ini. Kami akan menggunakannya nanti.
- Sekarang instal Ubuntu menggunakan partisi manual
- Ketika instalasi selesai, lanjutkan dan reboot ke sistem yang baru diinstal.
- Setelah boot ke sistem baru Anda, konfigurasikan agar sesuai persis seperti yang Anda inginkan ketika komputer melakukan booting setiap kali.
- Jika Anda tidak sengaja mengubah snapshot dan Anda tidak ingin partisi snapshot muncul di menu bar ...
mkdir /steady
- Edit
/etc/fstab
dengan menambahkan (ini semua satu baris) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1
sebagai baris terakhir file
- Karena hal-hal seperti pembaruan akan terhapus dengan setiap reboot, Anda mungkin ingin mematikannya.
- Jika Anda memiliki partisi yang tidak beku seperti milik saya di / unfrozen, jangan lupa membuatnya dapat diakses oleh pengguna yang membutuhkan akses ke sana
- Setelah sistem dikonfigurasikan persis seperti yang Anda inginkan, buat skrip berikut (Anda akan memerlukan root privilege) dan simpan seperti
/root/steadystate.sh
dengan editor favorit Anda. Perhatikan bahwa jika Anda mengubah nama grup volume saat mengatur LVM, Anda harus memperbarui itu dalam skrip di bawah ini juga.
#!/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
- Terakhir jalankan
sudo crontab -e
, pilih editor dan letakkan @reboot /bin/bash /root/steadystate.sh
di akhir file. Simpan dan tutup ( Ctrl+ X; jawab Yuntuk menyimpan)
- Reboot, dan Anda harus memiliki sistem yang dibekukan kecuali untuk partisi yang dipasang di / unfrozen
Ini berfungsi karena snapshot dibuat pada saat boot, dan meskipun kami melewati perintah untuk menggabungkan snapshot tepat setelah itu, snapshot tidak dapat digabungkan sementara volume logis untuk root aktif. Karena itu menunda aksi penggabungan sampai waktu berikutnya / dev / ubuntu-vg / root diaktifkan yang berada di reboot berikutnya. Tindakan ini juga akan dipicu jika sistem di-boot dari USB langsung.
Hanya untuk iseng, saya masuk setelah reboot dan berlari sudo apt remove --purge firefox* libreoffice-* unity*
yang biasanya tidak saya sarankan untuk dilakukan karena menghapus beberapa program yang berguna dan menempatkan sistem dalam kondisi yang mungkin kurang diinginkan!
Sistem bahkan tidak mau mematikan dengan benar dari GUI. Jadi bagaimana cara memperbaikinya? Nyalakan kembali!
Setelah reboot, semuanya kembali beres. Firefox, LibreOffice, dan Unity semuanya kembali ke tempatnya semula.
Saya juga mencoba menghapus linux *. Ini membuat mesinnya tidak dapat boot, namun, hanya boot dari disk Ubuntu langsung sepertinya membuat penggabungan berlangsung. Restart lagi meninggalkan sistem dalam keadaan "beku"
Jika Anda ingin dapat membuat perubahan, Anda dapat (me-mount kembali) snapshot dengan hak istimewa dan kemudian chroot untuk itu dan membuat perubahan yang Anda ingin tetap permanen. Ini bukan tanpa cacat, tetapi itu adalah bukti konsep.