Strano comportamento di '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"

non funziona, ma

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"

Funziona correttamente

Che cosa sto sbagliando?

    
posta cave-canem 17.10.2016 - 03:48
fonte

3 risposte

-1

Quindi (senza sudo prima di hdiutil) funziona:

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 questione dei diritti sull'unità di rete:

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

Non utilizzare "sudo" per le risorse di rete condivise!

    
risposta data 17.10.2016 - 11:22
fonte
0

L'unica differenza che posso vedere è che stai cercando di creare pacchetti sparsi su volumi diversi. /Volume/test.sparsebundle si troverà sul disco di avvio. /Volume/Data/test.sparsebundle si troverà (probabilmente) su un altro disco. Si prega di provare a controllare che tipo di filesystem si trova sulla seconda unità.

Puoi provare il tuo problema con entrambi i comandi con l'opzione -debug e confrontare i risultati.

    
risposta data 17.10.2016 - 13:20
fonte
0

Ho usato il seguente comando in 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"

e funziona (con una soluzione alternativa per gli spazi nei nomi di volume come "Macintosh HD") per i volumi interni:

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$ 

Questo non funziona se si crea uno sparsebundle su una condivisione di rete. Qui non devi usare il comando sudo . Usa invece (ho anche semplificato $ 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"
    
risposta data 17.10.2016 - 07:09
fonte

Leggi altre domande sui tag