開発者でも何でもない素人によるサイト

Raspberry Piの外付けHDD(SSD)起動化!

  • このエントリーをはてなブックマークに追加

今回はRaspberry Piで最も壊れやすいmicroSDから外付けHDD(SSD)にシステム(ルートファイルシステム)を移します。

MicroSDのままで良い場合は飛ばしてください。

【追記】Raspberry Pi用Ubuntu Serverの公式イメージを使って同じく外付けSSD起動化をしています。 こちらのほうが手順が少なく、良いかもしれません(Raspbianの場合fstabの編集は行ってください)。

microSDの壊れやすさを回避

MicroSDはメモリ素子に書き換え上限があるので、何度も書き込んでは消して、を繰り返しているとあっという間に壊れてしまうそうです。

特にrootパーティションがデフォルトでMicroSDカードのRaspberryPiではこれが致命的な問題になります。

それに比べると、HDDは書き換え上限はありません。上限が無い上に、容量単価も圧倒的に安いです(ただし耐久性に問題がある機種もある)。

また、一般的なSSDも書き換え上限があるのはMicroSDと同じですが、MicroSDと比べたら遥かに持ちが良いはずです。

外付けストレージの選択

USB接続であれば、基本的にどんなストレージでもOKです。

ただし、バスパワーでHDDを動かすのは少し不安定かもしれません。その場合、改造して本体の電源を強化するか、セルフパワーのHDDケースに入れて使うほうがベターだと思います。

僕は余り物で出来るだけ安く済ませたいので、

で今のところ済ませています。

このmSATA SSDはもともとノートPCにキャッシュ用として搭載されていたものなので、耐久性はあるはず…と思って使っています。まあどうせ余り物なので壊れても構いません。

SSDも最近はかなり安くなって来ているので、2.5インチSSDを新たに買うのもありかもしれません。

電力を必要とするHDDに比べ、バスパワーでも安定して動くはずです。

手順の概略

いよいよ外付けHDD起動化を実行したいと思います。

外付けドライブ起動とは言っても、bootパーティションはmicroSDに残す必要があり、完全に外付けドライブ起動化というわけにはいきませんが、とはいえ、MicroSDはかなり小容量なもので済みます。

ちなみにbootパーティションはデフォルトで100MBくらいのパーティションなので、家のどこかで眠っている2GBとかのmicroSDを活用することが可能です。

以下便宜上外付けHDDと書きますが、SSDでもUSBメモリでも、USBで接続するストレージであれば同じ手順です。

外付けHDD起動化するにあたり、大まかな手順は

  1. fstabに外付けドライブを記述
  2. bootパーティション内のcmndline.txtに外付けドライブを記述
  3. 「/」(ルート)パーティションをHDDに移して再起動、問題なければmicroSDの「/」パーティションを削除

という感じです。

パーティションの確認

まずSSHでRaspberry Piにログインします。

無事ログインできていれば

pi@raspberrypi:~ $

という文字列が見えているはずです。見えていなければ前回の記事をもう一度参照していただくか、ググるなりしてSSH接続ができるようにしてください。

上の文字列がちゃんと表示されていれば、外付けディスクをUSBで接続します。アクセスランプが光って、通電してそうな様子が確認できれば、

sudo fdisk -l

と入力します。

いま接続されているディスクとパーティションの一覧が表示されるのでそこで

/dev/mmcblk0p1
/dev/mmcblk0p2

と表示されている箇所を見ます。右の方にSizeという項目があるので、その箇所でサイズが大きい方が「/」パーティションです。おそらくデフォルトだと

/dev/mmcblk0p2

が「/」パーティションとなっているはずです。

また、その少し下に

/dev/sda1

と表示されていると思います。こちらが外付けディスクのパーティションです。

これらのパーティションを忘れないようにコピペするなりしておきます。

/etc/fstabの書き換え

fstabとは自動でHDD等をマウントするように設定するためのファイルです。詳しくはArchLinuxのwikiで説明されています。

ちなみにfstabに書いてないディスク・パーティションは、mountコマンドを打たないと使えるようになりません。起動時に自動では使えません。

sudo nano /etc/fstab

で、fstabというファイルを開きます。

fstabが開けると、下のようなテキストが見えると思います。

Screenshot from 2016-05-17 21-19-45

これに先ほど確認したHDDのパーティションを書きます。

/dev/mmcblk0p2

と欠かれている箇所をHDDのパーティション(/dev/sda1)に書き換えます。

Screenshot from 2016-05-17 21-24-45

ここまでできたら、CTRL+Xを押して、y、Enterと順に押して上書き保存しましょう。

これで次回起動時から外付けHDD=/dev/sda1が自動でマウントされます。

cmdline.txtに記述

Raspbianでは、cmdline.txtというファイルでルートファイルシステムのパーティションの指定ができるようです。

早速開いてみます。

sudo nano /boot/cmdline.txt

と押すと、先ほどと同様にテキストエディタが立ち上がります。改行が無いので見づらいファイルですが、ここから

root=/dev/mmcblk0p2

という文字列を探します。このイコール以下を書き換え、

root=/dev/sda1

というふうに書き換えましょう。これでこのファイルの操作は終了です。

CTRL+X→y→Enterと順に押して上書き保存しましょう。

HDDのフォーマット

fdiskコマンドで既存のパーティションを削除します。

sudo fdisk /dev/sda

と入力し、fdiskを起動します。

ここでは対話的にコマンドを打って操作します。正しく起動できていれば

Command (m for help):

と表示されているはずなので、まず、dと打ってください。

次に消すパーティションを選びます。

Partition number (1,2, default 1):

こんな感じで消せるパーティションが列挙されると思うので、数字を入力し、既存のパーティションを消します。

パーティションが複数ある場合は同じ操作を繰り返し、既存のパーティションを全部消しましょう。

続いて新しくパーティションを作成します。

nと打つと、作成するパーティションの種類の選択が出るので、

pと打ちます。

次にパーティション番号を決めろと言われるので、デフォルトにしたがって1と打ちます。

あとはEnterを2回押すと

Created a new partition 1 of type 'Linux' and of size ○○ GiB.

と表示されるはずです。

最後にwを押し、変更を保存して、fdiskを抜けます。

通常のコンソール画面に戻ったら

sudo mkfs.ext4 /dev/sda1

と入力し、sda1がext4というLinux向けの形式でフォーマットしておきます。

HDDへのコピー

それではいよいよHDDパーティションにデータを移します。

sudo dd if=/dev/mmcblk0p2 of=/dev/sda1

このコマンドで、まるまるコピーが出来ます。しかし、かなり時間がかかります。テレビでも見て時間を潰しましょう。

しばらくして

pi@raspberrypi:~ $

が表示されればコピー完了です。

しかし、このままだと、元ディスク(microSD)の容量しか使えません。なので

sudo resize2fs /dev/sda1

と打ってHDDの全領域が使えるようにします。

起動の確認

sudo reboot

と打って、ラズパイを再起動します。一度SSHが切れるので、しばらくしてもう一度SSHで接続します。

無事ログインできればHDDへの移行が問題なく完了しています。

なお、MicroSDに元のルートファイルシステムが残っていると思いますが、消しても消さなくてもいいです。

個人的には元のルートパーティションをバッサリ消して、残ったbootパーティションを余り物の容量が小さいMicroSDに移すのがおすすめです。