Ahoj, mě by zajímalo, jak technicky fungují snapshoty. Chápu, že je ukládán ne celý soubor, ale pouze jeho změna. Mě by ale zajímalo, jak je to právě uložené. Jako další "soubor" nebo nějak jinak?
Ptám se, protože před ukotvením se na Manjaro jsem zkoušel openSuse s Btrfs ale bylo to nešťastně nedomyšlené. Za cca 2 dny nastavování systému, instalací programů aj. se mi samy udělaly stovky snapshotů což vedlo k téměř totální nefunkčnosti systému - bylo to pomalé ve smyslu, že úkon, který trvá normálně vteřinu běžel několik minut. Moje hypotéza byla právě přemíra snapshotů, což se mi potvrdilo, když se mi podařilo v rescue příkazem snapshoty smazat (trvalo to několik hodin). Pak zase systém běžel normálně. No stejně mě ale openSuse zklamalo v jiných věcech, takže jsem u něj nezůstal.
Každopádně HDD bylo obsazené sotva ze 1/4, tedy mi přišlo, že se ty snapshoty ukládají jaksi jinak...
Když zapíšete změnu do souboru, dotčený blok se zapíše jako nový do volného místa, a starý blok s původním obsahem se zahodí, pokud na něj už neukazuje jiná reference (to je to copy-on-write). Když uděláš snapshot, jednoduše se na bloky dotčených souborů udělá další reference, takže při nějaké změně nejsou smazány, protože na něj ukazují reference ze snapshotů.
Mít stovky snapshotů něčeho většího (jako třeba rootfs) je špatně, na to to není dimenzováno. To se v openSuse netrefili :)
Dovolím si nesouhlasit s oběma komentáři. Ano, na normálním systému jistě člověk dělá málo změn, problém je, že to snapshot udělá i při otevření nastavení nebo yast (aspoň před cca půl rokem to tak bylo) a při spoustě dalších příležitostí. Jo a taky defaultně to dělalo časové snapshoty, což může vyústit v to, že uživatel, který toto neví, tak snapper nemusí vůbec otevřít a dopadne jak já.
A ano, nedůležité snapy je možné smazat přes GUI, jenže když se vám najedou sekne systém a vy nejste schopní se vůbec dostat do DE, tak je to trochu na nic.
Největší problém ale vidím v tom, že se nastavení tvorby snapshotů nedělá na jednom místě. Už nevím jestli šlo něco nastavit ve snapperu, ale část nastavení se dělala přes příkazovou řádku (což osobně nevidím jako moc příhodné) a část nastavení se musela hledat v konfiguračních souborech různých aplikací, jejichž spuštění automaticky udělalo snapshot, už je už úplně mim mísu.
Není to přepis na místě. Starý soubor se buď zahodí a pak se zbylý prostor může otrimovat nebo zůstane jako součást snapshotu (dokud se ten nesmaže). SSD to neopotřebovává, to mohu po 5 letech konstatovat (wear leveling na úrovni procent) i když disk používám k práci denně a snapshoty nezabírají žádný velký prostor.
Kdyby btrfs neměl jiné nectnosti (za mně hlavně poweroff smrt), tak tohle je jedna z jeho největších výhod a je to perfektní.