btrfs / restore snapshot?

Btrfs fájlrendszeren könnyedén létre tudok hozni snapshot-okat. De hogy tudjuk visszaállítani? Ez nem derül ki nekem a neten fellelhető dokumentációból.

Az egyértelmű, hogy rá tudok boot-olni a rendszerre egy live cuccal, majd felcsatolom a root subvolume-ot és a visszaállítandó snapshot subvolume-ot külön mappákba, majd rsync-kel áttolom a snapshot adatait a root-ra. Ha ez az egyetlen megoldás, akkor azért ez mégis csak fél megoldássá teszi Btrfs-t.

Mit nézek be? Már létező snapshot-ot rá tudok snapshot-olni a root-omra?

Példa:
[code]
# snapshot mappa létrehozása
mkdir snap
# snapshot létrehozása a root-ról
btrfs sub snap -r / /snap/1
# vissza nem kellene működnie?
btrfs sub snap /snap/1 /
[code]

(Szerk.: a SUSE-s snapper progit most hagyjuk figyelmen kívül, sima btrfs cli megoldás érdekelne)

Előre is köszi!

Hozzászólások

Ugye itt az általam is említett rsync-es megoldást használja a snapshot visszaállításra. Viszont a kérdésemre a válasz is benne van. Már tudom hol követtel el a hibát a gondolatmenetben:

"It is highly advised to not use the root subvolume when deploying a new Funtoo instance or put any kind of data on it in a more general case. Rolling back a data snapshot will be much easier and much less error prone (no copy process, just a matter of 'swapping' the subvolumes)."

Tehát nem kellene magát a gyökeret használnom, hanem eleve egy subvolume-ot kellett volna az éles rendszernek is létrehozni, és így már váltogathatok a snapshot-ok között a "set-default" paranccsal. Onnétól az lesz a felcsatolt verzió.

Ez viszont felvet egy másik kérdést: tudok-e váltani vagy snapshot-ot létrehozni 1 mappával feljebb felcsatolt rendszerről?

Ugye egy snapshot létrehozásánál meg kell adnom a cél mappát. De ha a gyökérnek egy subvolume-ot használok, akkor az attól feljebb lévő hierarchia nem látszik. Tehát 1 fizikai kötetnél szerintem mindig csak az adott gyökér _almappájába_ tudok snapshot-ot létrehozni, ha fel van csatolva a gyökér volume. És máris megint a topic indító kérdésemnél vagyok.

Természetesen egy live-ról boot-olva váltogathatok könnyedén a snapshot-ok között már, viszont ez amiatt macerás, hogy nem tudom on-the-fly menedzselni a snapshot-jaim (pl. cron-ból létrehozni a futó rendszerről), mindig boot-olnom kellene egy live-ról a snapshot-ok menedzseléséhez.

Jól gondolom?

Max még annyit lehetne akkor talán, hogy a home-nak külön subvolume-ot csinálni, mert azt akkor single módban boot-olva nem kellene live rendszer. Ennyit könnyítene a dolgon. Habár jobb mindig a teljes rendszerről (adat + rendszer) csinálni mindig a snapshot-ot, mivel azért a gyors visszaállítás a testreszabott rendszer nélkül csupán home-mal megint csak szívás.

Közben látom hogy a boot során a kernel paraméterek között is meg lehet adni, hogy melyik subvolume-ot használja. Akkor viszont nem kell a váltáshoz live rendszerrel boot-olni.

Akkor már csak az a kérdés, hogy hogyan lehetne létrehozni snapshot-ot _nem_ az alkönyvtárába a futó rendszerről?

Arra jutottam, hogy a legjobb megoldás szerintem a kettő közötti kompromisszum. Tehát ha valaki friss rendszert telepít Btrfs-re, akkor eleve egy subvolume-ba érdemes tenni, viszont a cron-ból futtatott csak olvasható snapshot-ok a root-ról mehetnek ennek az almappájába. És ha legfeljebb vissza kell állítani vagy ráboot-olni (ami a ritkább eset), akkor inkább rá fogok boot-olni egy livecd-t, majd a csak olvasható snapshot.ról csinálok egy újabb írható snapshot-ot, és ezt adom meg a kernel boot paramétereinél, mint élesbe használandó subvolume-ot.

Ezzel a futó rendszer alatti kötet kezelés is megvan, meg a kernel paraméterrel nem kell grub configot átírni sem.

Így kell használni:

btrfs subvol snapshot / /ezasnapshotsubvolumeneve

Ezután a létrejött subvolume-ot (nem readonly!) láthatod a / alatt is (ls -al /)

btrfs subvol list /
megadja a subvolume id-ját

Rendszer "visszaállítása":
boot előtt a kernel command line részeként rootflags=subvolid=< szám >

Mivel a snapshot rw, ezért ugyanúgy használhatod, mint korábban

Helyfelszabadítás: livecd-ről letörlöd a subvolume-on kívüli könyvtárakat.