Raspberry Pi 3B+ SSD起動ディスク化 MicroSD必要と不要 両方試してみた:7.5インチ epaper(Eペーパー)ディスプレイとラズパイを接続して表示させてみるRaspberry Pi 3B+ SSD起動ディスク化 MicroSD必要と不要 両方試してみた:

Raspberry Pi 3B+をSSD起動するようにしていきます。Raspberry Pi 3+からはMicroSDなしSSD起動はすでにUSB Boot対応になっているのである程度簡単にできます。

MicroSDでbootパーティションを使う場合はもっと簡単にできました。

この記事は複数のページに別れています
  1. (今このページを見ています)

ラズパイのSSD起動化で、MicroSD必要・不要バージョンの2種やりましたのでメモしておきます。

2.5インチSSDとSATAケーブル買った

まずはラズパイ以外の材料としてSSDとSATAケーブルを買いました。外付け2.5インチSSDが3000円前後と安い。この価格ならもうMicroSDカードを起動ディスクにする必要もなくなってきた。けどコンパクトさは半減します。

そしてラズパイは海外通販Banggoodから来たもの↓

Raspberry Pi 3 Model B+

Raspberry Pi 3 Model B+

[MicroSD不要SSD起動ディスク化]

MicroSDを使わないようにする設定。公式に書いてある。

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md

ただし!Raspberry Pi 3ではOTP(one-time programmmble=ワンタイムプログラマブル)なので1度しか変更できない!点にご注意ください。もとに戻せません・・・自分の持っているラズパイはRaspberry Pi 3 B+なので変更しないでもよさそう。

下準備

念のためアップデートしておく。

$ sudo apt-get update

USB Bootできている状態か確認。以下「3」になっていればよさそう。「1」の場合はから下のバージョンなので、USB Bootを有効にする必要あり「echo “program_usb_boot_mode=1” | sudo tee -a /boot/config.txt」を実行する。

B+でやったら以下のように「3」だったのでそのまま作業していきます。

$ vcgencmd otp_dump | grep 17:
17:3

パーティション作成

SSDに入っているデータはすべて消えてしまうのでバックアップをとっておきましょう。

boot用はFAT32で、OS用のパーティションはext4でフォーマット。赤字の部分が入力する項目です。

$ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable msdos                                                
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? Yes                                                          
(parted) mkpart primary fat32 0% 100M                          
(parted) mkpart primary ext4 100M 100%                                   
(parted) print                                                            
Model: OASDX-12 0G (scsi)
Disk /dev/sda: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  99.6MB  98.6MB  primary  fat32        lba
 2      99.6MB  120GB   120GB   primary  ext4         lba

(parted) quit                                                            
Information: You may need to update /etc/fstab.

フォーマット

FAT32とext4の2つフォーマットします。

$ sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
mkfs.fat 4.1 (2017-01-24)
$ sudo mkfs.ext4 /dev/sda2
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 29280768 4k blocks and 7323648 inodes
Filesystem UUID: 651851b0-1fda-4eb9-b6df-18cec8305630
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

マウントしてコピー rsync 失敗した方法

2つのパーティションをマウントしてコピーしていきます。

$ sudo mkdir -p /mnt/ssd
$ sudo mount /dev/sda2 /mnt/ssd/
$ sudo mkdir /mnt/ssd/boot
$ sudo mount /dev/sda1 /mnt/ssd/boot/
$ sudo rsync -ax --progress / /boot /mnt/ssd
最後エラーがでた・・・
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]

エラーになったので、SSDで起動時に途中まで起動したが、2分くらい固まった後に以下のようなエラーになった。リターン押しても2分くらいたったらこの画面で無限ループする。

