jak dostat z disku konsistentni LVM snapshot

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Neděle Květen 27 12:07:09 CEST 2007


On Sat, 26 May 2007, Martin Kraus wrote:

> zajimalo by mne, kdyby to fungovalo tak, ze soubory otevrene pro zapis
> by neprepisovaly puvodni/nevytvorily novy soubor dokud by nebyly
> uzavreny pro zapis. neco na zpusob copy-on-write jako je lvm snapshot.

Dost blbě v případě, že 1. je to soubor, do kterého program postupně
zapisuje další a další data (logy, databáze) a drží si ho celou dobu
otevřený, 2. je to soubor (databáze), do kterého současně zapisuje více 
procesů.

Je pravda, že takhle funguje AFS, kde je dost významná odchylka od běžného 
unixového chování motivována tím, aby dobře fungovalo i přes půl 
zeměkoule. Ale o AFS je také známo, že je s ním potřeba zacházet opatrně a 
lze použít jen na některé věci (nebo se musí upravit programy, které 
s ním pracují).

Samozřejmě to nepomůže v i dalších případech, kdy close() není konec
transakce (současná práce s více soubory, operace s adresáři).

Jinak přesně to, co navrhujete, lze bez velkých potíží udělat z userlandu:  
nejdřív data zapíšete do dočasného souboru (a pokud možno to zakončíte
fsync()) a pak uděláte rename() a nahradíte původní soubor tím novým.

> > Nebo se na to podíváte z druhé strany: co když vypnou proud, někdo 
> > omylem  kopne do tlačítka reset (to jsem opravdu zažil), [...]
> 
> no kdyz nekdo prijde se sedmikilovym bouracim kladivem na topinkovac, 

Doplnil bych, že bohatě stačí i vhodně načasovaná havárie programu, co
data zapisuje. Váš návrh by ses tím také vypořádával dost špatně, protože
byste musel vyžadovat, aby program pro skutečné provedení zápisu provedl
explicitní close() místo implicitního při skončení procesu, což by asi 
rozbilo docela značné množství programů, co fungují jako filtry.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."





Další informace o konferenci Linux