0 votos

Cómo desmontar correctamente la imagen (dmg / sparsebundle)

[MacOS Mojave 10.14.6]

Recientemente he descubierto las imágenes de disco r/w y el particularmente fascinante sparse bundle.

Según tengo entendido, una imagen (el propio .dmg o .sparsebundle) se "conecta" y se "desconecta" de la misma manera que un disco externo, por ejemplo, se "conecta" o "desconecta". Los volúmenes contenidos en cualquiera de los dos casos estarían "montados" y "desmontados". Pero aquí está el problema:

caffeinatedbits ~$ hdiutil create -size 1g -layout GPTSPUD -fs APFS -volname temp -type SPARSEBUNDLE -nospotlight -encryption AES-256 temp.sparsebundle
Enter a new password to secure "temp.sparsebundle": 
Re-enter new password: 
created: /Users/caffeinatedbits/temp.sparsebundle
caffeinatedbits ~$ 
caffeinatedbits ~$ hdiutil attach temp.sparsebundle -mountroot .
Enter password to access "temp.sparsebundle": 
/dev/disk8              GUID_partition_scheme           
/dev/disk8s1            Apple_APFS                      
/dev/disk9              EF57347C-0000-11AA-AA11-0030654 
/dev/disk9s1            41504653-0000-11AA-AA11-0030654 /Users/caffeinatedbits/temp

Aquí observé que al adjuntar la imagen aparentemente se monta automáticamente el volumen. Genial.

Me imagino que tal vez haría lo mismo a la inversa, pero al intentar separar la imagen, sólo expulsa el volumen:

caffeinatedbits ~$ hdiutil detach temp
"disk9" ejected.
caffeinatedbits ~$ diskutil list | grep disk8
/dev/disk8 (disk image):
   0:      GUID_partition_scheme                        +1.1 GB     disk8
   1:                 Apple_APFS Container disk9         1.1 GB     disk8s1
                                 Physical Store disk8s1

La imagen propiamente dicha (/dev/disk8) permanece unida y debe separarse del volumen propiamente dicho (antes /dev/disk9s1).

En este punto, empecé a preguntarme si es seguro hacer un rsync/copia de seguridad de la imagen ya que todavía está conectada. ¿O eso podría causar corrupción? Así que quise averiguar cómo separar completamente la imagen...

caffeinatedbits ~$ hdiutil detach disk8
"disk8" ejected.

Entonces me pregunté si podría haber hecho eso desde el principio. Resulta que puedo...

caffeinatedbits ~$ hdiutil attach temp.sparsebundle -mountroot .
Enter password to access "temp.sparsebundle": 
/dev/disk8              GUID_partition_scheme           
/dev/disk8s1            Apple_APFS                      
/dev/disk9              EF57347C-0000-11AA-AA11-0030654 
/dev/disk9s1            41504653-0000-11AA-AA11-0030654 /Users/caffeinatedbits/temp
caffeinatedbits ~$ hdiutil detach disk8
"disk8" ejected.

Pero entonces me pregunté si se podría dañar el volumen al no haber sido desmontado primero. ¿Debo desmontar el volumen primero, o la separación de la imagen (disco8) lo hace automáticamente?

caffeinatedbits ~$ hdiutil attach temp.sparsebundle -mountroot .
Enter password to access "temp.sparsebundle": 
/dev/disk8              GUID_partition_scheme           
/dev/disk8s1            Apple_APFS                      
/dev/disk9              EF57347C-0000-11AA-AA11-0030654 
/dev/disk9s1            41504653-0000-11AA-AA11-0030654 /Users/caffeinatedbits/temp
caffeinatedbits ~$ umount disk9s1
caffeinatedbits ~$ hdiutil detach disk8
"disk8" ejected.

¿Alguien sabe por qué llamar a hdiutil detach <mountpoint> no desprende la imagen? Me imagino que es porque sólo el volumen (disk9s1) está montado en ese punto de montaje y sólo se detiene allí.

Una vez desprendido, estoy usando rsync -ai --inplace image.sparsebundle -e ssh u@x.x.x.x::share/ para hacer una copia de seguridad de la imagen en mi NAS. Según tengo entendido, es una muy mala idea hacer esto mientras el volumen sigue montado, pero ¿qué pasa con la imagen en sí misma que permanece conectada? ¿Importa?

