Starfive VisonFive2(RISC-V SBC) で遊ぶ – その4 rootをM.2 SSDにする
microSDをrootデバイスとして使うのは、耐久性に不安がある。rootをNVMe SSDに変更したい。しかし、現状ではSSD bootはできない。しかたがないので、 /boot はSDに残して、他を NVMe に移すことにした。
- Vision Five 2のM.2 M-keyスロットは現状NVMe SSDが使える – OSAKANA TAROのメモ帳
- What kind of SSD can be used? – VisionFive 2 (English Forum) – RVspace Forum
- Debian – Move root partition to NVMe and keep boot partition – VisionFive 2 (English Forum) – RVspace Forum
- Debian NVME boot – VisionFive 2 (English Forum) – RVspace Forum
- Debian – Move root partition to NVMe and keep boot partition – VisionFive 2 (English Forum) – RVspace Forum
そもそもの発端
VisionFive2でやねうら王をコンパイルしてたら途中でずっこけた。sshが切れて、pingにも応答しない。何これ?
Timeout, server starfive.local not responding.
とりあえずUSB扇風機で冷やした後に再起動。しかし起動しない。DHCPも取りに来ないので、debianが動いていないようだ。
microSDを書き直したら何事もなかったように動いているので、ハードウェアの問題ではなさそう。 このトラブルはRaspberry Piでも経験した、VisionFive2でもmicroSDになるべく書き込まないようにしないといけないようだ。
初期設定だと atime が有効になっている。この場合、ファイルアクセスのたびに書き込みが発生するので、microSDでは使うべきではない。 /tmp も頻繁に書き込みがあるので、microSD にあるのは良くない。
M.2 NVMeを挿してみた
パソコン工房の年末年始セールで、WesternDigitalのWDS500G3B0Cを安売りしていたので購入。500GBのM.2 (M Key)なSSD。M.2スロットに挿したらちゃんと見えた。
fstab に下記の設定を追加。この状態でコンパイル程度では死ななくなったが、 /home2 という名前は美しくないし、microSDを常用するのも怖い。現在microSDにある root をNVMeに移すことにした。
# <file system> <mount point> <type> <options> <dump> <pass> /dev/mmcblk1p2 /boot vfat defaults 0 2 /dev/mmcblk1p3 / ext4 errors=remount-ro,noatime 0 1 /dev/nvme0n1p2 /home2 ext4 errors=remount-ro 0 3 tmpfs /var/tmp tmpfs nodev,nosuid,size=128M 0 0 /home2/swapfile none swap sw 0 0 0
microSDカードの / をNVMeにコピーする
まず、ダウンロードした debian Image-69 の / をNVMeにコピーします。圧縮されたままではディスクとして扱えないので、作業前にgunzipで展開しておきます。
展開したmicroSDカードのイメージをloopbackデバイスに登録。
$ ungzip starfive-jh7110-VF2_515_v2.5.0-69.img.gz $ sudo partx -v -a starfive-jh7110-VF2_515_v2.5.0-69.img partition: none, disk: starfive-jh7110-VF2_515_v2.5.0-69.img, lower: 0, upper: 0 Trying to use '/dev/loop0' for the loop device /dev/loop0: partition table type 'gpt' detected range recount: max partno=3, lower=0, upper=0 /dev/loop0: partition #1 added /dev/loop0: partition #2 added /dev/loop0: partition #3 added $ sudo losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop0 0 0 0 0 /home/shin/starfive-jh7110-VF2_515_v2.5.0-69.img 0 512
イメージファイルがデバイスとして見えます。
$ sudo fdisk -lu /dev/loop0 Disk /dev/loop0: 15.63 GiB, 16777216000 bytes, 32768000 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: gpt Disk identifier: B3E6F05B-DFC8-47B7-9C2B-F4762387709C Device Start End Sectors Size Type /dev/loop0p1 2048 34815 32768 16M Linux filesystem /dev/loop0p2 34816 239615 204800 100M EFI System /dev/loop0p3 239616 32765918 32526303 15.5G Linux filesystem
NVMeは事前にpartedで領域の設定をして、mkfs.ext4でファイルシステムを作っておきます。
領域の大きさはどう設定するのが良いのでしょうね。わからないので、最初の方はmicroSDに合わせて、残りを / と /home 用に確保してみました。
debianの更新を考えると、 / を2つ作って新旧を切り替えるのが良いのかもしれません。後で検討します。
$ sudo fdisk -l /dev/nvme0n1 Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors Disk model: WD Blue SN570 500GB 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: gpt Disk identifier: D6A1FDEF-D692-4D71-B2C1-D44037704F85 Device Start End Sectors Size Type /dev/nvme0n1p1 2048 34815 32768 16M Linux filesystem /dev/nvme0n1p2 34816 239615 204800 100M EFI System /dev/nvme0n1p3 239616 244514815 244275200 116.5G Linux filesystem /dev/nvme0n1p4 244514816 976773134 732258319 349.2G Linux filesystem
その後、loopbackに登録済みのイメージの / を NVMe にコピー。
$ sudo e2image -ra -p /dev/loop0p3 /dev/nvme0n1p3 e2image 1.46.5 (30-Dec-2021) Scanning inodes... Copied 3119747 / 3119747 blocks (100%) in 00:09:44 at 20.87 MB/s
メモ: この後でresize2fsが必要?
試しにmountしてみる。
$ sudo mount /dev/nvme0n1p3 /mnt/tmp $ ls -l /mnt/tmp 合計 84 drwxr-xr-x 2 root root 4096 12月 19 13:35 bin drwxr-xr-x 4 root root 4096 12月 19 13:03 dev drwxr-xr-x 97 root root 4096 12月 20 11:08 etc drwxr-xr-x 3 root root 4096 12月 19 15:50 home drwxr-xr-x 13 root root 4096 12月 19 13:24 lib drwx------ 2 root root 16384 12月 19 13:39 lost+found drwxr-xr-x 2 root root 4096 12月 19 13:03 media drwxr-xr-x 2 root root 4096 12月 19 13:03 mnt drwxr-xr-x 3 root root 4096 12月 20 11:07 opt drwxr-xr-x 2 root root 4096 1月 19 2022 proc drwx------ 3 root root 4096 12月 19 15:50 root drwxr-xr-x 6 root root 4096 12月 19 13:12 run drwxr-xr-x 2 root root 4096 12月 19 13:23 sbin drwxr-xr-x 2 root root 4096 12月 19 13:03 srv drwxr-xr-x 2 root root 4096 1月 19 2022 sys drwxrwxrwt 3 root root 4096 12月 20 11:06 tmp drwxr-xr-x 11 root root 4096 12月 19 13:03 usr drwxr-xr-x 11 root root 4096 12月 19 13:03 var
/etc/fstab を編集してNVMeを / にする。 その他、変更が必要なファイルはこのタイミングで直しておくと楽です (/etc/ssh/sshd_configなど)。
$ sudo vi /mnt/tmp/etc/fstab $ cat /mnt/tmp/etc/fstab (略) <file system> <mount point> <type> <options> <dump> <pass> /dev/mmcblk1p2 /boot vfat defaults 0 2 #/dev/mmcblk1p3 / ext4 errors=remount-ro,noatime 0 1 /dev/nvme0n1p3 / ext4 errors=remount-ro 0 3 tmpfs /var/tmp tmpfs nodev,nosuid,size=128M 0 0
以下、この手順で本当に正しいのか不明。
/boot/boot/extlinux/extlinux.conf を編集。直接編集するな! (Do not edit this file manually) と書かれているけど、直接編集してしまいました。本来はどうすべきでしょうか?
## /boot/extlinux/extlinux.conf ## ## IMPORTANT WARNING ## ## The configuration of this file is generated automatically. ## Do not edit this file manually, use: u-boot-update default l0 menu title U-Boot menu prompt 0 timeout 50 label l0 menu label Debian GNU/Linux bookworm/sid 5.15.0-starfive linux /boot/vmlinuz-5.15.0-starfive initrd /boot/initrd.img-5.15.0-starfive fdtdir /boot/dtbs/ append root=/dev/nvme0n1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0 # append root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0 label l0r menu label Debian GNU/Linux bookworm/sid 5.15.0-starfive (rescue target) linux /boot/vmlinuz-5.15.0-starfive initrd /boot/initrd.img-5.15.0-starfive fdtdir /boot/dtbs/ append root=/dev/nvme0n1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0 single # append root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0 single
あとはrebootすれば、NVMeが / になります。このままrebootすると、初期設定のままですので rootでssh loginできません。必要なら/etc/ssh/sshd_conigをreboot前に変更しておきます。
$ sudo reboot $ Connection to starfive.local closed by remote host.
再ログインして、正しくマウントできているか確認。
$ ssh root@starfive.local (略) # df -kh Filesystem Size Used Avail Use% Mounted on udev 1.7G 0 1.7G 0% /dev tmpfs 390M 3.1M 387M 1% /run /dev/nvme0n1p3 115G 13G 102G 12% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock /dev/mmcblk1p2 100M 22M 78M 23% /boot
うまく動いているようです。この状態で問題ないか、しばらく慣らし運転してみます。しかし、debianの更新が今後も入るはずだし、どんな設定が良いのだろうか悩みますね。
TODO: emmcを試してみたい。どこで買えるかな。
追記: M.2 SSDを固定するネジは付属していないので買ってくる必要があります。
続く。
ディスカッション
コメント一覧
まだ、コメントがありません