User Tools

Site Tools


wiki:os:linux:writable-snapshot-bez-lvm

This is an old revision of the document!


Writable snapshot libovolného blokového zařízení bez LVM

“Dmsetup” je user interface k “dm” (device mapper), což je velmi mocný low-level nástroj na translační mapování mezi blokovými zařízeními.

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í, od lineárního mapování do jiného zařízení, přes striping/mirroring po snapshoty a další. Device mapper je interní součástí kernelu, tedy “dmsetup” je podobný jako třeba příkazy “iptables” nebo “ip”, nedělají přímo nic, jen zkonfigurují vnitřní tabulky v kernelu, který pro následující požadavky již dělá potřebná mapování.

Využívá to např. LVM na vytváření/úpravy mapování LV do VG a VG do PV - např. triviálním několikařádkovým souborem s mapováním “linear” lze dosáhnout toho, že blokové zařízení bude na jiných zařízeních v nesouvislých úsecích (typický případ LVM po větším množství lvremove a lvcreate). Taková tabulka by mohla vypadat např. takhle:

0 8000 linear /dev/mapper/vg-main 60000
8000 20000 linear /dev/mapper/vg-main 100000

(od začátku řádku to je “začátek v novém zařízení, počet sektorů, způsob mapování, původní zařízení (do nějž jsou přístupy k danému úseku mapovány), začátek na původním zařízení, jednotkou měření pozic je sektor - 512 byte)

Existující tabulky od všeho v /dev/mapper lze vypsat příkazem “dmsetup table /dev/mapper/<name>” - pro studijní účely…

:!: POZOR je to velmi nebezpečné, lze klidně udělat mapování do již zmapované oblasti a něco rozbít. Prostě něco jako dd, nic to nekontroluje a udělá to, co se tomu řekne…

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í).

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í.

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).

blockdev --getsize /dev/loop0

FIXME Tenhle řádek připraví soubor s definicí mapování typu “celé blokové zařízení”. To “xtable” je jen jméno, může být libovolné.

xtable:
0 975773156 linear /dev/loop0 0
wiki/os/linux/writable-snapshot-bez-lvm.1516631604.txt.gz · Last modified: 2018/01/22 15:33 by root