もう一度やりなおし!(´;ω;`)ウゥゥ 3回やって同じエラーになるのでrsyncを使わず他の方法でコピーする。

マウントしてコピー 成功例

失敗したところの続きから。まずはアンマウントしてもう一度フォーマットします。

$ sudo umount /dev/sda1
$ sudo umount /dev/sda2
$ sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
$ sudo mkfs.ext4 /dev/sda2

マウント・ディレクトリを作る。

$ sudo mkdir /tmp/usd #作業ディレクトリ
$ sudo mount /dev/mmcblk0p7 /tmp/usd #MicroSDのRaspbianをマウント
$ sudo mkdir -p /mnt/ssd
$ sudo mount /dev/sda2 /mnt/ssd/
$ sudo mkdir /mnt/ssd/boot
$ sudo mount /dev/sda1 /mnt/ssd/boot/

/tmp/usdから/mnt/ssdへtarを使ってまるまるコピーする。

$ (cd /tmp/usd; sudo tar --backup -c *)|sudo tar -C /mnt/ssd -xv

続いてbootもコピーする

$ (cd /boot; sudo tar --backup -c *)|sudo tar -C /mnt/ssd/boot -xv

今回は特にエラーもなく無事にコピーされたみたい。

cmdline.txt・fstabの変更

SSDにある/bootのファイル2つを変更してMicroSDなしでも使えるように起動ディスクをsda2に変えていきます。

cmdline.txtの中にあるroot=/dev/mmcblk0p7→root=/dev/sda2に変更。(失敗例でもしかしたら/dev/sda1にしちゃってたかも・・・)

$ sudo vim /mnt/ssd/boot/cmdline.txt

こちらのfstabはmmcblk0p6→sda1、mmcblk0p7→sda2に変更した。

$ sudo vim /mnt/ssd/etc/fstab
proc            /proc           proc    defaults          0       0
/dev/sda1  /boot           vfat    defaults          0       2
/dev/sda2  /               ext4    defaults,noatime  0       1

再起動したら成功例でうまく起動できました!めでたしめでたし♪

続いてMicroSD(/bootが必要)な方法でSSDを起動ディスクにしてみます。

MicroSD必要SSD起動ディスク化

[MicroSD不要SSD起動ディスク化]と違うのはSSDの容量をすべてOSのディスクにするので作業が簡単です。こちらは最初に作業しました。[MicroSD不要SSD起動ディスク化]のほうが参考になるかと思い上に表示させました。

デバイス名をチェックする

$ dmesg
・・・省略
[    3.661109] i2c /dev entries driver
[    4.145557] EXT4-fs (mmcblk0p7): re-mounted. Opts: (null)
[    4.294478] systemd-journald[87]: Received request to flush runtime journal from PID 1
[    4.874055] scsi 0:0:0:0: Direct-Access     OASDX-12 0G               R042 PQ: 0 ANSI: 6
[    4.875656] sd 0:0:0:0: [sda] 234441644 512-byte logical blocks: (120 GB/112 GiB)
[    4.876096] sd 0:0:0:0: [sda] Write Protect is off
[    4.876109] sd 0:0:0:0: [sda] Mode Sense: 2f 00 00 00
[    4.876545] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    4.879122]  sda:
[    4.880979] sd 0:0:0:0: [sda] Attached SCSI disk
[    5.187111] sd 0:0:0:0: Attached scsi generic sg0 type 0
[    5.298493] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.

どうやら/dev/sdaのようです。/dev/mmcblk07はラズパイのシステムが入っているMicroSDカード。

$ sudo fdisk -l
・・・省略
Device         Boot   Start       End   Sectors  Size Id Type
/dev/mmcblk0p1         2048   3656250   3654203  1.8G  e W95 FAT16 (LBA)
/dev/mmcblk0p2      3656251 123494399 119838149 57.1G  5 Extended
/dev/mmcblk0p5      3661824   3727357     65534   32M 83 Linux
/dev/mmcblk0p6      3727360   3868671    141312   69M  c W95 FAT32 (LBA)
/dev/mmcblk0p7      3874816 123494399 119619584   57G 83 Linux

Disk /dev/sda: 111.8 GiB, 120034121728 bytes, 234441644 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
Disklabel type: dos
Disk identifier: 0x3d0e23d3

パーティション作成

$ sudo fdisk /dev/sda
Command (m for help): d #パーティション無かった
No partition is defined yet!
Could not delete partition 1943673
Command (m for help): n #新規作成
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
#以下リターンでデフォルト選択される
Partition type:P
Partition number:1
First sector:2048
Last sector:234441643
Created a new partition 1 of type 'Linux' and of size 111.8 GiB.
Command (m for help): W #最後にWで書き込み

以下のようになった、Disklabel type: dosが気になる。

$ sudo fdisk -l
・・・省略
Disk /dev/sda: 111.8 GiB, 120034121728 bytes, 234441644 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
Disklabel type: dos
Disk identifier: 0x2a6be21a

Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1        2048 234441643 234439596 111.8G 83 Linux

うまくできたようです。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 111.8G  0 disk 
└─sda1        8:1    0 111.8G  0 part 
mmcblk0     179:0    0  58.9G  0 disk 
├─mmcblk0p1 179:1    0   1.8G  0 part 
├─mmcblk0p2 179:2    0     1K  0 part 
├─mmcblk0p5 179:5    0    32M  0 part /media/pi/SETTINGS
├─mmcblk0p6 179:6    0    69M  0 part /boot
└─mmcblk0p7 179:7    0    57G  0 part /

フォーマット

あとはフォーマットするだけと思ったら・・・

$ sudo mkfs.ext4 /dev/sda
mke2fs 1.43.4 (31-Jan-2017)
Found a dos partition table in /dev/sda
Proceed anyway? (y,N) y
Creating filesystem with 29305205 4k blocks and 7331840 inodes
Filesystem UUID: bf3db726-f1fa-4a6c-a64b-fe48bbfa9a99
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

再起動したらカーネルパニックになった!なんで?と思ったら!!!!/dev/sdaをフォーマットしてた(泣)本当は/dev/sda1!!間違えた・・・で、カーネルパニック復旧してきました。

404 NOT FOUND | Densi
WP・サーバー・PHP・ラズパイ・Arduinoの覚え書き

気をとりなおして以下のようにしたらうまくいった・・・ドジです(泣)

$ sudo umount /dev/sda1
$ sudo mkfs.ext4 /dev/sda1

アンマウント

まずはSSDのパーティションをアンマウントする。

$ sudo umount /dev/sda1

ディレクトリ作成

/tmpに仮に作業ディレクトリを作っていきます。/tmp内のディレクトリは再起動すると消えます。

$ sudo mkdir /tmp/usd /tmp/ssd #作業ディレクトリ
$ sudo mount /dev/mmcblk0p7 /tmp/usd #MicroSDのRaspbianをマウント
$ sudo mount /dev/sda1 /tmp/ssd

/tmp/usdから/tmp/ssdへtarを使ってまるまるコピーする。

$ (cd /tmp/usd; sudo tar --backup -c *)|sudo tar -C /tmp/ssd -xv

ディスクの調整

このままだとディスクの容量が違うようなのでチェックしないといけないみたい。だけど特にエラーはなさそうだった。

$ sudo umount /dev/sda1
$ sudo e2fsck -f /dev/sda1
e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 160387/7331840 files (0.1% non-contiguous), 2145207/29304949 block

このようになった。特にエラーはなさそうです。

ブートディスクの変更

$ sudo cp /boot/cmdline.txt /boot/cmdline_back.txt
$ mkdir /tmp/boot
$ sudo mount /dev/mmcblk0p6 /tmp/boot #FAT32のbootをマウント

bootパーティションのcmdline.txtの中にあるroot=/dev/mmcblk0p7→root=/dev/sda1に変更↓

$ sudo vim /tmp/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles

sync
reboot

リブートしてSSD起動できているかみてみましょう。最初に起動した時はうまくいかず、一度電源を切って起動したらうまくいきました。

SSD起動できているか確認

lsblkをやるとsda1が「/」になっているのでsda1が起動してますね!MicroSDのときはmmcblk0p7が「/」になっていました。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 111.8G  0 disk 
└─sda1        8:1    0 111.8G  0 part /
mmcblk0     179:0    0  58.9G  0 disk 
├─mmcblk0p1 179:1    0   1.8G  0 part 
├─mmcblk0p2 179:2    0     1K  0 part 
├─mmcblk0p5 179:5    0    32M  0 part /media/pi/SETTINGS
├─mmcblk0p6 179:6    0    69M  0 part /boot
└─mmcblk0p7 179:7    0    57G  0 part 

しかし、/bootをMicroSDカードから読み込んでいるのでこのやり方だと最低でも/bootの中身、cmdline.txtが必要みたいです。MicroSDカードなしでSSDを起動ディスクにするには上の[MicroSD不要SSD起動ディスク化]をご覧ください。

参考

外付けSSDをラズベリーパイに増設してデータをガンガン保存できるようにする | IoT PLUS
ラズパイをSDカードで動かしていると寿命とか空き領域が気になります。 そんな時にはSSDを外付けしてしまいましょう! ということで、ラズベリーパイにUSB接続のSSDを接続して簡単...
【Raspberry Pi 3】メインディスクをSSDに変更 - Qiita
#工程1.デバイスID確認2.ext4形式でフォーマット3.ファイルシステムをmicroSDカードからSSDへコピー#使用したアイテムUSB接続のため性能は関係無い!コスパ的におすすめのS…
Raspberry PiをUSB(HDD)だけで動かす(SD不要) | なうびるどいんぐ
「Raspberry PiをUSB(HDD)で起動させる」というやり方は既にあります。しかし、これは単にデータ(OS)の部分をHDDに移しただけであり、依然としてブートローダとなるSDカードは必要でした。比較的新しめのRaspberry Piでは、ブートローダーとなるSDカードすら使わずにUSBストレージだけで起動させ...

大変参考になりました。ありがとうございますm(_ _)m

コメント

タイトルとURLをコピーしました