Raspberry PiのmicroSDバックアップとリストア for Mac
はじめに
Raspberry Piであれこれ遊び始める前に、特に初期において、Raspberry Piの入ったmicroSDのイメージを自由にバックアップ・リストアする方法を確立しておくことは重要だ。
設定ミスでOSをぶっ壊しそうだし。microSDもいつ壊れるか分からないし。今後似たような構成のOSイメージを作る時にバックアップを活用して省力化できそうだし。
ということで、ここではMacを母艦とした、microSDバックアップとリストアの方法についてまとめてみた。
結論から言えば、バックアップとリストアの方法は以下のとおり。
- バックアップはddコマンドを利用
- リストアは以下のいずれか
- Etcherというソフトを利用(推奨)
- ddコマンドを利用
付記:ディスクユーティリティによるバックアップについて
Mac標準のツールであるディスクユーティリティによるmicroSDのバックアップ方法について記述されているページがあるが、結論から言えば、Raspberry Piのバックアップにおいては、これは上手く行かない。少なくとも自分の場合はダメだった。FAT部分だけしかバックアップされないためだと思われる。
準備
自分のMacにおいて、microSDがどのデバイス(/dev/diskN)にあたるかを確認することが必要だ。以下、その手順。
Terminalで以下のコマンドを実行する。
$ diskutil list
上記コマンドの実行結果から、microSDのデバイスを特定する。環境によって結果は異なる。サイズとパーティションの状況が判断基準か。たとえば、以下の場合は、/dev/disk4 がmicroSD(8GB)だ。
/dev/disk0 (internal): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 24.0 GB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_CoreStorage Macintosh HD 23.6 GB disk0s2 3: Apple_Boot Boot OS X 134.2 MB disk0s3 /dev/disk1 (internal, physical): (略) /dev/disk2 (internal, virtual): (略) /dev/disk3 (external, physical): (略) /dev/disk4 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *7.9 GB disk4 1: Windows_FAT_32 boot 43.5 MB disk4s1 2: Linux 7.9 GB disk4s2
バックアップ
現在のところ、バックアップはddコマンド利用一択。以下、その手順。
- Terminalを立ち上げる
- microSDのアンマウント
$ diskutil umountDisk /dev/diskN (Nは自分の環境に読み替えること) Unmount of all volumes on disk4 was successful
$ sudo dd if=/dev/diskN of=raspi-init.img bs=1m (Nは自分の環境に読み替えること)
- コマンドが終われば、バックアップも終了。microSDを抜いてお好きなように。
なお、このコマンドの終了までには相当時間がかかることを覚悟しておいたほうがよい。自分の環境では、8GBのバックアップで50分ほどかかった。
リストア
リストアの方法として以下、2通りの方法を紹介したい。
Etcherによるリストア
Etcher( https://etcher.io/ )をインストールした環境であれば、その利用を勧めたい。リストアの速度が後述のddに比べて、圧倒的に速いからだ。 このツールは、Raspberry PiのOSイメージをmicroSDに書き込むときにも便利なので、インストールしてもよいのではないか。難しいことは何もないが一応、以下手順を。
- Macにリストア先のmicroSDを挿す
- Etcherを起動し、"Select image"から、ddでバックアップしたイメージを選択する
- 真ん中で選択されたドライブがリストア先のmicroSDであることを確認し、"Flash!"ボタンを押下する。
- microSDへの書き込みが始まるので、待つ。
- microSDを取り外す前に、アンマウントすることをお忘れなく。
$ diskutil umountDisk /dev/diskN
Etcherによるリストアは、自分の環境では、8GBのmicroSDで15分程度で終了した。
ddコマンドによるリストア
ddコマンドによるリストアは時間がかかるが、おそらくどのMacでも追加アプリなしに利用できるという点において、メリットがあろう。以下、その手順。
$ diskutil umountDisk /dev/disk4 Unmount of all volumes on disk4 was successful
- ddコマンドでリストアを行う。 以下は、カレントディレクトリの raspi-init.img がddでバックアップされたファイルである場合。
$ sudo dd if=./raspi-init.img of=/dev/diskN bs=1m
ddコマンドによるリストアは、自分の環境では、8GBのmicroSDで50分程度かかった。
以上
Raspberry Pi Zero W スターターキット購入
秋葉原
千石電商で見かけた Raspeberry Pi Zero Wのスターターキットというのを、衝動買いした。
なにに使うためかって?
そんなのわからないから、衝動買いって言うんだよ!
ちなみにこれが、僕にとっては、初ラズパイだ。
キットについて
さてこのキット、お値段は、4,320円。同梱物は、以下のとおり(千石電商のページから引用)。
- Raspberry Pi Zero W 1.1 ×1
- Piケース Official for Pi Zero 赤/白
- HDMI mini アダプタ ×1
- USB OTG ケーブル ×1
- GPIO 2x20 ピンヘッダー ×1
- microSD 8GB OS書き込み済 ×1
- USB電源 2.0A ×1
- USB電源ケーブル 1m ×1
付属のmicroSDに既にOSが入っているため、USBキーボード、USBマウス、HDMIモニタの入力デバイス一式が最低限あれば、遊び始めることはできる。
ただし、有線LANには同梱されたものだけでは繋がらないので、注意すること。ネットには、無線LANでつなぐか、USBーLANのアダプタを別途購入して有線接続することになろう。
まぁ、このキットを買う以上、別の何かを買うよりは、WiFi利用を前提とするのが王道とは思うが。
電源周りのアダプタとケーブルも同梱されているが、MicroUSBで充電するデバイスの充電器も使える(ただし自己責任で!)。実際、僕もこれに同梱された充電器は(まだ)使っておらず、iPhoneとKindleの充電に使ってる5V出力のANKERの充電器を流用している(くどいようだけど、自己責任で)。
Anker PowerPort 2 Elite (24W 2ポート USB急速充電器)【折り畳み式プラグ搭載 / PowerIQ搭載 / 旅行に最適】(ホワイト)
- 出版社/メーカー: Anker
- メディア: エレクトロニクス
- この商品を含むブログを見る
用途
とまぁ、初心者に非常にやさしいこのキットなのだが、これを買った時点で、僕は決めた。
このRapberry Pi Zero Wを、ヘッドレス(headless)で設定する。
つまり、モニタ、キーボード、マウスを一切繋げることなく、microSDを読み書きできる母艦のMacから、自宅の無線LAN経由でRaspbian OSをインストール・設定するのだ。
理由はシンプル。僕がHDMIモニタを持っておらず、そんな邪魔なものを置く意思も場所もないから。
もっともそれを決意した時点で、このキットに付属しているHDMIケーブルとかは無駄になるし、OSがプリインストールされている必然性も無くなるので、結果的に割高なキットになってしまっていることは否めないのだけど、まぁそれは、よしとする。
続く
さて、このときはまだ、僕の前に伸びているのが茨の道であったとは気づいていなかった。その後、それなりに悪戦苦闘もしたことだし、別エントリでそのことを記録しておくこととしよう。
復活だなんて、いわないよ
おひさしぶり
ここのアクセス履歴をたまーに覗くと、こんなネットの辺境に捨ておかれて久しいブログに、未だに毎日100以上の訪問があることに驚くわけですよ。ま、その多くは、検索結果かなんか辿って迷い込んでしまったんだろうけど。
そんな訪問者各位からの見えない期待に応えるべく(「期待などハナからないから見えないのだ」との声はこの際無視して)、またここに何かを書きつけようと唐突に思ったこの休日。
エディタ買ってみた
でもね。俺ここのブログの何が嫌だったかって、はてなのオンラインエディタがごっつ使いにくかったことなんだよね。よくもこれで何年も続けてきたもんだ。
なもんで、せっかくまた何か書くんだったらオフラインで動くいいツールないかな、と検索してみた。そこで多くの方が勧めていたのが、MWebというMac用のマークダウンエディタ。白状するが、「マークダウンエディタ」という用語が一般化していることを知らんかった。ともあれ、これが今日現在で1,800円するんだけど、ポチってみた。
その使い心地については、まぁ、これから試していこう。はてなと連動させられる気はしないが、軽快な動きで書きやすく、プレビューが見やすいことから、かなりの好感触ではある。
何を書くか
さて、次はネタだ。問題はそこだ。書くことがない。普段、モノを考えるということをおよそしないもんで、何も思い浮かばねぇ。いま目をつぶって思い浮かぶのは、目の前に積み上がった仕事上の課題と、さっきネットで観た篠崎愛ちゃんの愛らしい姿くらいだ。ちなみに筆者は、圧倒的にぽっちゃり系支持派である。
近況
てなわけで、最近の近況でも。
昨年9月に、12年勤めた会社から転職した。*1これまでのキャリアとして、ITの開発とオペレーションとを8:2くらいの比率でやってきて、直近はインドのオフショアをマネージしながらのオペレーションに関わってきたけど、これでまた開発に戻った。開発者のみなさま、こんにちわ。なのに最新のIT動向に疎くて、お恥ずかしい。そのあたりの恥は、このブログでもさらけ出していくことになろう。これを続けられるならば、だけど。
折しもその転職先ではこの週末で6ヶ月、試用期間も無事終了。てことは、すぐクビになることはなさそうだ。色々あるけど、なんだかんだ言って楽しんでいるし、自らの選択で職場を変えたことは正解だったと思っている。
実際には転職よりも、転職に伴って横浜から千葉に引っ越したことのほうが、生活環境の変化への貢献度は高い。横浜では通勤1時間15分だったのが、いまや通勤電車とは無縁。QOL上がりまくり。なんだったんだ、世間的に人気なのに不便だったあの田園都市線沿線は。いや、人生の大半はそこで過ごしたので、愛着はあるけどさ。リフォームにさんざんお金をかけた家ともお別れしてしまったし。
最後に
復活だなんて、いわないよ。また絶対すぐに飽きることは、ここの歴史が示しているからな。
*1:唐突に思い出したのだけど、僕がこのブログを始めたのは13年前、前の会社に転職した直後のことだった。これがそうだ。
db2diagをcronから呼ぶときの注意
コマンドラインでdb2diagを呼ぶと問題なく動作するのに、cronから呼ぶと動作しないという問題だ。
昔の自分は確かに分かっていたのだが、すっかり忘れてた。同じことで悩む人がいないように、メモしておこう。
注意すべきは、2点。
- db2profileを最初に読み込ませるのを忘れるな
- db2diagの-readfileオプションを忘れるな
一つ目は、db2diagに限らない、db2スクリプトでのお約束。以下がbashでの例。
if [ -f ${HOME}/sqllib/db2profile ]; then
. ${HOME}/sqllib/db2profile
fi
二つ目は、コマンドラインから呼ぶときは不要だからわかりにくい。マニュアルでのこのオプションの説明を一部引用すると
This option can be used in scripts to guarantee that db2diag will read from a file and not from a terminal, especially in situations when stdin is disabled or when automated tools are used.
ってことだ。
追記:いま見たら、最後のDB2関連投稿はなんと、9年前!あれからいろんなことがあったなぁ(遠い目
JavaScriptで指定タイムゾーンの時刻を得る
一瞬ハマったので、メモ。
JavaScriptのDateオブジェクトで、UTCともローカルとも違うタイムゾーンで現在時刻を表示させる方法。
まずは結論から先に。こうしたらいい。
var timezoneoffset = -9 // UTC-表示したいタイムゾーン(単位:hour)。JSTなら-9
var fakeUTC = new Date(Date.now() - (timezoneoffset * 60 - new Date().getTimezoneOffset()) * 60000);
// fakeUTCに対して、getFullYear(), getMonth(), getDate(), getHours(), getMinutes(), getSeconds()を使えば、timezoneoffsetで指定したタイムゾーンで時刻取得ができる。以下は利用例。
var year = fakeUTC.getFullYear();var month = fakeUTC.getMonth();
var date = fakeUTC.getDate();
var hour = fakeUTC.getHours();
var min = fakeUTC.getMinutes();
var second = fakeUTC.getSeconds();
そもそもなんでこんな面倒なことをしなければならないかというと、DateオブジェクトがUTCまたはローカルタイムしか扱えないからだ。そのため、たとえばインドのPCで実行したときにJSTで時刻表示させるということが、そのままでは出来ない。
上で示したハックは、これを解決するために、Dateインスタンスのもつ値を UTC-(ローカルのタイムゾーン-取得したいタイムゾーン) にセットすることで、getDate() 等の戻り値を取得したいタイムゾーンにするというものだ。
どうやって絵を描くのだ@Mac
突然ですが、僕は遅れてやってきたマカーです。
Windowsでずっと仕事してましたが(そして今もしてますが)、Windows憎さのあまりMacに転んで、その画面の美しさにもうクソWinには戻れねー、とか思ってる輩です。
そんな僕がさっき、Macで画面をキャプチャしてブログを書こうと思ったときにはたと気づいたのが
あれ?どうやってスクリーンショットに図形を描いたらいいんだ?
ってことでした。*1
WindowsでいうところのMicrosoft Paintみたいに、金を払わずに済む、直感的に使えるシンプルで軽いソフトはどこかいな、と。
んで検索すること5分、見つけたのがこれ。
学習時間ほぼゼロで利用できるこのインタフェース、素敵です。
要らぬサービス精神を発揮して慣れぬマウスで落書きしてしまったのは、やりすぎだったか・・・まぁいいや。
これ、僕みたいに、「本格的なツールはいらんけど、ちょっと線とか引きたい」とか思ってる人間にはオススメかな、と。今回はそういう話でした。
*1:ついでにいうと画面キャプチャのショートカット(shift+command+4)も、今回覚えた。
iTunesで複数CDを一つのアルバムにまとめる方法
複数枚のCDからなるアルバムをiTunesに取り込むとき、どうしてます?
もしあなたが、不本意にも、iTunesのアルバムをCD別に "タイトル [Disc 1]" とかネーミングしているのであれば、この記事はあなたのためのものです。
何を言っているのかというか、以下のように2つ以上にわかれたアルバムを・・・
以下のように、ひとつにまとめる方法をご説明しましょう・・・ってことです。
以下、その方法。
ディスク番号の設定
iTunesのアルバムビューから、まずは統合したいアルバムひとつひとつに、ディスク番号を設定します。もしかしたら、もうすでに設定されているかもしれませんね。その場合でも、以下のやり方で確認しましょう。
アルバムを右クリックして、「情報を見る」を選択します。
統合したいアルバムの全ディスク数と、設定中のアルバムのディスク数を設定します。
全2枚のアルバムの1枚目であれば、1/2 です。
設定したら、「OK」を押してこのダイアログを閉じましょう。
同様に、2枚目以降のアルバムのディスク番号も「情報を見る」メニューから、設定します。以下は、2枚目の例。
アルバム名の設定+α
ディスク番号を設定したら、今度は iTunesのアルバムビューに戻って、統合したいアルバムを全部選択します。その状態で右クリックして、「情報を見る」へ。
まずは「詳細」タブで、統合したあとのアルバム名を設定します。以下のように。
通常は、"[Disc 1]"の部分を除いた名前にしたいのではないかな。
さて、ここが唯一のコツ。最初、僕が気づかなかったところ。
「読みがな」タブへ行って、「アルバムアーティスト」にアーティスト名を入れてください。
僕の場合は、ここが空欄だった場合がほとんどですが、ここにすでに値が入っている場合、「読み」のところに、アルバムアーティストと同じ値を入れてください。
入れたら、「OK」ボタンを押下。
するとあら不思議(でもないか)、アルバムが統合されて、なおかつ、ディスク別に曲が表示されるではないですか!
僕も嬉しくなって、年末年始休暇の最後の一日の多くを、この統合作業に努めてしまいましたよ・・・
つうわけで、これがどなたかのお役に立ちましたら幸いです。