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