自宅では、6 台目の Raspberry Pi。位置づけは、予備機、兼、テスト機。まぁ、やっと手に入れたお遊びマシーンとも言えます(笑)。
今まで、3 台の Model 3B と 2 台の Model 3B+ を使ってきたわけですが、それぞれ最初から使用目的を定めて導入したものばかりなので、ヘタにいじってトラブると、ネットワークや生活そのものに支障がでる感じで、あまり大胆なことできないし、新たな機能導入にも慎重にならざるを得なかったです。一方で、万が一、ハード的なトラブルが起こった場合のことも心配になってきたので、ストック的な意味も兼ねて、テスト機の導入となりました。
こちらの既製のケースも、初めての購入です。机上で遊び道具になることを、最初から想定していました(笑)。
で、とりあえず、やってみたかったこと … っていうか、浮いたハードディスクドライブがある今しかできないということで、ハードディスクからの起動テストです。ちなみに、このハードディスクドライブは、別途、使用予定が控えてます。ジャンクかなにかで、もっと小容量のお遊び専用ドライブを探してきてもいいんですが、とりあえず、現在、使えるものでということで。
安直な方法その 1 … 配布されているインストールイメージを直接ハードディスクに書き込んでみた
Raspberry Pi の公式サイト(Raspbian ダウンロード)からダウンロードした Raspbian Strech with Desktop のインストールイメージですが、普通は、micro SD カードに書き込みますよね。これ、そのままハードディスクに書き込むだけじゃダメなんだろうか? という、率直な疑問から、とりあえず、やってみました。ハードディスクドライブには、SATA - USB の変換ケーブルを付けてあるので、基本的に、やろうとしていることは、micro SD カードに USB の変換アダプターを付けたのと、同じです。
ただ、普通、これ、PC から書き込むことが多いかと思うのですが、Windows PC の場合、誤操作防止を考えているのかなにか、直接、ハードディスクにインストールイメージを書き込めるアプリケーションソフトが見つからなかった、というか、探すのも面倒くさかったので、別の Raspberry Pi マシーンから dd コマンドを使って書き込みました。
pi@raspberrypi-001:~ $ sudo dd if=<パス>/2018-11-13-raspbian-stretch-full.img of=<出力デバイス>
みたいな感じかな(赤が入力部分)。もちろん、<パス> や <出力デバイス> の部分は、環境によって変わります。dd コマンドの常として、指定を間違えると取り返しのつかないことになることがあるので、行う場合は、ご自身の環境に合わせて、くれぐれもお間違いのないように、ご注意くださいね。
結果 … 起動はしました(構成によっては起動しないケースもあると思われます … 対応方法は後述)。ただ、初回起動時の設定プロセス中に、落ちました。どこで落ちたかと言えば、おそらく、root パーティションの拡張を行っている部分です。落ちた理由は、その部分がハードディスクに対応していないのか、そもそも、ディスク容量最大にすると、MBR 方式のパーティションテーブルでは対応できないって問題なのか、よくわかんないですが、とりあえず、4TB のハードディスクでは、無理があったようです。MBR 方式が対応できる 2TB 以下のハードディスクドライブがあったら、別途試してみたい気もします。
で、パーティションの拡張だけなら、fdisk などを使って、手動でもできるわけですが、どうも、設定プロセスが途中で止まってしまった関係で、いろいろな部分が未設定のままです。日本語の IME とかも、設定されていないままの状態です。地道に設定すれば、使えるとは思うのですが、使えるようにするのが目的でもないので、とりあえず、このやり方は、打ち切りとします。
判明したこと … コールド状態からは起動するがホットからの再起動はできない
これ、おそらく、使っているハードディスクドライブや、SATA - USB 変換ケーブルによって、現象が変わるんじゃないかと思います。構成によっては、どちらも問題なくできることもあると思いますし、場合によっては、どちらも不可能なケースもあるかと思われます。現象を見ると明らかなんですが、単純に、ハードディスクのスピンアップが間に合っていないだけのようです。
これの対応方法としては、
Raspberry Pi の公式サイト(Boot flow)にありました。以下の一行を /boot/config.txt に書き加えます。これによって、起動時の USB のタイムアウトが伸びるようです。
program_usb_boot_mode=1
※(2019/07/02 追記・訂正)--------
申し訳ありません、記事を書いているときにコピペする場所を間違えたみたいで、正しくは、下記の内容です。訂正させていただきます。
program_usb_boot_timeout=1
なお、この設定をすると、ターミナルより、下記、赤字のように入力したときに、
pi@raspberrypi-001:~ $vcgencmd otp_dump | grep 66:
66:03009eaa
結果の赤字反転で表した部分(下から 7 桁目)が奇数になるようです(
OTP register and bit definitions)。
-------- 追記・訂正、以上。
ただし、これ、起動しなきゃ config.txt も読み込まれないので、意味がないです。これが書き込まれた状態で起動シーケンスを通過することにより、Raspberry Pi のハードウェアの設定が変わるということのようです。私の場合は、コールドスタートはできたので、一度、それで起動した後は、ホットでの再起動もできるようになりました。コールドスタートも不可能の場合は、一度、micro SD からの起動環境を作って、上記内容を micro SD 内の /boot/config.txt に加えて(再)起動を行えばいいのではないかと思います。
ただ、あくまでもタイミングの問題なので、これでどこまで対応できるのかはわからないですが。
安直な方法その 2 … micro SD からハードディスクにまるっとコピー
先のやりかたで、とりあえず、micro SD の内容そのままでもハードディスクから起動できることは確認できたので、だったら、とりあえず、一度、micro SD にごく普通にインストール、設定した上で、その micro SD をまるっとハードディスクにコピーすればいいんじゃないかと。
とりあえず、micro SD に普通にインストールして起動できる環境を作り、上記、config.txt の変更も行い、再起動した上で、USB にハードディスクを接続し、以下のようにしてみました(赤が入力部分)。
pi@raspberrypi-000:~ $ sudo dd if=/dev/mmcblk0 of=<出力デバイス> bs=4096 status=progress
30931685376 bytes (31 GB, 29 GiB) copied, 1394 s, 22.2 MB/s
7557120+0 レコード入力
7557120+0 レコード出力
30953963520 bytes (31 GB, 29 GiB) copied, 1396.56 s, 22.2 MB/s
コピーが完了したら、シャットダウンし、micro SD を除去した上で、改めて起動します。
みごと成功でした。冒頭の写真です。UnixBench 実行中。
以前の記事にも書いたのですが、Raspberry Pi も、ハードディスク上にある程度の大きさの swap ファイルを設定すると、快適さが格段に向上します。上記方法でハードディスクから起動できるようにすれば、swap ファイルの設定もそのままハードディスクに移ります。簡単、快適なインストール方法はないものかと考えて、こんな方法となりました。
ハードディスクのパーティションについて
お気づきの方も多いとは思いますが、ここまでの状態だと、micro SD カードの内容をまるっとハードディスクにコピーしただけなので、以下の問題が残っています。
- パーティションテーブルが MBR である(512 バイトセクターの場合、2TB を超える容量が扱えない)。
- パーティションのサイズが micro SD のままである。
まず、パーティションテーブルの方ですが、一か八か GPT に変更してみたのですが、やっぱり、起動しなくなりました(笑)。現時点だと、起動できるのは、MBR だけのように見受けられます。ただ、ここについては、公式なドキュメントは見つけられていないのと、ハイブリッド MBR なんて方法もあるようなので、本格的に使う場合なら、調査が必要かと思います。
パーティションサイズの方は、「安直な方法その 1」の方で普通に fdisk とresize2fs でできるのは確認してますが、ま、とりあえず 32GB あるんで、テスト環境としては、このままでいいかな、と … ジャンクかなにかの容量の小さいハードディスクドライブが入手できたら、再び、まるっとコピーしようかという気もしているので、現時点で拡張しちゃわない方が都合がいい、っていうのもあります。
コメント
コメントを投稿