Raspberry Pi を HDD 起動(& NOOBSから通常のRaspbian構成に変更)
前回 惨敗した後に散々試行錯誤してやっとできました。
また、後々メンテマンスもしやすそうなので、これを機に NOOBS から通常の Raspbian 構成に変更しました。
目次
構成
- 現在の構成
- ・起動中SD カード(8GB : NOOBS Raspbian )
・外付けHDD 1(電源供給USBハブで接続) - 追加したもの
- ・boot用SDカード (うちにあった2GBのもの)
・外付けHDD 2(1TB:ルート移動先) - SDカード/HDDを操作するPC
- ・Windows 10
手順
1. デバイス状況確認
HDDをUSB接続し、マウント状況を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sudo fdisk -l (中略) Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 2285156 2283109 1.1G e W95 FAT16 (LBA) /dev/mmcblk0p2 2285157 15597567 13312411 6.4G 5 Extended /dev/mmcblk0p5 2285568 2351101 65534 32M 83 Linux /dev/mmcblk0p6 2351104 2480127 129024 63M c W95 FAT32 (LBA) /dev/mmcblk0p7 2482176 15597567 13115392 6.3G 83 Linux (中略) Device Start End Sectors Size Type /dev/sda1 2048 1953525134 1953523087 931.5G Linux filesystem (中略) Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 131071 122880 60M c W95 FAT32 (LBA) /dev/sdb2 131072 13246463 13115392 6.3G 83 Linux /dev/sdb3 13246464 15773695 2527232 1.2G 83 Linux |
1. HDD
1. フォーマット
使用するHDD を Ext4 でフォーマットします。
1 |
sudo mkfs.ext4 /dev/sdb |
2. パーティション作成
とりあえずはルート用とその他用のパーティションを2つ切ってこのようにになりました。
1 2 3 4 5 |
Command (m for help): p (中略) Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 268437503 268435456 128G 83 Linux /dev/sdb2 268437504 897583103 629145600 300G 83 Linux |
再度フォーマットします。
1 2 |
sudo mkfs.ext4 /dev/sdb1 sudo mkfs.ext4 /dev/sdb2 |
パーティション操作については こちらの記事 の方が少し細かく書いています。
2. マウント
マウント用ディレクトリを用意してマウントします。どこでもOKですが、デフォルトで用いされている「/mnt」にディレクトリを作成しました。(/mntに直接マウントでも大丈夫です。)
1 2 |
sudo mkdir /mnt/bk sudo mount /dev/sdb1 /mnt/bk |
3. ルートのコピー
ルートをコピーします。稼働中のためか、dd と dump ではうまくいきませんでした。 rsync で 試したところ一発でうまくいきました。
1 |
sudo rsync -a --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/bk |
- フルバックアップと除外リストのオプションをつけます。先ほどマウントした場所(/mnt)は除外しないと無限ループに陥ります。
- 初回は結構時間がかかります。経過を表示するオプションもあるようです。( その間 Vine の動画作って遊んでました)
4. fstabの書き換え
コピーが終わったら、コピー先 のfstabを書き換えます。
1 |
sudo vi /mnt/bk/etc/fstab |
修正前
1 2 |
/dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/mmcblk0p7 / ext4 defaults,noatime 0 1 |
修正後
1 2 |
/dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/sdb1 / ext4 defaults,noatime 0 1 |
※今回、新SDカードは NOOBS ではないので、 /boot は 通常のRaspbian と同じ /dev/mmcblk0p1 になります。NOOBS構成のSDカードをそのまま使う場合は、mmcblk0p7 (ルート)の修正だけでOKです。
4. boot用SDカード作成
RaspberryPiのbootファイルは、通常版、Lite、NOOBSもすべて同じようなのでどこから持ってきても良さそうです。FAT16形式です。
- 方法1. 現在のbootから取り出す方法
- bootディレクトリrsyncでHDDにコピーし、それをWindowsで焼きます。
- 方法2. RASPBIAN LITEをDLして焼く
- 新SDカードに、2GB以上の容量がある場合は、これでも簡単な気がします。起動後に cmldine.txt を修正します。
- 方法3. 現在のSDカードをそのままBOOT用にする
- 別SDカードに復元可能なことが確認済みのバックアップがある場合などは、現在使用しているSDカードを書き替えてしまう方法でも良いかと思います。この場合は、NOOBS構成のままになります。
シャットダウン
つい最近まで電源引っこ抜いてましたが、ちゃんとshutdown した方が良いみたいです・・・。
1 |
sudo shutdown -h now |
6. 新SDカードで起動
新SDカードに差し替えて、電源を入れ直します。
無事起動!
起動に失敗した場合
自分の失敗したパターンを記録しておきます。
- 全く起動しない
- 差し込んでも無反応、全く起動しない場合は、boot に 問題がありました。
- 起動はしたけど、動作がおかしい
- apacheが起動しない、データが足りないなど・・・HDDファイルのコピーが失敗していました。 元々のSDカードは無傷ですので、そこから再度コピーし直します。 (起動中にデータ引っこ抜くならrsyncが良いです)
- コマンドラインは起動し、操作が可能な場合。
- 設定ファイルに問題があるかもしれません。
作業中ハマったところ
初心者なので色々はまりました。
- バックアップが復元できない
- Win32DiskImagerでPCに保存しておいたバックアップが2つとも復元出来ない上記に遭いました。(原因究明に至っていませんが、Win32DiskImagerでバックアップとるのをやめました。)「バックアップとっているから大丈夫」と安心せずに、復元可能なことを確認するべきだと学びました。orz
- パーティションがちゃんと作成できない
- fdisk で パーティションを作成(n)しても「Partition type」が出てこなくて長時間悩みました。ディスクをフォーマットしたら、出てくるようになりました・・・。
- dd 、dump がうまくいかない
- そもそも起動中のファイルシステムをコピーしようとしていたからか、何度やってもファイルが破損してapacheなどが起動しませんでした。rsync はファイルシステムを理解する、起動中にもできる、ということで良いことづくめな気がします。
- Windows上でSDカードやHDDの中身が見えない
- 起動が失敗したとき、WIndowsからSDカードの中身を書き換えられなくて困りました。ソフトを使う事でパーティション操作、ファイル操作が可能になりました。
- rsync が終わらない
- 最初、除外リストを作らずに /mnt/が無限ループになるという・・・随分終わらないなと思い、別タブでsudo du /mnt/bk を見ると、ひたすら無限にmnt/bk/mnt/bk となっていて気が付きました。
便利なWindowsソフト
- Ext2Fsd
Windows でLinuxのデータが読み書きできます。 - MiniTool Partition Wizard Free Edition
パーティション割、フォーマットができます。 - Win32DiskImage imgファイルを焼くことができます。
参考にさせて頂いたサイト
- Raspberry PiをHDD起動する設定はRaspberry Piでやった方が簡単かも
- 05 Raspberry PiファイルシステムHDD化 その1/3 (HDD接続~データ移行)
- RaspberryPiをHDD起動にする
- [Tutorial] How to move away from NOOBS
- Rsync によるフルシステムバックアップ
バックアップ
その後、外付けHDD1 → HDD2 にバックアップをとるようにしました。
- https://homemadegarbage.com/raspberry-pi-rsync