rfriendsでラジオ録音

ラジコ、らじるらじる、タイムフリーのラジオ番組を録音

RaspberryPiにGPT形式のUSBデバイスを接続してブートする。

 以前、下記のような投稿をしました。

Raspberry piにUSBデバイスを接続してブートする。

https://rfriends.hatenablog.com/entry/2023/08/19/231648

 

 この時、接続したUSBデバイスMBR形式となっています。通常はこれで問題ないのですが、MBR形式の場合、ディスクに2TBという制限があります。2TB以上のディスクを使用する場合、GPT形式にする必要があります。ここでは、MBR形式で作成したUSBデバイスをGPT形式に変換する方法について記述します。

 いきなり実データが入ったディスクで行うのはデータロスの危険があるので、その心配がない作業用USBデバイスで試してみてください。ただし、遅いUSBメモリで試すと、レスポンスが悪いので要注意です。ここで使用しているNetac OnlyDiskがまさにそうで、失敗したかと思うくらい遅いものでした。

 また、これを読んで面倒だなと思ったり、何のことやらと思った方はやらないほうが賢明です。

 

 

初  版 2024/05/06
第2版 2024/05/06

1.準備するもの

・RaspberryPi
・rfriends3イメージ (もちろんRaspberry Pi OSイメージでも可)
microSD
・USBデバイス
・OTGケーブル

1.1 rfriends3イメージの書き込み

microSDとUSBデバイス両方にrfriends3のイメージを書き込み、両方共wifi設定を済ませてください。wpa_supplicant.confを書き込む際、USBデバイスは一旦とりはずして再接続したほうがいいと思います。

1.2 USBデバイスブートによるrfriends3の起動確認

microSDはセットせずに(RaspberryPi Zeroの場合は、bootcode.binのみのmicroSDをセット)USBデバイスをOTG ケーブル経由で接続します。ラズパイの電源をONにし、USBデバイスより起動します。

PCより、SSHでラズパイにログインできることを確認してください。(重要)

電源の容量不足でブートできないことがあります。

1.3 microSDブートによるrfriends3の起動確認

 microSDをセットし、USBデバイスもOTG ケーブル経由で接続します。ラズパイの電源をONにし、microSDより起動します。PCより、SSHでラズパイにアクセスします。

この状態で、これ以降の処理を行います。

 

 rfriends3のセットアップを行ったことがある方は、ここまでは問題なくできるとおもいます。

2.現状確認

2.1 デバイス

バイスの接続情報を表示します。

$ lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    1 14.5G  0 disk 
|-sda1        8:1    1  256M  0 part 
`-sda2        8:2    1  7.4G  0 part 

mmcblk0     179:0    0   30G  0 disk 
|-mmcblk0p1 179:1    0  512M  0 part /boot
`-mmcblk0p2 179:2    0 29.5G  0 part /

ここでは、USBメモリ(16GB)、microSD(32GB)を使用しています。

USBメモリ(16GB) : sda   
microSD(32GB)  : mmcblk0

2.2 パーティション

パーティションを確認します。MBRの場合、msdosと表示されます。

$ sudo parted -l

Model: Netac OnlyDisk (scsi)
Disk /dev/sda: 15.6GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   8242MB  7969MB  primary  ext4

Model: SD CBADS (sd/mmc)
Disk /dev/mmcblk0: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  541MB   537MB   primary  fat32        lba
2      541MB   32.2GB  31.7GB  primary  ext4

2.3 partuuid

partuuidを確認します。

$ ls -l /dev/disk/by-partuuid
total 0
lrwxrwxrwx 1 root root 15 May  6 01:41 d18cfd05-01 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 15 May  6 01:41 d18cfd05-02 -> ../../mmcblk0p2
lrwxrwxrwx 1 root root 10 May  6 01:41 de3e6df4-01 -> ../../sda1
lrwxrwxrwx 1 root root 10 May  6 01:41 de3e6df4-02 -> ../../sda2

3.USBデバイスMBRからGPTに変換します。

USBメモリ(/dev/sda)をMBRからGPTに変換します。太字の箇所に注目してください。他は、壊れるかもしれないけどいいのかみたいな警告メッセージです。

$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.9

Caution: invalid main GPT header, but valid backup; regenerating main header
from backup!

Warning: Invalid CRC on main header data; loaded backup partition table.
Warning! Main and backup partition tables differ! Use the 'c' and 'e' options
on the recovery & transformation menu to examine the two tables.

Warning! Main partition table CRC mismatch! Loaded backup partition table
instead of main partition table!

Warning! One or more CRCs don't match. You should repair the disk!
Main header: ERROR
Backup header: OK
Main partition table: ERROR
Backup partition table: OK

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: damaged

GPT MAY permit recovery of GPT data.)
 1 - MBR
 2 - GPT
 3 - Create blank GPT

Your answer: 1

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

4.変更後の確認

4.1 パーティション

パーティションを確認します。USBメモリ(/dev/sda)がMBRからGPTに変わっていることが確認できます。

$ sudo parted -l

