2021年6月29日火曜日

BeelinkS1でmicroSDカードを(5)

 結局、microSDカードのスロットが空いてしまっている。
 予定ではそこからbootして、うひょひょひょひょっ、と喜色満面の予定だったのだが。
 ただこのスロットは埋めておきたい。
 いつもの貧乏性からだけでなく、何もいれていないと、FreeBSDの起動に時間がかかるからだ。なぜだか、知らないが——WindowsもUbuntuもだいじょうぶだったのに、bootのときに、このスロットを確認しにいくのである。何度もTimeoutしてもしつこく。
 なのでとりあえず、microSDカードをいれておきたい。
 ところが壊れたmicroSDカードも手元にないし、使えるものをただ、いれておくというのも忍びない。

 そうだ。
 mirrorにしよう。
 microSDカードを使おうと試行錯誤していたとき、USBメモリとmicroSDカードをstripeにしたことはあるのだけど、これはうまくいかなかった。bootの途中で、microSDカードを認識できないので、stripeに失敗するからだと思う。mirrorならうまくいくんじゃないか。

 そこでmirror用にmicroSDカードを購入した。
 boot用のmicroSDカードと同じ128Gのものである。mirrorは同じサイズにしなければ、いけないからだ。なんか、貧乏性でいろいろ、工夫しているのに、金が出ていくな。

 届いたmicroSDカードにFreeBSD12をinstall。
 インストールディスクからbootしたあと、zroot2をimportして

$ sudo zpool attach zroot2 da0p4 mmcsd0p4

 しばらくしてエラーがでた。
 smallなんとかかんとか。
 あれ?

$ gpart show da0
=>       40  250560432  da0  GPT  (119G)
         40     409600    1  efi  (200M)
     409640       1024    2  freebsd-boot  (512K)
     410664        984       - free -  (492K)
     411648    4194304    3  freebsd-swap  (2.0G)
    4605952  245952512    4  freebsd-zfs  (117G)
  250558464       2008       - free -  (1.0M)

$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664        984          - free -  (492K)
     411648    4194304       3  freebsd-swap  (2.0G)
    4605952  245129216       4  freebsd-zfs  (117G)
  249735168       2008          - free -  (1.0M)

 同じ128GのmicroSDカードなのにサイズがちがうじゃないか。
 しかも新しく購入した方が小さい。逆ならリサイズしてなんとか、なったのに。mmcsd0p4をいくら拡張してもda0p4のサイズにならない——頭を抱えてしまった。da0の方が破損したときに、mmcsd0のmicroSDカードからbootできるようにしたいので同じような構成したのだが。
 あきらめることも含めて検討した結果、swap領域を小さくしてmmcsd0p4をサイズ拡張した。

$ sudo gpart delete -i 4 mmcsd0
mmcsd0p4 deleted

$ sudo gpart delete -i 3 mmcsd0
mmcsd0p3 deleted

$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664  249326512          - free -  (119G)

$ sudo gpart add -a 4k -t freebsd-swap -s 1G mmcsd0
mmcsd0p3 added, but partition is not aligned on 4194304 bytes
$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664    2097152       3  freebsd-swap  (1.0G)
    2507816  247229360          - free -  (118G)

$ sudo gpart add -a 4k -t freebsd-zfs -s 117G mmcsd0
mmcsd0p4 added, but partition is not aligned on 4194304 bytes
$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664    2097152       3  freebsd-swap  (1.0G)
    2507816  245366784       4  freebsd-zfs  (117G)
  247874600    1862576          - free -  (909M)

$ sudo gpart resize -s 245952512 -i 4 mmcsd0
mmcsd0p4 resized
$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664    2097152       3  freebsd-swap  (1.0G)
    2507816  245952512       4  freebsd-zfs  (117G)
  248460328    1276848          - free -  (623M)

$ gpart show da0
=>       40  250560432  da0  GPT  (119G)
         40     409600    1  efi  (200M)
     409640       1024    2  freebsd-boot  (512K)
     410664        984       - free -  (492K)
     411648    4194304    3  freebsd-swap  (2.0G)
    4605952  245952512    4  freebsd-zfs  (117G)
  250558464       2008       - free -  (1.0M)

 これでmmcsd0p4とda0p4は同じサイズになったのでattach。

$ sudo zpool attach zroot2 da0p4 mmcsd0p4

Make sure to wait until resilver is done before rebooting.

If you boot from pool  'zroot2', you may need to update
boot code on newly attached disk  'mmcsd0p4'.

Assuming you use GPT partitioning and  'da0' is your new boot disk
you may use the following command:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

$ 
$ zpool status zroot2
  pool: zroot2
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
         continue to  function, possibly  in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver  in progress since Mon Jun 21 13:13:29 2021
        21.7G scanned at 208M/s, 1.19G issued at 11.4M/s, 21.7G total
        1.18G resilvered, 5.48% done, 0 days 00:30:45 to go
config:

        NAME          STATE     READ WRITE CKSUM
        zroot2        ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            da0p4     ONLINE       0     0     0
            mmcsd0p4  ONLINE       0     0     0

errors: No known data errors

 同期してしまうのにしばらくかかった。