トニーさんの備忘録

アメバより引越しの為、古い記事も再掲載しています

Rasberry Pi に CentOS7 をインストールし SSD化

先日から弄っている Rasberry Pi は、Raspbian Linux が動いていました。
しかし、Fedora Linux から使い慣れている RedHatLinux である CentOS で動作させたいと言う思いから起動OSを CentOS7 に変更する事にしました。

変更することでファームウェアの更新が出来ないデメリットを持ちますが、慣れているメリットの方が上回りました。ファームウェアのアップデートは、別途、現在のMicroSDカードで行う事とします。

また、このRasberry Pi を24時間稼働にしたいので

 

専用ケース及び、ファン、ヒートシンクのセット

 

を購入しました。

 

これで、ファンを取り付け、ホコリ対策として基板を隠す事にしました。


また、MicroSDカードでの運用は、24時間稼働には厳しいと思うので、外付けSSDをUSB接続し起動直後は、全てSSDで稼働するようにしました。

 

 3.5インチ SSD及び、3.5インチHD用ケース

 

ハード的な用意は、このへんにして実際の CentOS7 のインストールを開始します。

 


最初は、MicroSDカードにCentOSをインストールします。


まず、MicroSDカードを念の為、 SDFormatterソフト を使い論理サイズの変更を含めフォーマットします。

 

下記のリンクから

Download - CentOS Wiki

AltArch Releases を探し、RaspberryPi2 (img) をダウンロードします。

ダウンロードしたファイルは xzファイルなので、7z などを使い解凍をし imgファイルを取り出します。


取り出した imgファイルを Win32DiskImager を使い、MicroSDカードに書き込みます。


出来上がった MicroSDカードは既に CentOS が稼働する状態なので、Rasberry Pi に刺しネットワークケーブルを繋げるだけで、Windwosからの SSH 接続が可能です。


初期のユーザー名とパスワードは


ユーザー名:root
パスワード:centos


となっています。


これは既に管理者権限のユーザーアカウントなので、直後にパスワードは変更しておきましょう。

コマンドは

passwd


です。実行直後に、パスワードを2回求めてきますので、適切なパスワードを設定して下さい。
また、パスワードを変更直後に


pwconv


で、シャドウ化しておきましょう。


ここまでの作業で、MicroSDカードでの作業は終了し、MicroSDカードは「/boot」のみ使うようにします。

また、初期の状態では外付けSSDを稼働する為の電源が足りないので


cp /boot/config.txt /boot/config.txt.bak

で初期設定を退避します。
もし、下記の作業で編集を間違えても、MicroSDカードをWindowsへ刺せば「/boot」はFATフォーマットなので、いつでも戻す事が可能です。

vi /boot/config.txt

でファイル編集し最後尾に


safe_mode_gpio=4
max_usb_current=1


を追加します。
今回、viコマンドで編集作業をしましたが、操作が簡単と言われている nano で編集しても問題ありません。


編集が終了し適切に変更されていることを確認したら


shutdown now

で、Rasberry Pi をシャットダウンします。


シャットダウンが終了したら、電源を抜き外付けSSDをUSBに刺し、電源を再度刺します。

起動が正常であれば、再び root でログインします。

 


外付けSSD が正常に認識されているかは


dmesg | grep sda


で確認します。

 

認識されていれば外付けSSDパーティションとフォーマットを行います。


fdisk /dev/sda

この時、外付けSSDには、「/」ルートパーティションとswapを作成したいので2つのパーティションを作成します。

swapの容量は、物理メモリーが1Gなのでswapは2Gを取ります。

容量は

物理メモリーが2G以下の場合、物理メモリーX2となり
物理メモリーが2G以上の場合、物理メモリー+2G

が推奨されています。


実際には、稼働させるプログラムが、どのくらいメモリーを使うのかで変わってきます。今回は、CUIで稼働させるのでswapは無しでも良いくらいですが、保険です。


fdisk で使えるコマンドは、hで確認することが出来ます。
今回、60G のSSDを使うので、「/」に58Gを1のパーティションで確保し、swapを2のパーティションで2G取ります。

n → p → 1 → 1 → +58G
n → p → 2 → そのままenter → そのままenter → t → 82

これでsda1をLinuxパーティション、sda2をswapパーティションに出来ます。

wで物理的にSSDに書き込みます。


また、既にSSD内にパーティションがある場合、dで削除してから上記の作業を行って下さい。

次に、出来たパーティションをフォーマットします。

 

mkfs -t ext4 /dev/sda1
mkswap /dev/sda2

 

フォーマットが正常に終了したら、MicroSDカードから外付けSSDに「/」をコピーします。
コピーするには、cpコマンドでは権限やデバイスファイルが正常にコピーされないので「dd」コマンドを使います。

 

dd if=/dev/mmcblk0p3 of=/dev/sda1 bs=32M

 

これでMicroSDカード内の「/」であるmmcblk0p3のパーティションを外付けSSDの「/」にしたいsda1に、32Mがずつコピーします。


ddコマンドが正常に終了したら


e2fsck -f /dev/sda1

でチェックします。途中でエラーが出たらyで修復して下さい。

重大なエラーが出なければddコマンドでコピーした容量がMicroSDカードと同じ容量になっているので

 

resize2fs /dev/sda1

 

を実行して下さい。これで先にfdiskで確保した容量に拡張されます。


次に、外付けSSDに起動時のパーティションを指定します。

 


mount /dev/sda1 /mnt

 


で/mntにマウントします。

 


vi /mnt/etc/fstab

 

を編集しますが、この時、UUIDで起動マウントを指定する為

/dev/sda1と/dev/sda2のUUIDを

 

blkid

 

で調べます。ここで表示されたUUIDをメモし


vi /mnt/etc/fstab


内に


UUID=xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx swap swap notime 0 0
UUID=xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 noatime 0 0


に変更します。

この時、前述した blkidではUUIDの前後が「"」で囲まれているので編集時には、「"」を外して下さい。

 

ここまでが終われば、一旦、外付けSSDのマウントを


umount /dev/sda1


で解除します。もし、マウント先の/mnt下に自身が移動していればcdコマンドでカレントに戻ってからumountして下さい。


最後に

cp /boot/cmdline.txt /boot/cmdline.txt.bak


MicroSDカードでの起動環境を退避し

 

vi /boot/cmdline.txt


root=/dev/mmcblk0p3


の部分を

root=/dev/sda1


に変更して下さい。

 


これで最初の起動だけMicroSDカードで、起動後は全て外付けSSDになります。


reboot

又は


shutdown now


で再起動してください。

再起動後、dfコマンドで正常に外付けSSDの容量になっているかを確認し

 

dmesg | grep sda

 

で起動時に正常にマウントされているかを確認してください。

 

 

最後になりましたが、今回SSDを使った理由は、発熱性、電源容量を考慮した結果になっています。

通常のハードディスクでも大丈夫ですが、その場合、別途電源が必要になり発熱を考慮したケースが必要になると思います。

 


次回は、起動後のワンポイントを記載します。