Raspberry Piをサーバーとして使う その1補足
SDカードをストレージとしたサーバーは不安か?
SDカードには不安材料がある。インターネット上でもよく言われている「寿命」である。関係しているのは「書き込み回数」であり、一般的にはSDカードの寿命は短いと言われている(同じ仕組みであるSSDの寿命が短かったら、今頃サーバー用など発売されていないだろうし)。そのため、DockerやCMSなど、よく書き込みが発生するシステムには向いていない。
サーバー用途としてRaspberry Piを使うのであれば、主ストレージをSDカードからHDDに変更し、SDカードはブートローダーとして使うのがベターと考える。ブートローダーだけなら読み込みだけで書き込みはほぼないはずなので、早々に臨終を迎えることはないだろう。
というわけで、USB-HDDでRaspberry Piを起動し、サーバー用途として安心できるようにするのがこのページの目的である。
準備物およびスペック
・Raspberry Pi3 : OSはHypriotを選択した。理由は後程。
・SDカード : 16GB これでも正直無駄であるが、たまたま手元に小容量のものがなかった。
・HDD : 2.5インチHDD。容量は320GBで、SATA接続のものをUSBに変換する。中古で1980円くらい。
・SATA-USB : SATA接続のデバイスをUSB接続化するもの。HDDケースでもよいが、Raspberry Piの場合は電力確保も考える必要がある。今回は、コネクタを変換するキットを使った。価格はだいたい2000円前後。
早速実行
参考にしたサイトは以下のとおりである。
Raspberry PiをUSB(HDD)で起動させる(純規の暇人趣味ブログ )
まずはUSB接続に変換したSATA-HDDをRaspberry Piにつなぎ、起動。
続いて
$ sudo fdisk -l (実行結果は中略)
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 133119 131072 64M c W95 FAT32 (LBA)
/dev/mmcblk0p2 133120 30547967 30414848 14.5G 83 Linux
Disk /dev/sda: 298.1 GiB, 320072931328 bytes, 625142444 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
これで、OSのパーティションおよびHDDのデバイスが判明する。/dev/mmcblk0p2がOS(TypeがLinux)、/dev/sdaがSATA-HDD(Disk /dev/sda)である。ddコマンドを使い、SATA-HDDへOSのデータを丸ごとコピーする。コピーし終えたら、e2fsckとresize2fsでディスク領域のチェックおよび調整を行う。
$ sudo dd if=/dev/mmcblk0p2 of=/dev/sda bs=32M conv=noerror,sync
$ sudo e2fsck /dev/sda
$ sudo resize2fs /dev/sda
次に、HDD上のOSデータにあるfstabを更新する。更新前に、/dev/sdaをどこかにマウントする。
$ sudo mount -t ext4 -o defaults /dev/sda /mnt
$ sudo nano /mnt/etc/fstab
↓ root(/)のところが/dev/mmcblk0p2となっているので、/dev/sdaにする
/dev/sda / ext4 defaults,noatime 0 1
終わったら、shutdownコマンドでシステムを停止する。
システムが停止したら、SDカードを別のPCで読み込ませる。SDカードにはcmdline.txtがあるので、テキストエディタで編集する。編集箇所は「root=」の値。ここを編集して、システムを読み込む場所を変更する。
変更前:root=/dev/mmcblk0p2
変更後:root=/dev/sda
あとは、編集済みのSDカードをRaspberry Piに差しなおし、電源を入れる。起動したら成功である。
結果
結果としてはしょぼいかもしれないが、以下を挙げる。
$ df -m
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/root 287788 597 274848 1% /
devtmpfs 427 0 427 0% /dev
tmpfs 431 0 431 0% /dev/shm
tmpfs 431 6 426 2% /run
tmpfs 5 0 5 0% /run/lock
tmpfs 431 0 431 0% /sys/fs/cgroup
/dev/mmcblk0p1 64 31 34 48% /boot
Mounted onの値が「/」の行に注目。「1M-blocks」が287788、約280GBとなっている。とりあえず、これでHDDのシステムでやり取りしているとみてよいかと思う。