昨日、Raspberry Pi のルートパーティションを USB メモリに移した話を書いたのですが、やっぱり root=/dev/sda1
と指定するのは納得がいかないので root=UUID=
で起動できるようにしてみました。
まずはちょっとおさらい。
現在の blkid
の出力はこんな感じです。(ここでの UUID は uuidgen
で書き換えたダミーです)
# sudo blkid /dev/mmcblk0p1: SEC_TYPE="msdos" UUID="0000-0000" TYPE="vfat" PARTUUID="00000000-00" /dev/mmcblk0: PTUUID="00000000" PTTYPE="dos" /dev/sda1: UUID="d505fd00-8573-4681-b34c-a03ffaa40c75" TYPE="ext4" PARTUUID="e7ccba30-0efc-4bee-9c1c-f12f442b5f9e"
/dev/sda1 行に記載されている UUID="d505fd00-8573-4681-b34c-a03ffaa40c75"
を /boot/cmdline.txt
の root=
に記載すれば起動できる…らしいのですが、Raspberry Pi 1 Model B+ ではそれだけでは起動できませんでした。
これとは別件(ディスプレイを回転させる方法)で config.txt
のマニュアルを読んでいたところ、config.txt
内で initramfs を指定できるとのこと。
initramfs を指定する方法は2つあり、まず1つ目は ramfsfile=
と ramfsaddr
を指定する方法。
ramfsfile=<filename> ramfsaddr=<address>
もう1つは initramfs
だけで指定する方法があるようです。この場合のみ特殊で、=
は使用しません。
initramfs <filename> <address>
今回は後者の initramfs
を使用しました。
まずは initrd を作成します。Arch Linux ARM の場合、mkinitcpio
は mkinitcpio
パッケージに含まれています。
mkinitcpio -z gzip -g /boot/initrd.gz
config.txt
に initramfs
行を追加します。<address>
は 0x00800000
なんかを指定するようなのですが、試してみたところうまく割り当てができなかったので followkernel
を使うことにしました。
echo initramfs initrd.gz followkernel >>/boot/config.txt
/boot/cmdline.txt
を書き換えます。root=UUID=
は上の blkid
で調べたもの。
root=UUID=d505fd00-8573-4681-b34c-a03ffaa40c75 rw rootwait console=ttyAMA0,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop
なお、ルートパーティションを USB メモリに移したときもそうですが、/etc/fstab
にルートパーティションの記載はしていません(記載してなくても起動できるようで…)。後々ちゃんと書きますが。
# # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> /dev/mmcblk0p1 /boot vfat defaults 0 0 /swapfile none swap swap 0 0
これで再起動すれば UUID でルートパーティションを探してくれます。
initrd.gz が読み込めていない場合は dmesg
にエラーが出力されます。あと、パット見ですが、ルートパーティションの読み込みに関する部分が少し変わっていました。今までは ext2、ext3 とテストが行われていたのですが、initramfs にしてから一発で ext4 と認識してます。
: [ 6.767761] scsi 0:0:0:0: Direct-Access SanDisk Ultra USB 3.0 1.00 PQ: 0 ANSI: 6 [ 6.785853] sd 0:0:0:0: [sda] 30375936 512-byte logical blocks: (15.5 GB/14.4 GiB) [ 6.807828] sd 0:0:0:0: [sda] Write Protect is off [ 6.816467] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00 [ 6.825209] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 6.877905] sda: sda1 [ 6.890652] sd 0:0:0:0: [sda] Attached SCSI removable disk [ 7.587282] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) :
cmdline.txt の記述に間違いがあって起動できなくても microSD の差し替えなしで修正できるのは有り難い…。
さてあとは JACK 環境の構築か…。