0 votos

Comportamiento extraño de `hdiutil`

declare -i s=${foo}; n=${bar}; mp=${baz}; cn=${qux}; mac_adr=${quux} 
sudo hdiutil create -size ${s}b -fs JHFS+X -volname "${n}" -type SPARSEBUNDLE \
"/Volumes/${mp}/${cn}_${mac_addr}.sparsebundle" && echo "Done"

no funciona, pero

 declare -i s=${foo}; n=${bar}; mp=${baz}; cn=${qux}; mac_adr=${quux} 
sudo hdiutil create -size ${s}b -fs JHFS+X -volname "${n}" -type SPARSEBUNDLE \
"/Volumes/${cn}_${mac_addr}.sparsebundle" &&
sudo mv -vn "/Volumes/${cn}_${mac_addr}.sparsebundle" "/Volumes/${mp}" && echo "Done"

Funciona correctamente

¿Qué estoy haciendo mal?

0voto

klanomath Puntos 19587

Usé el siguiente comando en 10.9.5:

 read -p "Size in GB? = " s; ((s= 10**9*s/512)); read -p "Name of image volume? = " n; read -p "External Volume name (Escape spaces with a backslash - the volume has to exist)? = " m; cn=`scutil --get ComputerName`; mac_addr=`ifconfig en0 | grep "ether"`; mac_addr=${mac_addr#*ether}; mac_addr=${mac_addr// /} ; mac_addr=${mac_addr//:/}; sudo hdiutil create -size ${s}b -fs JHFS+X -volname "${n}" -type SPARSEBUNDLE "/Volumes/${m}/${cn}_${mac_addr}.sparsebundle" && echo "Done"

y funciona (con una solución alternativa para espacios en nombres de volumen como "Macintosh HD") para volúmenes internos:

 Size in GB? = 2
Name of image volume? = aaa
Existing External Volume Name (Escape spaces with a backslash)? = test\ 2
created: /Volumes/test 2/host_001122334455.sparsebundle
Done
host:~ user$ 

Esto no funciona si crea un paquete disperso en un recurso compartido de red. Aquí no debe utilizar el comando sudo En su lugar, use (también simplifiqué $ mac_addr):

 read -p "Size in GB? = " s; ((s= 10**9*s/512)); read -p "Name of image volume? = " n; read -p "External Volume name (Escape spaces with a backslash - the volume has to exist)? = " m; cn=`scutil --get ComputerName`; mac_addr=`ifconfig en0 | grep ether | awk '{print $2}' | sed 's/://g'`; hdiutil create -size ${s}b -fs JHFS+X -volname "${n}" -type SPARSEBUNDLE "/Volumes/${m}/${cn}_${mac_addr}.sparsebundle" && echo "Done"

0voto

Blamdarot Puntos 1517

La única diferencia que puedo ver es que está intentando crear un paquete disperso en diferentes volúmenes. /Volume/test.sparsebundle se ubicará en su disco de inicio. /Volume/Data/test.sparsebundle se ubicará (probablemente) en otro disco. Intente comprobar qué tipo de sistema de archivos hay en su segunda unidad.

Puede probar su problema con ambos comandos con la opción -debug y comparar el resultado.

-1voto

NoseKnowsAll Puntos 573

Entonces (sin sudo antes de hdiutil) funciona:

 clear; read -p "    GB? = " s; ((s= 10**9*s/512)); read -p "  ? = " n; cn=`scutil --get ComputerName`; mac_addr=`ifconfig en0 | grep "ether"`; mac_addr=${mac_addr#*ether}; mac_addr=${mac_addr// /}; mac_addr=${mac_addr//:/}; read -p "  = " mp; hdiutil create -size ${s}b -fs JHFS+X -volname "${n}" -type SPARSEBUNDLE "/Volumes/${mp}/${cn}_${mac_addr}.sparsebundle" && echo "Done"

    GB? = 10
  ? = rrr
  = Data
created: /Volumes/Data/Air_60c54700b918.sparsebundle
Done

La cuestión de los derechos en la unidad de red:

 hdiutil - verbose
DIDiskImageCreateWithCFURL: creator returned 0  
::getBandEntry: chown() - 501  
ompletion...  

DIHLDiskImageCreate() returned 1    
hdiutil: create: returning 1  
hdiutil: create failed - operation is not permitted
this file is created, but then the operation fails, before he makes the format:  
DIDiskImageCreateWithCFURL: creator returned 0  
DI_kextWaitQuiet: about to call IOServiceWaitQuiet...  
DI_kextWaitQuiet: IOServiceWaitQuiet took 0.000011 seconds  
Formatting ...
Completing ...
created: /Volumes/Data/Air_60c22700b922.sparsebundle

¡No use "sudo" para los recursos de red compartidos!

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