This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
wiki:os:linux:writable-snapshot-bez-lvm [2018/01/22 15:25] root vytvořeno |
wiki:os:linux:writable-snapshot-bez-lvm [2018/01/22 15:37] (current) root |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Writable snapshot libovolného blokového zařízení bez LVM ====== | ====== Writable snapshot libovolného blokového zařízení bez LVM ====== | ||
- | | + | **" |
+ | |||
+ | Zjednodušeně řečeno se tím říká, co má kernel dělat při r/w přístupu k určitému LBA daného zařízení, | ||
+ | |||
+ | Využívá to např. LVM na vytváření/ | ||
+ | |||
+ | < | ||
+ | 0 8000 linear / | ||
+ | 8000 20000 linear / | ||
+ | </ | ||
+ | |||
+ | (od začátku řádku to je " | ||
+ | |||
+ | Existující tabulky od všeho v /dev/mapper lze vypsat příkazem " | ||
+ | |||
+ | :!: POZOR je to velmi nebezpečné, | ||
+ | |||
+ | ===== Příkazy ===== | ||
+ | Tohle vypíše použitá loop zařízení (loop vyrábí blokové zařízení z úseku jiného blokového zařízení nebo souboru, jde o to, aby se v dalším postupu nepoužila již použitá loop zařízení). | ||
+ | <code bash> | ||
+ | losetup -l | ||
+ | </ | ||
+ | |||
+ | Tohle vyrobí loop zařízení z daného úseku disku (tohle je potřeba, když je poškozená partition table a tedy systém nevidí např. /dev/sdb2). I tohle by se dalo udělat dmsetupem, tady to dělám kvůli "read only" mapování. | ||
+ | <code bash> | ||
+ | losetup -r -o 512006144 /dev/loop0 /dev/sdb | ||
+ | </ | ||
+ | |||
+ | Tohle zjistí velikost blokového zařízení v sektorech (je to pravděpodobně to samé, co vypisuje fdisk na prvním řádku). | ||
+ | <code bash> | ||
+ | blockdev --getsize / | ||
+ | </ | ||
+ | |||
+ | FIXME Tenhle řádek připraví soubor s definicí mapování typu "celé blokové zařízení" | ||
+ | <code bash> | ||
+ | xtable: | ||
+ | 0 975773156 linear /dev/loop0 0 | ||
+ | </ | ||
+ | |||
+ | Tohle vytvoří blokové zařízení / | ||
+ | <code bash> | ||
+ | dmsetup create base xtable | ||
+ | </ | ||
+ | |||
+ | Tohle vytvoří soubor dané velikosti (bude to odkládací prostor pro writable snapshot), pokud jde jen o dočasnost a vejde se to, dávám to do /dev/shm, velikost by měla být tak dvojnásobek předpokládaných úprav ve snapshotu - velikost těch úprav se odhaduje těžko, i jeden změněný sektor způsobí copy-on-write většího úseku. | ||
+ | <code bash> | ||
+ | dd if=/ | ||
+ | </ | ||
+ | |||
+ | Tohle ze souboru vyrobí blokové zařízení (tady by to nešlo dmsetupem, protože ten umí pracovat jen s blokovými zařízeními): | ||
+ | <code bash> | ||
+ | losetup /dev/loop1 / | ||
+ | </ | ||
+ | |||
+ | FIXME Tohle je největší magie, vytvoří mapování typu copy-on-write snapshot, v podstatě to říká "při přístupu k novému zařízení (to se vytvoří v dalším kroku pomocí dmsetup create) použij daný úsek zařízení / | ||
+ | <code bash> | ||
+ | mtable: | ||
+ | 0 975773156 snapshot / | ||
+ | </ | ||
+ | |||
+ | Tohle vytvoří ten snapshot podle definiční tabulky: | ||
+ | <code bash> | ||
+ | dmsetup create snap mtable | ||
+ | </ | ||
+ | |||
+ | Tohle už je jen příklad, co se s tím pak dá dělat - fsck a rw mount fungují, ale nezapíše to ani bajt na původní zařízení /dev/sdb. Pokud dojde ten " | ||
+ | <code bash> | ||
+ | reiserfsck --check / | ||
+ | mount -t reiserfs / | ||
+ | </ | ||
+ |