Saturday, March 23, 2013

意外とめんどいmac OSXでのddコマンド

使う人はよく使う、dd commandですが、mac OSXにも標準搭載されています。
しかし、/dev/以下とか、mountの仕組みがLinuxと異なるので、注意点(1)(2)を書いてみます。

!!注意!!
ddコマンドは間違えると起動不能に陥ったりします。
用法、用量を守って、正しくお使い下さい。
!!!!!!!!!

(1) /dev/disk#がディスク(#には0以上の数値が入ります)
 Terminal (ターミナル)を開いて、以下コマンドをしてみましょう。
 
 ls /dev/disk*

 するとこんなんが出ると思います。
 /dev/disk0 /dev/disk0s1 /dev/disk0s2 /dev/disk0s3
 僕の環境はmacbook airで元々搭載しているディスクはSSD 1個で、
 それが/dev/disk0。
 /dev/disk0上の論理パーティションが/dev/disk0s1、/dev/disk0s2 、/dev/disk0s3と3個あります。
 まあ、ddコマンドを知っている人には説明不要ですね。
 Linuxでは/dev/sd* (*はa, b, c...)なのに、macだと/dev/disk*になるわけです。

 では、例えばUSBメモリにddコマンドでイメージを書き込みたい場合を考えます。
 USBメモリを刺して、もう一度ls /dev/disk*してみましょう。
 するとこうなるかと。
 /dev/disk0   /dev/disk0s1  /dev/disk0s2  /dev/disk0s3  /dev/disk1   /dev/disk1s1

 ハイ、これでUSBメモリが/dev/disk1として認識されることがわかりました。
 (macの環境に依って違うので、必ず上記確認をしてください)

(2)macの「外す」はumountとデバイス外しを両方やっちゃう
 terminalで

 df

 とコマンドしますと、現在マウントされているディスクが見えます。
Filesystem    512-blocks     Used Available Capacity  iused   ifree %iused  Mounted on
/dev/disk0s2   116809872 91340152  24957720    79% 11481517 3119715   79%   /
devfs                367      367         0   100%      636       0  100%   /dev
map -hosts             0        0         0   100%        0       0  100%   /net
map auto_home          0        0         0   100%        0       0  100%   /home
/dev/disk1s1    15052032     3616  15048416     1%        0       0  100%   /Volumes/UNTITLED 1
 
 /dev/disk1s1が/Volumes/UNTITLED 1としてマウントされているのがわかりますね。
 この状態ですと、ddコマンドでエラーになるので、アンマウントします。
 
 ここで、よっしゃアンマウントね、と、
 Finderで表示される取り出しボタンや(下図)...

 同様にFinderで右クリックして出てくる「eject」「取り出し」をしてはいけません。
 
 試しにやってみて頂いてもいいですが、これをやると
 /dev/disk1としての認識も外されてしまいます。

 僕らが欲しいのは、
 ・ls /dev/disk*をすると/dev/disk1 、/dev/disk1s1 が出て来て
 ・dfしても/dev/disk1s1がマウントされていない状態
 です。

 長くなってしまいましたが、
 正解はまず、dfコマンドで(上記)USBメモリの/dev/disk1s1がマウントされているデイxレクトリを見つけます。
 今回の場合は/Volumes/UNTITLED 1 ですね。
 でumountコマンドに-fvオプションを付けてアンマウントをします。
 
 umount -fv /Volumes/UNTITLED\ 1/
 (スペース等特殊文字の前にはバックスラッシュ(環境により¥)が入ります)


さあさあ、上記(1)(2)が終われば、いつものddコマンドが戻ってきます。
例として以前のポストに書いた、Chromium OSのイメージをUSBメモリに焼いてみましょうか。
Chromium OSのイメージは/Users/casey/Downloadsに置いてあります。

sudo dd if=/Users/casey/Downloads/ChromeOS-Vanilla-3887.0.2013_03_21_1643-r67d9ef1a.img of=/dev/disk1
(sudo実行です。ユーザパスワードの入力要)

イメージの書き込みは思いのほか時間がかかりますので、コマンドが終了するまで気長に待ちましょう。

1 comment:

yuu shiuchi said...

いい記事をありがとうございます!
助かりました。
が、

一点できない動作がありました。
umount -fv ***

ですが、
operation not permitted
と返されて実行できず。

調べてみたら、
diskutil unmount ***
で可能でした。

セキュリティの関係でしょうか?

OS X 10.10.5
Macbook Pro
にて。