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のセカンドパーティションから削除しておく必要がある。
WindowsやMacから作業するのは困難だ。
別に起動用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
確認
$ 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
自動で拡張されていないのが確認できた。