Montage de plusieurs fichiers img en tant que périphérique à boucle unique

19

Existe-t-il un moyen de prendre un fichier img de disque qui est divisé en plusieurs parties et de le monter en tant que périphérique à boucle unique?

MageProspero
la source
1
Comment est-il cassé? De quel format s'agit-il? Il pourrait y avoir un peu de magie pour cela si c'est un format spécial, mais je soupçonne que la réponse est de les chatter ensemble!
Caleb
Je suis limité par le format de l'appareil aux fichiers qui sont moins les 4 concerts. J'ai un accès root sur l'appareil. Y a-t-il quelque chose que je peux avec LVM
MageProspero

Réponses:

16

Je ne pense pas que vous puissiez le faire sur place, mais si vous avez suffisamment d'espace, cela devrait fonctionner:

# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k

# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01

# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1

# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>

# Mount the new filesystem
mount /dev/md0 /mnt

Vous ne pouvez pas simplement créer une matrice RAID à partir des fichiers d'origine, car les disques RAID ont un en-tête spécifique où le nombre de disques, le niveau RAID, etc. est stocké. Si vous le faites, cette partie de vos fichiers d'origine sera écrasée.

Vous pouvez utiliser le mdadm --buildpour créer un tableau sans métadonnées, mais vous devez d'abord effectuer une sauvegarde. Ou si le montage en lecture seule est suffisant:

losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt

Pourquoi veux-tu faire cela? Si votre système de fichiers ne peut pas gérer> 4 Go de fichiers, vous devez simplement passer à un autre sain.

stribika
la source
Peut-être aussi possible de le faire avec le mappeur de périphériques, mais ce qui précède est plus facile.
Wodin
Désolé d'avoir mis si longtemps à accepter, très bonne réponse. Je ne ferais pas cela dans des circonstances normales, c'est plutôt une question de mode aventure.
MageProspero
2
Vous voudrez probablement l'utiliser truncateau lieu de ddcar il est beaucoup plus rapide (il n'effectue pas d'écriture réelle sur FS mais alloue simplement les inodes et marque le fichier comme contenant simplement un trou).
Maciej Piechotka
Agréable. Je ne le savais pas.
stribika
Par expérience, si vous utilisez des solutions de sauvegarde ou de synchronisation basées sur le cloud de grande capacité comme CrashPlan ou Google Drive payant, c'est une très, très bonne idée d'utiliser de petits fichiers divisés au lieu d'un seul gros fichier. En cas d'échec du téléchargement d'un fichier, vous n'aurez qu'à retélécharger, disons, 1 Go au lieu de 100 Go.
RAKK
3

Pour monter une image disque divisée (ou une image de partition), vous devez utiliser à affusepartir des outils afftools actuellement gérés ici: https://github.com/sshock/AFFLIBv3

Donc, si vous avez un fichier, divisé en plusieurs sous-fichiers test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009

alors vous pouvez les rejoindre virtuellement avec affuse

# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw

(cela combine tous les fichiers en commençant par le fichier 000, puis 001, 002,…)

Et puis montez l'image

mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test

L'utilisation est décrite ici et quelques exemples ici . Une page de manuel est également disponible après la compilation et l'installation, ou ici .

PS: Pour moi, cela affusene fonctionnait que si les fichiers divisés avaient une taille qui était un multiple de 512 octets.

erik
la source
4
Je viens d'essayer cette méthode. Il a une mise en garde majeure: il vous permettra uniquement de monter votre image en lecture seule.
RAKK
Fonctionne très bien tant que vous n'avez que des centaines et non des milliers de blocs de fichiers. Il serait peut-être préférable d'utiliser mdadm pour créer une partition de raid linéaire: unix.stackexchange.com/a/98779/22709
Jay Taylor
1

Vous pouvez écrire votre propre extension de périphérique de stockage en bloc (pensez à une extension de type fusible) et effectuer des recherches en fonction de l'adresse.

Ici vous pouvez trouver un exemple d'utilisation du fusible https://github.com/libfuse/python-fuse/blob/master/example/hello.py

test30
la source
merci je devrais vraiment envelopper ma tête autour de la méta circularité de ce jour
MageProspero
0

La chose la plus proche que je connaisse jusqu'à présent pour une solution est de créer une VM VMware. Vous démarrez un CD live Linux comme Rescatux ou Knoppix, vous créez un dossier partagé SMB sur votre ordinateur hôte, vous montez ce partage SMB sur votre VM, puis vous ddl'image sur le HD virtuel. VMware enregistre par défaut ses images de disque sous forme de fichiers fractionnés, c'est donc la chose la plus proche de lire directement une image disque divisée en plusieurs fichiers.

Plus tard, si vous souhaitez accéder aux fichiers depuis votre ordinateur hôte, vous pouvez essayer d'ajouter un deuxième disque dur virtuel à l'image et y copier les fichiers. Ensuite, vous configurez un dossier partagé SMB sur la machine virtuelle et vous y connectez depuis votre hôte. De cette façon, vous pouvez, par exemple, violer la limite de 4 Go de fichiers FAT32 dans le cas où vous utilisez un iPod Classic (qui ne groks fat32), ou la carte SD de votre smartphone (généralement vous devez installer une ROM personnalisée pour pour utiliser Ext3 ou NTFS sur le stockage externe, vous avez besoin pour cela d'un téléphone d'un fabricant populaire comme Samsung ou Motorola, donc si vous avez un smartphone chinois, vous êtes perplexe).

Ce n'est certes pas une solution efficace, mais comme je suis limité par le fait de ne pas pouvoir utiliser d'autre FS que fat32 sur mon iPod Classic ou mes smartphones Samsung avec une ROM stock, j'ai parcouru à peu près tout Internet dans le passé et je ne suis toujours pas en mesure de trouver une solution efficace à ce problème. Je vais peut-être même devoir l'écrire moi-même.

PS: J'ai oublié de mentionner que si vous êtes sous Windows, cela pourrait être le seul moyen de le faire.

RAKK
la source
Cela fait un moment que je n'ai pas rencontré ce problème. Je l'ai encore. Je l'ai aussi exactement pour la même raison que vous. Je me demande si vous pouvez mettre en place un processus qui a son propre système de fichiers personnalisé, honnêtement, j'aimerais essayer. Je sais que je peux le faire en nœud. J'ai réussi à amener l'interprète enraciné. Je ne sais pas si cela résout votre problème si je le faisais. Sur mon matériel, les galaxies Samsung, ça va. Dites-moi si vous souhaitez travailler ensemble sur quelque chose pour ce problème.
MageProspero
-1

Sous BSD, vous pouvez utiliser l'option union pour monter. Sous Linux, vous pouvez essayer l'unionFS.

julienlf
la source
2
Cela ne semble pas pertinent à distance. Avez-vous mal lu la question?
Gilles 'SO- arrête d'être méchant'