Montaje de múltiples archivos img como dispositivo de bucle único

19

¿Hay alguna manera de tomar un archivo img de disco que se divide en partes y montarlo como un dispositivo de bucle único?

MagoProspero
fuente
1
¿Cómo se rompe? Que formato es Puede haber algo de magia de fusibles para esto si es un formato especial, ¡pero sospecho que la respuesta es juntarlos!
Caleb
El formato del dispositivo me restringe a archivos con menos de 4 conciertos. Aunque tengo acceso de root al dispositivo. ¿Hay algo que pueda con LVM?
MageProspero

Respuestas:

16

No creo que pueda hacerlo en su lugar, pero si tiene suficiente espacio, esto debería funcionar:

# 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

No puede simplemente crear una matriz RAID a partir de los archivos originales porque los discos RAID tienen un encabezado específico donde se almacena la cantidad de discos, el nivel RAID, etc. Si lo hace, se sobrescribirá parte de sus archivos originales.

Puede usar el mdadm --buildpara crear una matriz sin metadatos, pero primero debería hacer una copia de seguridad. O si el montaje de solo lectura es suficiente:

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

¿Por qué quieres hacer esto? Si su sistema de archivos no puede manejar archivos> 4GB, debería cambiar a uno sensato.

Stribika
fuente
También podría hacerlo con el mapeador de dispositivos, pero lo anterior es más fácil.
Wodin
Perdón por tardar tanto en aceptar, muy buena respuesta. No haría esto en circunstancias normales, es más una pregunta de modo aventura.
MageProspero
2
Probablemente quiera usarlo en truncatelugar de hacerlo, ddya que es mucho más rápido (no realiza una escritura real en FS sino que solo asigna inodes y marca el archivo como que solo contiene un agujero).
Maciej Piechotka
Agradable. No lo sabia.
stribika
Por experiencia, si utiliza soluciones de sincronización o copia de seguridad basadas en la nube de gran capacidad como CrashPlan o Google Drive de pago, es una muy, muy buena idea usar archivos divididos pequeños en lugar de un solo archivo enorme. En el caso de una falla en la descarga del archivo, solo tendrá que volver a descargar, digamos, 1 GB en lugar de los 100 GB.
RAKK
3

Para montar una imagen de disco dividido (o una imagen de partición), debe usar affuselas afftools que actualmente se mantienen aquí: https://github.com/sshock/AFFLIBv3

Entonces, si tiene un archivo, divídalo en varios subarchivos 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

entonces puedes unirlos virtualmente con 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

(esto combina todos los archivos juntos comenzando con el archivo 000, luego 001, 002, ...)

Y luego montar la imagen

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

El uso se describe aquí y algunos ejemplos aquí . Una página de manual también está disponible después de compilar e instalar, o aquí .

PD: para mí affusesolo funcionaba si los archivos divididos tenían un tamaño que era un múltiplo de 512 bytes.

erik
fuente
44
Acabo de probar este método. Tiene una advertencia importante: solo le permitirá montar su imagen como solo lectura.
RAKK
Funciona muy bien siempre que solo tenga cientos y no miles de fragmentos de archivos. Podría ser mejor usar mdadm para crear una partición de banda lineal: unix.stackexchange.com/a/98779/22709
Jay Taylor
0

Lo más cercano que conozco hasta ahora a una solución es crear una VM VMware. Inicia un CD en vivo de Linux como Rescatux o Knoppix, crea una carpeta compartida SMB en su computadora host, monta ese recurso compartido SMB en su VM y luego coloca ddla imagen en el HD virtual. VMware guarda de manera predeterminada sus imágenes de disco como archivos divididos, por lo que esto es lo más parecido a leer directamente una imagen de disco dividida en múltiples archivos.

Más adelante, si desea acceder a los archivos desde su computadora host, puede intentar agregar un segundo HD virtual a la imagen y copiar los archivos allí. Luego configura una carpeta compartida SMB en la VM y se conecta desde su host. De esta manera, puede, por ejemplo, violar el límite de archivos de 4 GB de FAT32 en el caso de que esté usando un iPod Classic (que solo engorda fat32), o la tarjeta SD de su teléfono inteligente (generalmente tiene que instalar una ROM personalizada para para usar Ext3 o NTFS en el almacenamiento externo, para esto necesita un teléfono de un fabricante popular como Samsung o Motorola, por lo que si tiene un teléfono inteligente chino está perplejo).

Sin embargo, ciertamente no es una solución eficiente, pero dado que he estado limitado por no poder usar ningún FS que no sea fat32 en mi iPod Classic o mis teléfonos inteligentes Samsung con ROM de stock, he explorado casi todo el Internet en el pasado y todavía no puedo encontrar una solución eficiente para esto. Incluso podría tener que escribirlo yo mismo.

PD: Olvidé mencionar que si estás en Windows, esta podría ser la única forma de hacerlo.

RAKK
fuente
Ha pasado algún tiempo desde que visité este problema. Todavía lo tengo. También lo tengo exactamente la misma razón que tú. Me pregunto si puede abrir un proceso que tenga su propio sistema de archivos personalizado, sinceramente, me encantaría intentarlo. Sé que puedo hacerlo en el nodo. He tenido éxito al poner al intérprete enraizado. Sin embargo, no sé si esto resuelve tu problema si lo hice. En mi hardware Samsung Galaxy, está bien. Dime, ¿te gustaría trabajar juntos en algo para este problema?
MageProspero
-1

Bajo BSD puede usar la opción de unión para montar. En Linux puedes probar unionFS.

julienlf
fuente
2
Esto no parece remotamente relevante. ¿Has leído mal la pregunta?
Gilles 'SO- deja de ser malvado'