web-dev-qa-db-fra.com

Créer un système de fichiers à partir de rien

J'ai besoin de créer un système de fichiers avec une seule partition à partir de rien (/dev/zero). J'ai essayé cette séquence de commandes:

dd if=/dev/zero of=mountedImage.img bs=512 count=131072
fdisk mountedImage.img
    n
    p 
    2048
    131072

Fondamentalement, j'ai besoin de créer un fichier image de 64 Mo rempli de zéros. Ensuite, j'utilise fdisk pour créer une nouvelle partition pour le nouveau système de fichiers, en commençant par le secteur 2048 et en utilisant tous les secteurs restants. Mais maintenant, je rencontre des problèmes. Si je configure un périphérique de boucle et le formate en utilisant mkfs -t vfat, la table de partition est écrasée et le système de fichiers est placé sur le disque. Je n'ai pas besoin d'un disque entier formaté en FAT32, j'ai juste besoin que ma partition principale le soit.

Quelqu'un sait-il comment formater une seule partition de l'image de disque brute, pas l'image entière? Veuillez aider.

2
user35443

Une solution qui ne nécessite pas de privilèges root est de créer un fichier avec la taille de la partition, d'appeler mkfs sur ce fichier, puis de copier le fichier en place.

truncate -s 64512k part1.vfat
/sbin/mkfs.vfat part1.vfat
dd if=part1.vfat of=mountedImage.img bs=1k skip=2048

Alternativement, avec les privilèges root, vous pouvez configurer un périphérique de boucle qui vous donne accès à l'image en tant que périphérique. Puisque vous ne souhaitez accéder qu'à une partie de l'image, vous devrez l'indiquer explicitement.

Sudo losetup -o 2048k --sizelimit 64512k đev/loop0 mountedImage.img
Sudo mkfs.vfat /dev/loop0
Sudo losetup -d /dev/loop0

Pour travailler avec des outils plus confortables, vous avez besoin des privilèges root et d'un redémarrage. Le module de boucle peut fournir un accès aux partitions, mais cela est désactivé par défaut. Pour activer cet accès, modifiez /etc/default/grub et changez la ligne GRUB_CMDLINE_LINUX="" à

GRUB_CMDLINE_LINUX="loop.max_part=15"

S'il y avait déjà d'autres options, laissez-les, bien sûr; ils doivent être séparés par des espaces et toute la chaîne d'options doit être entre guillemets doubles, par exemple GRUB_CMDLINE_LINUX="option=value anotheroption loop.max_part=15".

Maintenant, après avoir partitionné l'image disque, exécutez

Sudo losetup /dev/loop0 mountedImage.img
Sudo mkfs.vfat /dev/loop0p1

Courir losetup -d /dev/loop0 lorsque vous avez fini de travailler avec cette image.

2
Gilles

Les fichiers d'image du système de fichiers ne sont normalement pas partitionnés sauf s'ils sont des sauvegardes sur tout le disque ou s'ils sont utilisés avec des machines virtuelles (QEMU, etc.). Pour vos besoins, vous souhaiterez probablement simplement créer le système de fichiers directement sur le fichier image. Vous pouvez ensuite le monter:

Sudo mkdosfs mountedImage.img
Sudo mount -o loop mountedImage.img /mnt

Si vous souhaitez ensuite écrire cette image sur une clé USB ou similaire, vous pouvez l'écrire sur une partition:

Sudo dd if=mountedImage.img of=/dev/sdc1
1
Rod Smith

kpartx

Sudo apt-get install kpartx
losetup -fs my.raw
Sudo kpartx -a my.img
ls /dev/mapper

Production:

/dev/mapper/loop0
/dev/mapper/loop0p1

loop0p1 est la première partition, nous pouvons donc faire:

mkdir -p d
Sudo mount /dev/mapper/loop0p1 d

Avantage de cette méthode: fonctionne sur Ubuntu 14.04 sans redémarrage.

option losetup 2.21 -P

losetup -P -f --show my.img

Crée un /dev/loopXpY par partition.

Avantage: exécutable préinstallé dans de nombreuses distributions (paquet util-linux).

Inconvénient: option assez récente, non présente dans Ubuntu 14.04.