Extraño comportamiento de 'hdiutil'

0
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?

    
pregunta cave-canem 17.10.2016 - 03:48

3 respuestas

-1

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 uses "sudo" para los recursos de red compartidos!

    
respondido por el cave-canem 17.10.2016 - 11:22
0

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

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

    
respondido por el mbamac 17.10.2016 - 13:20
0

Utilicé 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 volúmenes 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 creas un sparsebundle en un recurso compartido de red. Aquí no debes usar 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"
    
respondido por el klanomath 17.10.2016 - 07:09

Lea otras preguntas en las etiquetas