Pi Desktopキットとは
2017年9月、Raspberry Pi3をPi Desktopキットを使用してSSDベースのデスクトップPCにしました。
私は、Pi Desktopキットを Physical Computing Lab で購入しました。
- 5,980円 … Pi Desktop [Element14-2687142]
- 6,800円 … Pi Desktop用 SSD 64GB
Physical Computing LabのPi Desktop商品説明によると、以下のような特徴があります。
Pi Desktopは、Raspberry Piで簡単にSSDベースのデスクトップPC環境を作ることができるキットです。
Pi Desktopの主な特徴
- SSD起動のOSとSSDストレージ
- 電源スイッチの搭載
- リアルタイムクロック
- Piカメラ装着スロット
Raspberry PiをデスクトップPCとして使用するために、いくつかの弱点がありました。
- ストレージは、マイクロSDカードにOSやデータを保存しますが、SDカードの書き換え寿命が気になります。
- 電源スイッチが無く、シャットダウンしてHALT状態になっても電源はOFFになりません。
- RTC(Real Time Clock)というハードウェア・クロックが搭載されていないので、ブート直後は前回シャットダウン時の日時になります。
これらの弱点を補うために、いろいろと試してきました。
ストレージ問題は、USBフラッシュメモリを接続しました。取り急ぎ、データストレージのみUSBフラッシュに保存しました。OS全体のUSBフラッシュ化については未着手です。
電源スイッチについては、「Pi Supply Switch」により安全に電源OFFにすることができました。
リアルタイムクロックについては、「Raspberry Pi RTC 拡張モジュール DS1307」を接続することにより解決しました。
Pi Desktopキットは、これひとつで弱点を解決できます。
Pi Desktopは、mSATA to USBブリッジを搭載しておりSSDをUSBで接続します。Raspberry PiのUSBはUSB2.0なのでSSDのアクセス速度は遅くなりますが、Raspberry PiでSSDを使用できるのはうれしいことです。
Pi Desktopを組み立てる
Pi Desktop に簡単な説明書が添付しています。
element14 COMMUNITY サイトのPiDesktop で添付ドキュメントなどを公開しています。
説明書に従って、Pi Desktopを組み立てます。
サイズ 105mm×105mm×45mm の黒いケースにRaspberry Piが収まります。
Pi Desktopにひとつの問題があると思います。
それは、SDカードを簡単に抜くことができないことです。
Raspberry Piの左側にSDカードスロットがありますが、ケースに取り出し口が無くSDカードに手が届きません。
一度組み立てると、SDカードに触れる必要が無いのですが、私は操作ミスでSDカードを壊してしまいました。Pi Desktopのネジを外しRaspberry Piを取り出して、SDカードを入れ替えるのに苦労してしまいました。
それゆえ私は、最初にRaspberry PiとPi Desktop拡張ボードを接続してSSDを設定しました。そして、SDカード無しの運用するために、SDカードを抜いてPi Desktopのケースに入れました。
Pi Desktopのソフト設定
Pi Desktop Debian Package インストール
Pi Desktopサイト Downloadsから Pi Desktop Debian Package をダウンロードします。
Debian Packageをインストールします。
$ sudo dpkg -i pidesktop-base-1.1.0.deb Selecting previously unselected package pidesktop-base. (Reading database ... 124076 files and directories currently installed.) Preparing to unpack pidesktop-base-1.1.0.deb ... Unpacking pidesktop-base (1.0.0) ... Setting up pidesktop-base (1.0.0) ... Created symlink /etc/systemd/system/reboot.target.wants/embest-shutdown.service → /lib/systemd/system/embest-shutdown.service. Created symlink /etc/systemd/system/poweroff.target.wants/embest-shutdown.service → /lib/systemd/system/embest-shutdown.service. Created symlink /etc/systemd/system/multi-user.target.wants/embest.service → /lib/systemd/system/embest.service. sudo systemctl disable fake-hwclock.service Synchronizing state of fake-hwclock.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install disable fake-hwclock
SSD パーティション作成
パーティション管理ユーティリティ gparted をインストールします。
$ sudo apt-get update $ sudo apt-get install gparted
gparted を起動します。
$ $ sudo gparted
デバイス /dev/sda を選択します。
「デバイス(D)」-「パーティションテーブルの作成(C)」をクリックします。
「新しいパーティションテーブルの形式を選択」から「gpt形式」を選択して「適用」します。
終了します。
この操作により、/dev/sda のSSDは何も無い状態になります。私は不注意で、この操作を /dev/mmcblk0 (SDカード)に対して行ってSDカードを壊してしまいました。
SDからSSDへコピー (ppp-hdcloneを使用)
SDカードの内容をSSDにコピーします。
マニュアル(Pi Desktop User Manual_EN_Rev3.4)に従い、ppp-hdclone を起動します。
$ sudo ppp-hdclone
Deviceの選択ができません。
Debian Package v1.1.0の説明をみると、管理者権限の sudo が不要になったようです。
This version mainily fixes some bugs:
Fixed: command ‘ppp-hdclone’ can not call piclone suitably on the RASPBIAN image released after 2017-06. On the new RASPBIAN image ‘sudo’ is no longer needed when call piclone.
$ ppp-hdclone
今度は、SD Card Copierのデバイス選択ができるようになりました。
- Copy From Devide: USD (/dev/mmcblk0)
- Copy To Devide: MT-64 USB Storage (/dev/sda)
実行開始しましたが、エラーが発生してしまいました。
SDからSSDへコピー (SD Card Copierを使用)
気を取り直して、解決方法を調べます。
ppp-hdclone スクリプトの内容を確認しました。
#!/bin/bash /usr/share/PiDesktop/python/diskClone.py sudo /usr/share/PiDesktop/python/pppBoot.py
2つのPythonスクリプトを実行しているだけです。
#!/usr/bin/python import os; def runCommand(command): print command; r = os.popen(command); info = r.readlines(); for line in info: print line; def newPartition(sd): command = 'echo -e "o\nn\np\n1\n\n\nw\n" | sudo fdisk ' + sd; os.popen(command); def chekSD(): command = 'ls -la /dev/sd*'; r = os.popen(command); info = r.readlines(); if len(info) > 0: sd = ''; num = 0; for line in info : if line.startswith("ls:") : print 'Please insert mSATA disk.'; return; if line.strip()[-1].isdigit(): num += 1; else: sd = line.strip('\r\n'); diskClone(); else: print 'Please insert mSATA disk.'; def diskClone(): message = "Calling the 'SD Card copier' to clone the filesystem from SD Card to SSD..."; print message; command = 'piclone'; runCommand(command); if __name__ == "__main__": chekSD();
chekSD() → diskClone() → piclone を起動しています。piclone は、SD Card Copierのようです。
「アクセサリ>SD Card Copier」を使用してみます。
無事、SDカードからSSDへのコピーが完了しました。
SSDのrootfsを指定
もうひとつの pppBoot.py スクリプトは何をしているのでしょうか?
スクリプトを読むと、/boot/cmdline.txtの 「root=」を「root=/dev/sda2」に置換しているようです。
pi-desktop の Boot From a USB Mass Storage Deviceを読むと意味がわかりました。
As we know,Pi has two partition on disk(take the debian for example),The boot partition and the root partition. The boot partition is FAT format and the root partition is EXT4 format.The boot partition contains files about firmware,just like zImage,dtb,config.txt and so on. The EXT4 partition contains the rootfs.
・・・
There are two methods to boot from SSD(or other USB Mass Storage Devices). The first way is change the root property in cmdline.txt to re-choose the location of rootfs.The other way is the new strategy that is on developing.【要約】
私たちが知っているように、Piはディスク上に2つのパーティション(例えばdebianをとります)、ブートパーティションとルートパーティションを持っています。ブートパーティションはFATフォーマットで、ルートパーティションはEXT4フォーマットです。ブートパーティションには、zImage、dtb、config.txtなどのファームウェアに関するファイルが含まれています。EXT4パーティションにはrootfsが含まれています。SSD(または他のUSB大容量記憶装置)から起動するには、2つの方法があります。最初の方法は、cmdline.txtのルートプロパティを変更してrootfの場所を再選択することです。それ以外の方法は開発中の新しい戦略です。
Methods 1
This method is what pi-desktop has choosed.Just follow the steps:
1 Prepare a USB Mass Storage Device. You can use piclone to copy the contains from your SD card to the USB Mass Storage Device.
2 Prepare a SD card.Flash the image to it too.Change the root property in cmdline.txt. change root=/dev/mmcblk0p2 to root=/dev/sd***x***2.Methods 2
This method is a really way to boot from USB without SD card. You don’t need a SD card. The boot partion is stored in USB mass storage device too.
But first you need a SD card to set the OTP bit.【要約】
[方法1]
この方法は、pi-desktopが選択したものです。次の手順に従います。1. USB大容量記憶装置を準備します。picloneを使用して、SDカードからUSBマスストレージデバイスへの内容をコピーすることができます。
2. SDカードを準備します。イメージをフラッシュします。cmdline.txtにルートプロパティを変更します。root=/dev/mmcblk0p2 を root=/dev/sd***x***2に変更します。[方法2]
この方法は、SDカードなしでUSBから起動する本当の方法です。SDカードは必要ありません。ブートパーティションはUSBマスストレージデバイスにも格納されています。しかし、まずOTPビットを設定するにはSDカードが必要です。
私のRaspberry Pi3は、すでに方法2でOTPビットを変更して USBブート設定していますので、pppBoot.py スクリプトを実行する必要はありません。
方法1の補足説明
私は、方法2を選択しましたが、方法1についての情報をメモしておきます。
SDカードからブートしたとき、「/boot」と「/」はSDカードデバイスをマウントしています。
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 58.7G 0 disk ├sda1 8:1 0 41.8M 0 part └sda2 8:2 0 58.7G 0 part mmcblk0 179:0 0 14.7G 0 disk ├mmcblk0p1 179:1 0 41.8M 0 part /boot └mmcblk0p2 179:2 0 14.7G 0 part /
SDカードの /boot/cmdline.txt の ルートプロパティを root=/dev/sda2 に変更します。
$ cat /boot/cmdline.txt dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
リブートします。
SDカードの /boot をマウントして、cmdline.txt の 「root=デバイス」指定により SSDの「/」をマウントします。
すなわち、SDカードを使用して起動しますが、Linux OSはSSDから起動することになります。
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 58.7G 0 disk ├sda1 8:1 0 41.8M 0 part └sda2 8:2 0 58.7G 0 part / mmcblk0 179:0 0 14.7G 0 disk ├mmcblk0p1 179:1 0 41.8M 0 part /boot └mmcblk0p2 179:2 0 14.7G 0 part
SSD起動の確認
SDカードを抜いてリブートします。しばらく待つと、SSDからRaspbianが起動しました。
lsblkコマンドで物理ディスクの一覧を確認しました。
$ blkid /dev/sda1: LABEL="boot" UUID="13C6-2676" TYPE="vfat" PARTUUID="b9edbc40-01" /dev/sda2: UUID="037616fd-28fe-4652-8248-2042ea30b929" TYPE="ext4" PARTUUID="b9edbc40-02" $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 14.7G 0 disk ├sda1 8:1 1 41.8M 0 part /boot └sda2 8:2 1 14.7G 0 part /
まとめ
Raspberry Pi3をPi Desktopキットを使用してSSDベースのデスクトップPCにしました
SDカードからSSDへ内容をコピーする手順で迷いましたが、無事SSD起動に成功しました。マニュアルの内容を大幅に加筆した「Pi Desktop User Manual_EN_Rev4.0.pdf」が公開されています。私は、古いマニュアル(Rev3.4)を参照していました。Pi Desktopが届いたときにマニュアルなどをダウンロードして、SSD化の「sudo ppp-hdclone」手順でトラブルが発生して解決方法を調べている間に新しいマニュアルが公開されたようです。
電源スイッチの確認などは、別の機会にレポートしたいと思います。