SDカードからUSB接続ブートへ変更 古い情報も多く、結構苦労しました。2019年8月時点の情報となります。 SDカードでの運用による信頼性は多くの人が気にしているようです。 ディスクへのアクセス速度もUSB接続にした方が早くなると思います。
以下、一般的な規格などからくる速度目安。 USB接続として、SSDかHDDは、静音、消費電力、温度、耐久性より、ニーズに合わせた選択になると思います。
SDカード CLASS6 6MB/S SDカード CLASS10 10MB/S USB2.0 60MB/S SSD 470MB/S HDD 140MB/S USB3.0(参考) 640MB/S
注意事項 今回、SDカードなしのUSBデバイスのみの構成とはしませんでした。 SDカードなしのUSBデバイスの直接ブートは、センシティブでした。 Raspberry Pi 3B +は、標準でUSBブート対応という内容も散見されましたが、他USB接続しているデバイスや、接続ポート、USBハブ経由、直接接続など条件によりブート可能であったり不可能であったりしました。 SDカードなしのUSBデバイスのみ構成構築時には、Raspberry PiUSBデバイスに綺麗なブートイメージを作成し、他USBデバイスを接続せずに、SDカードなしでブート可能か確認し、最終的な接続機器を設定・接続した状態での再起動テストをお勧めします。 試行錯誤の結果、ブート時間 、起動処理の信頼性 を考え、SDカードにブートコードを格納し、USBデバイスを利用する方法での運用に移行しました。
USBデバイスへのブートイメージ作成には、「Etcher 」 を利用します。
SDカードブート構成からUSBデバイス構成への移行 SDカード情報のコピー コピーしたデータのデバイスファイル関係設定変更 新規SDカードに「bootcode.bin」を書込み GitHub SDカード情報のコピー 新規SDカードにパーティションを作成します。
/dev/sda ブート領域、100M /dev/sdb ルート領域、ブート領域100Mを除いた残りのディスクスペース root@raspberrypi:~# 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: StoreJet StoreJet Transce (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. 作成したパーティションをフォーマットします。
/dev/sda FAT32のWindowsフォーマット /dev/sdb Ext4の標準的なLinuxフォーマットinode, jounalなどは標準で良いです root@raspberrypi:~# mkfs.vfat -n BOOT -F 32 /dev/sda1
mkfs.fat 4.1 (2017-01-24)
root@raspberrypi:~# mkfs.ext4 /dev/sda2
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 29280768 4k blocks and 7323648 inodes
Filesystem UUID: 8becaa42-5ad3-4bca-bcb2-6bdf1f371aeb
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 ファイル内容のコピーに向けて、コピー元、コピー先のマウントを実施。 現在のルート領域と作成したファイル領域をマウントするために、マウントフォルダを作成し、それぞれ、マウントします。
$ 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/ / Rootルート領域および /bootブート領域をコピーします。
$ (cd /tmp/usd; sudo tar --backup -c *)|sudo tar -C /mnt/ssd -xv
$ (cd /boot; sudo tar --backup -c *)|sudo tar -C /mnt/ssd/boot -xv コピーしたデータのデバイスファイル関係設定変更 コピーした領域のブート関連ファイルの修正を行います。 comdline.txtファイルの「root」ディレクトリを「 /dev/sda2」へ変更します。
root@raspberrypi:/mnt/ssd/boot# vi cmdline.txt
root@raspberrypi:/mnt/ssd/boot# cat cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fstabの「/boot」および 「/」ルートディレクトリを、それぞれ、「 /dev/sda1」および「/dev/sda2」へ変更します。
root@raspberrypi:/mnt/ssd/boot# vi /mnt/ssd/etc/fstab
root@raspberrypi:/mnt/ssd/boot# cat /mnt/ssd/etc/fstab
proc /proc proc defaults 0 0
/dev/sda1 /boot vfat defaults 0 2
/dev/sda2 / ext4 defaults,noatime 0 1 新規SDカードに「bootcode.bin」を書込み GitHub 容量の小さなSDカードに、「bootcode.bin」を書き込みます。 ※ 他ファイルを書き込む必要はありません。/bootの内容も不要です。
「bootcode.bin」は、GitHub よりダウンロードし、SDカードに書き込んでください。
参考にさせて頂いたサイト USB接続のSSDデバイス USB Type-Cにも対応、今後の使いまわしなども考えても、コストパフォーマンスが良いと思いました。
トランセンドジャパン
¥4,980 (2024/12/25 04:51:47時点 Amazon調べ- 詳細)