Model: Netac OnlyDisk (scsi)
Disk /dev/sda: 15.6GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
 1      4194kB  273MB   268MB   fat32        Microsoft basic data  msftdata
 2      273MB   8242MB  7969MB  ext4         Linux filesystem

Model: SD CBADS (sd/mmc)
Disk /dev/mmcblk0: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  541MB   537MB   primary  fat32        lba
2      541MB   32.2GB  31.7GB  primary  ext4

4.2 partuuid

ここで再度partuuidを確認すると、MBRからGPTに変換したことで、USBメモリ(/dev/sda)のpartuuidが変わっていることがわかります。

$ ls -l /dev/disk/by-partuuid
total 0
lrwxrwxrwx 1 root root 10 May  6 01:57 641807cb-02ff-4ddd-af7b-8dc40b17ba7a -> ../../sda2
lrwxrwxrwx 1 root root 10 May  6 01:57 7dfe6bae-28c2-4d03-aafa-b4e44821f05b -> ../../sda1
lrwxrwxrwx 1 root root 15 May  6 01:57 d18cfd05-01 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 15 May  6 01:57 d18cfd05-02 -> ../../mmcblk0p2

/dev/sda1 /boot 7dfe6bae-28c2-4d03-aafa-b4e44821f05b
/dev/sda2 /         641807cb-02ff-4ddd-af7b-8dc40b17ba7a

5.boot/rootの変更

partuuidが変わったので、USBメモリ(/dev/sda)の以下の2か所を変更する必要があります。

/dev/sda1 /bootのcmdline.txt
/dev/sda2 /rootの/etc/fstab

5.1 boot/rootのマウント

ホームディレクトリにマウントディレクトリを作成し、それぞれマウントします。

$ cd
$ mkdir boot
$ mkdir root

$ sudo mount /dev/sda1 boot
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.

$ sudo mount /dev/sda2 root
mount: (hint) your fstab has been modified, but systemd still uses
     the old version; use 'systemctl daemon-reload' to reload.

5.2 bootのcmdline.txtの変更

rootのpartuuid(/dev/sda2)を変更します。間違えないように。

de3e6df4-02 -> 641807cb-02ff-4ddd-af7b-8dc40b17ba7a に変更する。

これは例です。変更する値は環境により異なります。

$ sudo vi boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=de3e6df4-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=JPr

5.3 rootの/etc/fstabの変更

/boot de3e6df4-01 -> 7dfe6bae-28c2-4d03-aafa-b4e44821f05b
/        de3e6df4-02 -> 641807cb-02ff-4ddd-af7b-8dc40b17ba7a

に変更します。これは例です。変更する値は環境により異なります。

/dev/sda1と/dev/sda2をまちがえていないか、よく確認してください。

$ sudo vi root/etc/fstab

proc            /proc           proc    defaults          0       0
PARTUUID=de3e6df4-01  /boot           vfat    defaults          0       2
PARTUUID=de3e6df4-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
#
# /tmp,/var/tmp,/var/logをRAMディスクにマウント
tmpfs /tmp     tmpfs defaults,size=64m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
#
# rfriends tmpディレクトリ をramディスクにマウント
tmpfs /home/rpi/tmp tmpfs defaults,size=320m,noatime,mode=0777 0 0
#
# /home/rpi/smbdir にUSBメモリをマウント
#
#UUID= /home/rpi/smbdir   ext4    defaults    0   0

5.4 アンマウント

マウントしていた、boot,rootをアンマウントします。

$ sudo umount boot
$ sudo umount root
$ rmdir boot
$ rmdir root

6.USBデバイスによる起動の確認

6.1 USBデバイスによる起動

最後に、microSDを抜いて、USBメモリでブートするか確認します。

ラズパイを一旦シャットダウンします。

$ sudo shutdown -h now

次にmicroSDを抜きます。(RaspberryPi Zeroの場合は、bootcode.binのみのmicroSDと交換)
再度、電源ONします。

6.2 パーティションの確認

パーティションを確認します。USBメモリで起動しており、GPTになっています。

$ sudo parted -l

Model: Netac OnlyDisk (scsi)
Disk /dev/sda: 15.6GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
 1      4194kB  273MB   268MB   fat32        Microsoft basic data  msftdata
2      273MB   8242MB  7969MB  ext4         Linux filesystem

7.最後に

 最後に、これを2TB以上のディスクで行い、領域拡張をすれば、2TB以上の領域が確保できると思います。

 データがないときはやり直せば済みますが、データがあるときは失敗するとデータが無くなってしまうので、くれぐれもバックアップをとってからにしてください。

 また、領域拡張が走る場合、当然ですが、大きなHDDほど時間がかかります。HDDのアクセスランプが消えるまで気長に待ちましょう。ubuntu/debian等で、Gpartedを使用したほうがわかりやすいと思います。以下は4TBのディスクでGpartedを使用して最大まで拡張した様子です。

 

 なお、お約束ですが、これを行った結果、データロスが発生しても当方は責任持てません。自己責任でお願いします。

 

以上