Raspberry Pi 3B+をSSD起動するようにしていきます。Raspberry Pi 3+からはMicroSDなしSSD起動はすでにUSB Boot対応になっているのである程度簡単にできます。
MicroSDでbootパーティションを使う場合はもっと簡単にできました。
ラズパイのSSD起動化で、MicroSD必要・不要バージョンの2種やりましたのでメモしておきます。
2.5インチSSDとSATAケーブル買った
まずはラズパイ以外の材料としてSSDとSATAケーブルを買いました。外付け2.5インチSSDが3000円前後と安い。この価格ならもうMicroSDカードを起動ディスクにする必要もなくなってきた。けどコンパクトさは半減します。
そしてラズパイは海外通販Banggoodから来たもの↓
[MicroSD不要SSD起動ディスク化]
MicroSDを使わないようにする設定。公式に書いてある。

ただし!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!!間違えた・・・で、カーネルパニック復旧してきました。

気をとりなおして以下のようにしたらうまくいった・・・ドジです(泣)
$ 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起動ディスク化]をご覧ください。
参考



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