23.4.2014
Zařízení loop používám při práci s Linuxem už dlouhé roky. Zařízení loop je šikovné, pokud potřebuji přimontovat do systému například ISO obraz CD-ROM - ale to je věc, která je dnes už trochu mimo.
Dnes jsem narazil na jiné použití zařízení loop. Pro jednoho zákazníka vytvářím instalační USB disk. Z disku se nabootuje a spustí instalační disk. Celý disk jsem si připravil přímo na flash disku, který jsem předal zákazníkovi. U sebe na disku jsem si nechal jen obraz vytvořený příkazem dd:
dd if=/dev/sde of=instalacni-flash.img
Když jsem potřeboval cosi změnit, automaticky jsem namontoval soubor přes zařízení loop:
losetup /dev/loop instalacni-flash.img
a zjistil jsem, že nevím, jak namontovat první oblast na takovém disku. Fdisk mi prozradil nějaké informace:
# fdisk -l /dev/loop0 Disk /dev/loop0: 2 002 MB, 2 002 780 160 bajtů, 3 911 680 sektorů Jednotky = sektorů po 1 * 512 = 512 bajtech Velikost sektoru (logického/fyzického): 512 bajtů / 512 bajtů Velikost I/O (minimální/optimální): 512 bajtů / 512 bajtů Identifikátor disku: 0xe5837737 Zařízení Zavádět Začátek Konec Bloky Id Systém /dev/loop0p1 * 2048 3911679 1954816 83 Linux
Ale zařízení /dev/loop0p1 neexistuje. Malé pátrání na internetu mi prozradilo řešení. Příkaz mount dokáže použít zařízení až od určité vzdálenosti od začátku media - zde potřebuji posunout montovanou oblast o 2048 jednotek dál od začátku media. Příkaz mount to potřebuje v bajtech. Potřebnou velikost jednotky najdeme na řádku
Jednotky = sektorů po 1 * 512 = 512 bajtech
Velikost je zde 512 bajtů.
Potřebný posun najdeme na řádku
/dev/loop0p1 * 2048 3911679 1954816 83 Linux
Zde je posun 2048 jednotek, vynásobeno velikostí jednotky vychází posun 1048576 bajtů. Můžeme montovat:
mount -t ext4 -o offset=1048576 /dev/loop0 /mnt
Po ukončení práce je potřeba soubor odmontovat a odpojit od zařízení loop:
umount /mnt losetup -d /dev/loop0