Připojení systémů souborů z RAW image KVM

Připojení systému souborů (v tomto případě NTFS) z image disku v RAW KVM formátu. V tomto konkrétním případě se jednalo o virtuální disk uložený přímo na LV (viz LVM), ale postup by platil i pro image v souboru. Image virtuálního disku musí ale být ve formátu RAW, což lze z původního formátu snadno získat pomocí nástroje qemu-img.

Připojení image virtuálního disku jako diskové zařízení

Prvním krokem je připojení image jako loop device. Zrovna pro oddíl uložený na LV lze tento krok vynechat, ale pro obecnost návodu jej uvádím:

#losetup -r /dev/loop0 /dev/system/kvm-download-system

Máme tedy k disposici zařízení, které obsahuje kompletní virtální harddisk, tedy i se zaváděcím oddílem a tabulkou rozdělení disku. Ta je podstatná, protože pro namountování systému souborů budeme potřebovat znát umístění počátku systému souborů na virtuálním disku (offset).

Zjištění offsetu počátku systému souborů na připojeném diskovém zařízení

Offset datového oddílu zjistíme například prográmkem parted, postup by měl být stejný jak pro typ tabulky oddílů MBR tak i pro EFI GPT (jako v tomto případě). Je důležité přepnout zobrazované jednotky na B (bajty):

#parted /dev/loop....
(parted) unit B
(parted) print
Model: Linux device-mapper (dm)
Disk /dev/mapper/system-kvm--download--temp: 85899345919B
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start       End           Size          File system  Name                          Flags
1      17408B      134235135B    134217728B                 Microsoft reserved partition  msftres
2      135266304B  85898297343B  85763031040B  ntfs         Basic data partition

Offset našeho datového (druhý oddíl) oddílu je tedy 135266304B. Po tomto kroku už můžeme udělat další loop device, který bude již představovat samotný oddíl se systémem souborů.

#losetup -r -o 135266304 /dev/loop1 /dev/loop0

Připojení systému souborů

Po tomto kroku by mělo již stačit namountovat systém souborů na zvolené místo. Veškeré operace, jak vytváření loop device, tak i mountování, jsem dělal s parametrem read-only. Tento postup by měl fungovat i pro možnost zápisu, který jsem ale netestoval.

#mount /dev/loop1 /mnt/xxx -t ntfs -o ro

Kritická místa postupu:

Systém souboru musí být na image uložen v jednom souvislém bloku. Tedy image musí být typu „raw“. Tato podmínka také vylučuje použití image virtuálního disku s rozdělením pomocí LVM nebo funkcí dynamický disk z Windows. Data takto vytvořených oddílů nemusejí být (a typicky nejsou) na disku v jednom souvislém bloku.

Nejkritičtější je vypočítat správný offset počátku oddílu. Jistě by jej šlo zjistit i jinak, například vyhledáním hlavičky systému souborů, uvedený postup přes parted není jediný možný. Pokud offset není vypočítaný správně, nepodaří se připojit systém souborů.

Příspěvek byl publikován v rubrice Linux, Systémy souborů, Virtualizace. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

1 komentář u Připojení systémů souborů z RAW image KVM

  1. Heron napsal:

    Díky za doplnění.

    mount -o loop,offset mi z nějakého důvodu nefungoval. Článek byl spíše o tom, že je nutno počítat s nějakými offsety a jak je zjistit, samotný loop device je jen prostředek.

Komentáře nejsou povoleny.