¿Cuál es la forma correcta de hacerlo para asegurarme de no corromper mis imágenes?

Actualización @ Gordon Davisson

caffeinatedbits ~$ hdiutil attach temp.sparsebundle -mountroot .
Enter password to access "temp.sparsebundle": 
/dev/disk8              GUID_partition_scheme           
/dev/disk8s1            Apple_APFS                      
/dev/disk9              EF57347C-0000-11AA-AA11-0030654 
/dev/disk9s1            41504653-0000-11AA-AA11-0030654 /Users/caffeinatedbits/temp
caffeinatedbits ~$ cd temp
caffeinatedbits temp$ hdiutil detach disk8
hdiutil: couln't unmount "disk8" - Resource busy
caffeinatedbits temp$ cd ..
caffeinatedbits ~$ hdiutil detach disk8
"disk8" ejected.

Basándome en tu comentario, supongo que esto muestra que el volumen se desmonta al separar la imagen padre.

1voto

rybosome Puntos 1829

El man página para hdiutil(1) estados

 detach dev_name [-force]
            detach a disk image and terminate any associated process.  dev_name is a partial /dev node path (e.g. "disk1").  As of Mac OS X 10.4, dev_name can also be a mount-
            point.  If Disk Arbitration is running, detach will use it to unmount any filesystems and detach the image.  If not, detach will attempt to unmount any filesystems
            and detach the image directly (using the `eject' ioctl).  If Disk Arbitration is not running, it may be necessary to unmount the filesystems with umount(8) before
            detaching the image.  eject is a synonym for detach.  In common operation, detach is very similar to diskutil(8)'s eject.

Así que la forma recomendada para separar sería simplemente pasar el punto de montaje. He probado esto en Catalina y me funciona. Aquí está la transcripción:

1. Creación de la imagen y revisión del volumen automontado

% cd ~/Desktop 

% hdiutil create -size 1m -layout GPTSPUD -fs APFS -volname temp -type SPARSEBUNDLE -nospotlight -encryption AES-256 temp.sparsebundle
Enter a new password to secure "temp.sparsebundle": 
Re-enter new password: 
created: /Users/pion/Desktop/temp.sparsebundle

% mount
[...]
/dev/disk5s1 on /Volumes/temp (apfs, local, nodev, nosuid, journaled, noowners, mounted by pion)

% diskutil list
[...]
/dev/disk4 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +1.0 MB     disk4
   1:                 Apple_APFS Container disk5         1.0 MB     disk4s1
/dev/disk5 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +1.0 MB     disk5
                                 Physical Store disk4s1
   1:                APFS Volume temp                    41.0 KB    disk5s1

2. Desmontar el volumen montado automáticamente

% hdiutil detach /Volumes/temp 
"disk4" ejected.

% mount
[...]

% diskutil list               
[...]

3. Montaje en el escritorio mountroot

% hdiutil attach -mountroot . temp.sparsebundle
Enter password to access "temp.sparsebundle": 
/dev/disk4              GUID_partition_scheme           
/dev/disk4s1            Apple_APFS                      
/dev/disk5              EF57347C-0000-11AA-AA11-0030654 
/dev/disk5s1            41504653-0000-11AA-AA11-0030654 /Users/pion/Desktop/temp

% mount
[...]
/dev/disk5s1 on /Users/pion/Desktop/temp (apfs, local, nodev, nosuid, journaled, noowners, mounted by pion)

% diskutil list
[...]
/dev/disk4 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +1.0 MB     disk4
   1:                 Apple_APFS Container disk5         1.0 MB     disk4s1

/dev/disk5 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +1.0 MB     disk5
                                 Physical Store disk4s1
   1:                APFS Volume temp                    24.6 KB    disk5s1

4. Desmontaje desde el Desktop mountroot

% hdiutil detach temp
"disk4" ejected.

% mount
[...]

% diskutil list
[...]

Por cierto, si tienes curiosidad por saber por qué se obtiene tanto un disk8 y disk9 en lugar de sólo disk8 es porque estás usando APFS. disk8 es el nuevo disco que acabas de crear (como imagen de disco) y montar. disk8s1 es su primera (y única) partición, formateada como APFS. La forma en que APFS funciona es creando su propio contenedor que cubre toda una partición y luego lo monta como un disco virtual separado ( disk9 ) que puede tener su propia partición virtual ( disk9s1 ).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X