Raspiが起動時に自動的にパーティションを拡大するのを潰す

昔は、raspi-configとかで明示的にパーティション拡張をしてやる必要があった。
最近は、おせっかいなことに、起動時に自動的にパーティション拡張してしまう。
複製のためにイメージを小さく保っておきたい場合は、とてもめんどくさいことになる。
デフラグして、ファイルシステムを縮めて、パーティションを縮める。
この間に数値の一貫性がないので、ブロックサイズなどを考慮した変換が必要になる。


めんどくさいのでダウンロードしたRASPBIAN JESSIE LITEイメージを起動する前に潰しておく。
が、簡単だけどめんどくさい。
2箇所潰さないといけない。

準備

RASPBIAN JESSIE LITEをMacからSDに焼く。
約1.2GBある。

$ ls -lah /Users/kinneko/Downloads/Raspi3/2017-04-10-raspbian-jessie-lite.img
-rw-r--r--  1 kinneko  staff   1.2G  4 10 10:58 /Users/kinneko/Downloads/Raspi3/2017-04-10-raspbian-jessie-lite.img
$ diskutil umountdisk /dev/disk3
Unmount of all volumes on disk3 was successful
$ sudo dd if=2017-04-10-raspbian-jessie-lite.img of=/dev/rdisk3 bs=100m
12+1 records in
12+1 records out
1297862656 bytes transferred in 95.709816 secs (13560392 bytes/sec)

ブートローダーでinitが妙な指定になっているのを殺す

こちらは簡単に対応できる。
VFATになっている/bootにあるcmdline.txtの内容を書き換える。
WindowsからでもMacからでも簡単。

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=84fa8189-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

のうちの、

init=/usr/lib/raspi-config/init_resize.sh

という部分だけを削除する。
書いていなければ、initは/sbin/initが自動選択される。
その実体は、systemdへのシンボリックリンクなので普通に起動する。


作業が終わったら取り出す。

$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected

起動中に勝手にリサイズするのを防ぐ

もう1つあって、起動中に以下が動く。

/etc/init.d/resizefs_once

その実体を呼んでいるのはこいつ。

/etc/rc3.d/S01resizefs_once

これをext4のセカンドパーティションから削除しておく必要がある。
WindowsMacから作業するのは困難だ。
別に起動用SDを用意したRaspiにUSBでマウントしてから作業するのがよさげ。

pi@raspberrypi:~ $ sudo mount /dev/sda2 /mnt/
pi@raspberrypi:~ $ ls -l /mnt/etc/init.d/resize2fs_once
-rwxr-xr-x 1 root root 560 Apr 10 09:27 /mnt/etc/init.d/resize2fs_once
pi@raspberrypi:~ $ sudo mv /mnt/etc/init.d/resize2fs_once /mnt/etc/init.d/_resize2fs_once

呼び出し元は削除してシステム終了しておく。

pi@raspberrypi:~ $ sudo ls -l /mnt/etc/rc3.d/S01resize2fs_once
lrwxrwxrwx 1 root root 24 Apr 10 09:27 /mnt/etc/rc3.d/S01resize2fs_once -> ../init.d/resize2fs_once
pi@raspberrypi:~ $ sudo rm /mnt/etc/rc3.d/S01resize2fs_once
pi@raspberrypi:~ $ sudo shutdown -h now

確認

あ、sshをオンにしとくの忘れた...
Macに再接続。

$ mkdir /Volumes/boot/ssh

再度起動確認。

pi@raspberrypi:~ $ sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7932477440 bytes, 15493120 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x84fa8189

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk0p1       8192   92159   83968   41M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      92160 2534887 2442728  1.2G 83 Linux

自動で拡張されていないのが確認できた。