web-dev-qa-db-fra.com

Comment monter une image disque depuis la ligne de commande?

Je sais comment monter un lecteur qui a un fichier de périphérique correspondant dans/dev, mais je ne sais pas comment faire pour une image disque qui ne représente pas un périphérique physique et n'a pas d'analogue dans/dev (par exemple un Fichier ISO ou une image de disquette). Je sais que je peux le faire sous Mac OS X en double-cliquant sur l'icône de l'image disque dans le Finder, qui montera automatiquement le lecteur, mais j'aimerais pouvoir le faire à partir du terminal. Je ne sais pas s'il existe une façon générale de procéder sous Unix, ou si c'est spécifique à la plate-forme.

43
user628544

S'il s'agissait d'une image de disque dur avec une table de partition MBR, je rechercherais l'image pour trouver le décalage de la partition que je dois monter.

fdisk -lu /path/disk.img

Ensuite, je le montais en passant le décalage.

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition

La valeur de décalage est en octets, tandis que fdisk affiche un nombre de blocs, vous devez donc multiplier la valeur de la colonne "Begin" ou "Start" de la sortie fdisk par 512 (ou quelle que soit la taille du bloc) pour obtenir le décalage à monter.

48
jc__

Sur les systèmes GNU GNU $ modernes, la commande mount peut gérer cela:

mount -o loop file.iso /mnt/dir

pour démonter vous pouvez simplement utiliser la commande umount

umount /mnt/dir

Si votre système d'exploitation n'a pas cette option, vous pouvez créer un périphérique de boucle :

losetup -f # this will print the first available loop device ex:/dev/loop0
losetup /dev/loop0 /path/file.iso #associate loop0 with the specified file
mount /dev/loop0 /mnt/dir #It may be necessary specify the type (-t iso9660)

pour démonter, vous pouvez utiliser -d:

umount /mnt/dir
losetup -d /dev/loop0

Si le fichier a des partitions, par exemple une image HD, vous pouvez utiliser le -P paramètre (selon votre système d'exploitation), il mappera les partitions dans le contenu du fichier:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX
39
a0f3dd13

losetup -P automatisation des images multi-partitions

Comment monter une image disque depuis la ligne de commande? | Unix & Linux Stack Exchange mentionné losetup -P, et voici quelques fonctions Bash pratiques pour automatiser davantage les choses. Usage:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ Sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

La source:

los() (
  img="$1"
  dev="$(Sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    Sudo mkdir -p "$dst"
    Sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    Sudo umount "$dst"
  done
  Sudo losetup -d "$dev"
)

Essayer:

mount -o loop /path/to/file.iso /mnt

Vous pouvez ajouter, après loop:

  • -t msdos pour disquette
  • -t iso9660 pour l'image du CD-ROM

Linux essaie généralement de deviner le type de fichier.

6
Archemar