web-dev-qa-db-ja.com

LVMとRAIDを使用したUbuntuパートマンレシピのプレシード

Ubuntu 12.04サーバーのインストールを事前に実行し、2台のドライブにRAID 1を作成し、LVMを使用してパーティションを作成するレシピを作成しようとしています。残念ながら、partmanは、LVMボリュームを作成するときに、LVMで使用できるレシピにパーティションがないと文句を言います(コンソールでは、使用できないレシピについて文句を言います)。

私が求めているレイアウトは、sdbとsdcのRAID 1(USBスティックからインストールするのでsdaが必要)で、LVMを使用してブート、ルート、スワップを作成します。

奇妙なことに、boot_lvのマウントポイントをホームに変更すると、レシピは正常に機能しますが(間違った場所にマウントすることを除けば)、/ bootでマウントすると失敗します

別の/ bootプライマリパーティションを使用できることは知っていますが、失敗する理由を誰かに教えてもらえます。以下のレシピと関連オプション。

## Partitioning using RAID
d-i     partman-auto/disk string /dev/sdb /dev/sdc
d-i     partman-auto/method string raid
d-i     partman-lvm/device_remove_lvm boolean true
d-i     partman-md/device_remove_md boolean true
#d-i     partman-lvm/confirm boolean true
d-i     partman-auto-lvm/new_vg_name string main_vg
d-i partman-auto/expert_recipe string           \
    multiraid ::                    \
        100 512 -1 raid         \
            $lvmignore{ }           \
            $primary{ }         \
            method{ raid }          \
        .                   \
        256 512 256 ext3            \
            $defaultignore{ }       \
            $lvmok{ }           \
            method{ format }        \
            format{ }           \
            use_filesystem{ }       \
            filesystem{ ext3 }      \
            mountpoint{ /boot }     \
            lv_name{ boot_lv }      \
        .                   \
        2000 5000 -1 ext4           \
            $defaultignore{ }       \
            $lvmok{ }           \
            method{ format }        \
            format{ }           \
            use_filesystem{ }       \
            filesystem{ ext4 }      \
            mountpoint{ / }         \
            lv_name{ root_lv }      \
        .                   \
        64 512 300% linux-swap          \
            $defaultignore{ }       \
            $lvmok{ }           \
            method{ swap }          \
            format{ }           \
            lv_name{ swap_lv }      \
        .

d-i partman-auto-raid/recipe string \
    1 2 0 lvm -                     \
          /dev/sdb1#/dev/sdc1       \
    .                               
d-i     mdadm/boot_degraded boolean true
#d-i     partman-md/confirm boolean true
#d-i     partman-partitioning/confirm_write_new_label boolean true
#d-i     partman/choose_partition select Finish partitioning and write changes to disk
#d-i     partman/confirm boolean true
#d-i     partman-md/confirm_nooverwrite  boolean true
#d-i     partman/confirm_nooverwrite boolean true 
4
Swav

以下のpartman-auto-lvmのコードスニペットを少しグーグルで見つけた後、lvmレシピがLVMで/ bootパーティションを検出すると、LVMで/ bootを使用することは完全に可能ですが、救済されるようです。私の調査によると、GRUB 2より前はLVMから起動できなかったため、個別のプライマリブートパーティションが必要でした。

# Make sure a boot partition isn't marked as lvmok
if echo "$scheme" | grep lvmok | grep -q "[[:space:]]/boot[[:space:]]"; then
     bail_out unusable_recipe
fi

回避策は、マウントポイントを指定せず、セットアップ画面から手動で実行することです。これにより、無人インストールの目的がある程度損なわれます。

1
Swav

試行錯誤の末、以下のレシピと設定にたどり着きましたが、それを使用してサーバーを正常にプリシードしました。現在のところ、確認なしでディスクを上書きするため、実際にテストする前にオプションを微調整してください。

## Partitioning using RAID
# The method should be set to "raid".
d-i     partman-auto/method string raid
# Specify the disks to be partitioned. They will all get the same layout,
# so this will only work if the disks are the same size.
d-i     partman-auto/disk string /dev/sda /dev/sdb

d-i     partman-lvm/device_remove_lvm boolean true
d-i     partman-md/device_remove_md boolean true
d-i     partman-lvm/confirm boolean true
d-i     partman-auto-lvm/new_vg_name string main_vg

# Next you need to specify the physical partitions that will be used. 
d-i partman-auto/expert_recipe string           \
    multiraid ::                    \
        256 512 256 raid            \
            $lvmignore{ }           \
            $primary{ }         \
            method{ raid }          \
            raidid{ 1 }         \
        .                   \
        4000 5000 -1 raid           \
            $lvmignore{ }           \
            method{ raid }          \
            raidid{ 2 }         \
        .                   \
        2000 5000 -1 ext4           \
            $defaultignore{ }       \
            $lvmok{ }           \
            method{ format }        \
            format{ }           \
            use_filesystem{ }       \
            filesystem{ ext4 }      \
            mountpoint{ / }         \
            lv_name{ root_lv }      \
        .                   \
        512 512 300% linux-swap         \
            $defaultignore{ }       \
            $lvmok{ }           \
            method{ swap }          \
            format{ }           \
            lv_name{ swap_lv }      \
        .


# Last you need to specify how the previously defined partitions will be
# used in the RAID setup. Remember to use the correct partition numbers
# for logical partitions. RAID levels 0, 1, 5, 6 and 10 are supported;
# devices are separated using "#".
# Parameters are:
# <raidtype> <devcount> <sparecount> <fstype> <mountpoint> \
#          <devices> <sparedevices>

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



d-i     mdadm/boot_degraded boolean true
d-i     partman-md/confirm boolean true
d-i     partman-partitioning/confirm_write_new_label boolean true
d-i     partman/choose_partition select Finish partitioning and write changes to disk
d-i     partman/confirm boolean true
d-i     partman-md/confirm_nooverwrite  boolean true
d-i     partman/confirm_nooverwrite boolean true 
1
Swav