Quantcast
Channel: mattintosh note
Viewing all articles
Browse latest Browse all 878

Raspberry PiでUUID指定でルートパーティションをマウントする

$
0
0

昨日、Raspberry Pi のルートパーティションを USB メモリに移した話を書いたのですが、やっぱり root=/dev/sda1と指定するのは納得がいかないので root=UUID=で起動できるようにしてみました。

mattintosh.hatenablog.com

まずはちょっとおさらい。

現在の 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.txtroot=に記載すれば起動できる…らしいのですが、Raspberry Pi 1 Model B+ ではそれだけでは起動できませんでした。

これとは別件(ディスプレイを回転させる方法)で config.txtのマニュアルを読んでいたところ、config.txt内で initramfs を指定できるとのこと。

www.raspberrypi.org

initramfs を指定する方法は2つあり、まず1つ目は ramfsfile=ramfsaddrを指定する方法。

ramfsfile=<filename>
ramfsaddr=<address>

もう1つは initramfsだけで指定する方法があるようです。この場合のみ特殊で、=は使用しません。

initramfs <filename> <address>

今回は後者の initramfsを使用しました。

まずは initrd を作成します。Arch Linux ARM の場合、mkinitcpiomkinitcpioパッケージに含まれています。

mkinitcpio -z gzip -g /boot/initrd.gz

config.txtinitramfs行を追加します。<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にエラーが出力されます。あと、パット見ですが、ルートパーティションの読み込みに関する部分が少し変わっていました。今までは ext2ext3とテストが行われていたのですが、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 環境の構築か…。


Viewing all articles
Browse latest Browse all 878

Trending Articles