0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TX120 S3pにpreseedでRAID1構成なUbuntu 18.04.2を導入してみた

Posted at

はじめに

以前に構成したUbuntu 16.04とほぼ同じ構成でPreseedを設定して、Ubuntu 18.04を上書きインストールしようとしたところsoftware raid (raid1)を構成するところで停止してしまいました。

問題はいくつかあったものの、手動でLVMとMD構成を停止する必要があったので、その顛末をまとめています。

参考文献

  1. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=740271
  2. https://serverfault.com/questions/684684/hard-drive-is-not-detected-at-early-stage-of-unattended-installation

対応方針

既にHDDx2構成のTX120 s3pでUbuntu 16.04が動いていて、software raidでraid1を構成しています。

  • /dev/sd{ab}1 → /dev/md0 → /boot
  • /dev/sd{ab}2 → /dev/md1 → /

元々Preseedで導入しているので、同様にubuntu-18.04.2-server-amd64.isoをベースにpreseed設定を有効にしたイメージから、上書きインストールしようとしたところraid1を構成するところでエラーになっています。

問題はいくつかあって、preseedの構成によって変化しましたが、概ね以下のようなものでした。

  1. /boot用の/dev/sd{ab}1に全容量が割り当てられてしまう。
  2. インストーラーが動いた時点で/dev/md127が認識されていて、新しく/dev/md*を作成しようとして作れないとエラーになる

似たような問題はdebian側でも指摘されていて、同じ名前でVGを作成するなら手動で削除してあげないといけないとか、ddでMBRなパーティションテーブルを削除してあげたらどう?とか、でも同じディレクトリ構成だとmdadmでは引き続き/dev/md127が最初から認識されてしまうとか、いろいろ問題があるようでした。

そこで、preseedのpartman/early_commandを使って次のような動作をするようにしました。

  1. mdadmを利用して認識されている/dev/md*デバイスを削除(--stop)する

失敗例

LVMを利用しない単純なSoftware RAID1構成でも、次のようにすると最初に/dev/md0, /dev/md1が構成されて、"partman-auto-raid/recipe"を実行する段階で、md2を構成しようとして失敗しています。

d-i partman-auto/expert_recipe string      \
           boot-root ::                    \
             500 10 600 raid               \
                $primary{ }                \
                method{ raid }             \
		format{ }                  \
             .                             \
             12000 100 -1 raid             \
	        $primary{ }                \
                method{ raid }             \
		format{ }                  \
            .

d-i partman-auto-raid/recipe string \
    1 2 0 ext2 /boot                \
          /dev/sda1#/dev/sdb1       \
    .                               \
    1 2 0 ext4 /                    \
          /dev/sda2#/dev/sdb2       \
    .

新規にディスクを準備すれば、この状態でも問題なくインストールができていますが、そのまま繰り返すと失敗します。

対応策の実装

参考文献に上げたドキュメントなどをみると、early_commandを実行してmdデバイスを解除すれば問題ないように思えますが、実際にはデバイスが解除できませんでした。

d-i preseed/early_command string /bin/sh -c 'for dev in /dev/md*; do mdadm --stop $dev ; done' || true

この原因は、私が勝手にpartmanの部分をpreseedにしていたためで、このために、mdadmパッケージが導入される前に実行されるpreseed/early_commandを実行してしまいました。

この点を修正して、mdadmを利用してsuperblockの情報を削除しています。

d-i preseed/early_command string umount /media || true
d-i partman/early_command string /bin/sh -c 'for mdev in /dev/md[0-9]* ; do mdadm --stop $mdev ; done ; mdadm --misc --zero-superblock /dev/sd[a-z][1-9]' || true

この点についていろいろ調べていく中で、次のような点が気になりました。

  1. /bootを別パーティションにする必要はなさそう
  2. partman-auto/expert_recipeでデバイス名を記述したくない

そのためexpert_recipe, partman-auto-raid/recipeの内容は次のようになりました。

d-i partman-auto/expert_recipe string  \
           bootroot ::                 \
             10240 20 -1 raid          \
                $primary{ }            \
                $bootable{ }           \
                raidid{ 1 }            \
                method{ raid }         \
             .

d-i partman-auto-raid/recipe string \
    1 2 0 ext4 /                    \
          raidid=1                  \
    .

d-i partman-auto/choose_recipe select bootroot

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?