Arbeiten mit Images

Images (auch: Container, Abbilder genannt) sind eine einfache und flexible Möglichkeit Blockorientiert in einer Datei zu arbeiten. Typischerweise nutzt man diese Möglichkeit beim Backup, zu Testzwecken, der forensischen Analyse und in der Virtualisierung.

  • Image erzeugen (Größe 1G ):
    dd if=/dev/zero of=image1G.img bs=1024000 count=1024
  • Image erzeugen (als sparse-Datei = wachsende Dateien die nicht voll zugewiesen sind) z.B. einer Datei mit 128 GB:
    dd if=/dev/zero of=filename.img bs=1k seek=128M count=1
  • Image vergrößern (um 1G ):
    dd if=/dev/zero bs=1024000 count=1024 >> image2G.img
  • manche Operationen können auch direkt auf der Image-Datei ausgeführt werden:
    • ext3 Dateisystem anlegen:
      mkfs.ext3 Image.img
    • Dateisystemcheck:
      e2fsck Image.img

GPT-Datenträger: Die Vergrößerung führt dazu das der Backup-GPT nicht mehr am Ende des Gerätes ist sondern irgendwo in der mitte ist. Außerdem stimmt die Größe des Datenträgers (logischerweise) nicht mehr. Gparted kann das fixen und ist auch sonst komfortabel bei der Anpassung von Dateisystemen.

  • nächstes freie Gerät anzeigen:
    sudo losetup -f
  • Image direkt mounten (ohne ein device mit losetup anzulegen):
    sudo mount -t ext3 Image.img /media/IMAGE -o loop 
  • Datei Image.img als Gerät /dev/loop0 einrichten:
    losetup /dev/loop0 Image.img
  • Gerätedatei entfernen:
    losetup -d /dev/loop0
  • Partitionen: Die /dev/loop?-Geräte kennen keine Partitionierung, daher kann immer nur auf eine Partition zugegriffen werden.
    • root@linux# sfdisk -d image
      # Partitionstabelle von /tmp/image
      unit: sectors
      
      /tmp/image1 : start=       32, size=    20448, Id=83, bootable
      [..]

      da die Angaben in Blöcken á 512 Byte sind, kann der Startbereich (→ offset) und das Größenlimit berechnet werden:

      echo $((32 * 512)) $((20448 * 512))

      mit diesen Angaben wird mount gefüttert:

      mount -o loop,offset=16384,sizelimit=10469376 image /media/image
  • maximale Anzahl von Images (mit loop) bereits gemounted:
    • Lösung mit Neustart: In der /etc/modules anhängen:
      loop max_loop=64

      nach einem Neustart können 64 Images (bzw. loop-Devices) benutzt werden

    • Lösung ohne Neustart (sofort Modul „loop“ neu laden):
      rmmod loop
      modprobe loop
      • beim laden vom Xen:
        sudo nano /etc/modprobe.d/xen

        mit dem folgenden Inhalt:

        options loop max_loop=64