`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"

작동하지 않지만

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"

올바르게 작동합니다.

내가 뭘 잘못하고 있죠?


그것은 다른 방법입니다 - 최소한 Sierra에서 : 첫 번째 작품과 두 번째 작품은 그렇지 않습니다.
klanomath

@klanomath OS X 10.9.5
cave-canem


데이터라는 이름의 볼륨은 물론 존재해야합니다.
klanomath

답변:


0

볼 수있는 유일한 차이점은 다른 볼륨에 스파 스 번들을 만들려고한다는 것입니다. /Volume/test.sparsebundle은 시동 디스크에 있습니다. /Volume/Data/test.sparsebundle은 (아마도) 다른 디스크에 있습니다. 두 번째 드라이브에 어떤 종류의 파일 시스템이 있는지 확인하십시오.

-debug 옵션을 사용하여 두 명령 모두를 시도하고 결과를 비교할 수 있습니다.


/Volume/Data/test.sparsebundle은 Time Capsule에 sparsebundle입니다.
cave-canem

너도 같이 해봤 니? -debug 선택권?
mbamac

0

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"

내부 볼륨의 경우 "Macintosh HD"와 같은 볼륨 이름의 공백에 대한 해결 방법과 함께 작동합니다.

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$ 

네트워크 공유에 sparsebundle을 만드는 경우에는 작동하지 않습니다. 여기서 당신은 sudo 명령. 대신 (나는 $ 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"

아래의 답변을 참조하십시오.
cave-canem

@ cave-canem 업데이트 된 답변
klanomath

"bash"내장 도구를 사용할 수 있다면 "awk"를 사용할 필요가 없습니다. 최소한의 prntsipe에서. "Sudo"는 네트워크 공유와 함께 사용하면 안됩니다. "hdiutil -verbose"
cave-canem

-1

그래서 (hdiutil 전에 sudo없이) 작동합니다 :

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

네트워크 드라이브에 대한 권리 문제 :

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

공유 네트워크 자원에 "sudo"를 사용하지 마십시오!


내 대답을 강요하지 마라. 내 대답을 반복하는 대신 내 대답을 받아 들여야합니다.
klanomath
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.