2020年8月14日金曜日

RaspberryPiのFreeBSDをrebuild(2)とmicroSDの拡張

 連休ということもあったひさしぶりに RaspberryPiのFreeBSDをrebuildした。
 エラーがでた。
 kernelのlinkのときに落ちた。
 device not spaceなんたらかんたら——ああ、これはあれだ。デバイスの容量が足りないというやつだ。
 で、どのデバイスが?
 /tmpだろうとあたりをつけた。
 /tmpはtmpfsでメモリ上にマップされているので、50Mほどしか、ない。
 めずらしく正解で、うまくrebuildできたのだけれど、ふとAmazonでmicroSDカードで調べてみたら128Gが3,000円を切っていた。うそん。何がショックかって 先代のMacBook Airの内蔵ディスクが128Gだったのだ。
 ということは何?
 FreeBSD on RaspberryPiは128Gにできるってこと?
 そう思ったらAmazonでポチってしまっていた。

 そのあとに、 microSDカードの書き込み上限はモノによっては1000回程度だということを知る。
 あわててtmpfsを有効にする。swapも殺しておいた方がいいかもしれない。
 それにしても128Gが書き込み上限1000回だったら泣けるな。

 とりあえず、FreeBSD入りの32Gを128GのmicroSDにコピる。

$ sudo dd  if=/dev/mmcsd0  of=/dev/da0  bs=1m

 3時間以上、かかった。4時間かもしれない。
 ちゃんとbootした。
 growfsをYESにしていたので自動で拡張されるか、と思ったけれど、そんなことはなかった。

$ df -h
Filesystem                Size    Used   Avail Capacity  Mounted on
/dev/ufs/rootfs            28G     19G    6.9G    74%    /
devfs                     1.0K    1.0K      0B   100%    /dev
/dev/msdosfs/MSDOSBOOT     50M     14M     36M    28%    /boot/msdos
tmpfs                      50M    8.0K     50M     0%    /tmp
$ 

 試行錯誤とマニュアルと首っ引きで、拡張する方法を探す。
 growfsコマンドでいきそうなのだけど、gpartを使う必要があるようだ。

$ gpart show
=>       63  250560449  mmcsd0  MBR  (119G)
         63       2016          - free -  (1.0M)
       2079     102312       1  fat32lba  [active]  (50M)
     104391   61335609       2  freebsd  (29G)
   61440000  189120512          - free -  (90G)

=>       0  61335609  mmcsd0s2  BSD  (29G)
         0        57            - free -  (29K)
        57  61335552         1  freebsd-ufs  (29G)

$ sudo gpart resize -i 2 mmcsd0
mmcsd0s2 resized

$ gpart show
=>       63  250560449  mmcsd0  MBR  (119G)
         63       2016          - free -  (1.0M)
       2079     102312       1  fat32lba  [active]  (50M)
     104391  250456121       2  freebsd  (119G)

=>        0  250456121  mmcsd0s2  BSD  (119G)
          0         57            - free -  (29K)
         57   61335552         1  freebsd-ufs  (29G)
   61335609  189120512            - free -  (90G)

$ sudo gpart resize -i 1 mmcsd0s2
mmcsd0s2a resized
$ gpart show
=>       63  250560449  mmcsd0  MBR  (119G)
         63       2016          - free -  (1.0M)
       2079     102312       1  fat32lba  [active]  (50M)
     104391  250456121       2  freebsd  (119G)

=>        0  250456121  mmcsd0s2  BSD  (119G)
          0         57            - free -  (29K)
         57  250456064         1  freebsd-ufs  (119G)

$ sudo growfs /
Device is mounted read-write; resizing will result  in temporary write suspension for /.
It 's strongly recommended to make a backup before growing the file system.
 OK to grow filesystem on /dev/ufs/rootfs, mounted on /, from 29GB to 119GB? [yes/no] yes
 super-block backups (for fsck_ffs -b #) at:
  61547712, 62829952, 64112192, 65394432, 66676672, 67958912, 69241152, 70523392, 71805632, 73087872,
  74370112, 75652352, 76934592, 78216832, 79499072, 80781312, 82063552, 83345792, 84628032, 85910272,
  87192512, 88474752, 89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432, 98732672,
  100014912, 101297152, 102579392, 103861632, 105143872, 106426112, 107708352, 108990592, 110272832,
  111555072, 112837312, 114119552, 115401792, 116684032, 117966272, 119248512, 120530752, 121812992,
  123095232, 124377472, 125659712, 126941952, 128224192, 129506432, 130788672, 132070912, 133353152,
  134635392, 135917632, 137199872, 138482112, 139764352, 141046592, 142328832, 143611072, 144893312,
  146175552, 147457792, 148740032, 150022272, 151304512, 152586752, 153868992, 155151232, 156433472,
  157715712, 158997952, 160280192, 161562432, 162844672, 164126912, 165409152, 166691392, 167973632,
  169255872, 170538112, 171820352, 173102592, 174384832, 175667072, 176949312, 178231552, 179513792,
  180796032, 182078272, 183360512, 184642752, 185924992, 187207232, 188489472, 189771712, 191053952,
  192336192, 193618432, 194900672, 196182912, 197465152, 198747392, 200029632, 201311872, 202594112,
  203876352, 205158592, 206440832, 207723072, 209005312, 210287552, 211569792, 212852032, 214134272,
  215416512, 216698752, 217980992, 219263232, 220545472, 221827712, 223109952, 224392192, 225674432,
  226956672, 228238912, 229521152, 230803392, 232085632, 233367872, 234650112, 235932352, 237214592,
  238496832, 239779072, 241061312, 242343552, 243625792, 244908032, 246190272, 247472512, 248754752,
  250036992
 $ 

 $ df -h
 Filesystem                Size    Used   Avail Capacity  Mounted on
 /dev/ufs/rootfs           116G     19G     87G    18%    /
 devfs                     1.0K    1.0K      0B   100%    /dev
 /dev/msdosfs/MSDOSBOOT     50M     14M     36M    28%    /boot/msdos
 tmpfs                      50M     24K     50M     0%    /tmp
 $ 

 なんとか、なった。

 そもそも128GということはBeelinkS1にインストールしてあるFreeBSDよりも大きい。
 それだったらBeelinkS1にmicroSDカードをセットしてそこから使えばいいじゃん——と思ったのだけれど、どういうわけか、うちのBeelinkS1はmicroSDカードが挿しこめないのだった。なんと不良品だったのか。今さらだが。