Amazon Linux用のブータブルEBSボリュームを作成する方法

Amazon Linux用のブータブルEBSボリュームを作成する方法

背景

私の目標は使用することです包装機セキュリティを強化するために、さまざまなファイルシステムに複数のパスを搭載したAmazonマシンイメージ(AMI)を作成します。たとえば、/tmpこのオプションはファイルシステムにインストールするために使用する必要がありますnoexec

AMIを作成するために自動化されたプロセスを作成したいのは、インスタンス自体から再インストールコマンドを実行できないことを意味するので、代わりにPackerを使用しました。Amazon chroot Builder。これは、EC2インスタンスを実行し、そのEC2インスタンスでPackerを実行することを意味します。これにより、PackerはソースAMIで使用されるEBSスナップショットからインポートされたEBSボリュームをマウントします。これで、マウントされたEBSボリュームでいくつかのタスクを実行する必要があります。

私のインスピレーションは以下から来ていますこのトピックに関する最近のプレゼンテーション誰のスライドがあるかhttp://wernerb.github.io/hashiconf-hardening

私の質問

私のEBSボリューム(ブロックデバイス)が最初にマウントされたときにここに表示されるパーティションは次のとおりですgdisk -l /dev/xvdf

Disk /dev/xvdf: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 726A877B-31D7-4C00-99E4-5A2CCB8E0EAD
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            4096        16777182   8.0 GiB     8300  Linux
 128            2048            4095   1024.0 KiB  EF02  BIOS Boot Partition

次に、次の操作を行います。

  • 「Linux」パーティションの削除sgdisk --delete 1 /dev/xvdf
  • LVMボリュームグループの作成lvm vgcreate -y main /dev/xvdf1
  • 一連のLVM論理ボリュームを作成し、次のコマンドを使用してフォーマットします。/sbin/mkfs.ext4 -m0 -O ^64bit "/dev/main/lvroot"
  • すべてマウントし、複数のファイルをコピーします。
  • 接続されたEBSボリュームは/etc/fstab次のように更新されます(/mnt/ebs-volume/etc/fstabホストシステムの観点から見たもの)。

/etc/fstab /dev/xvdf1に書き込みます。

#
/dev/mapper/main-lvroot         /               ext4    defaults,noatime    1   0
tmpfs                           /dev/shm        tmpfs   defaults            0   0
devpts                          /dev/pts        devpts  gid=5,mode=620      0   0
sysfs                           /sys            sysfs   defaults            0   0
proc                            /proc           proc    defaults            0   0
/dev/mapper/main-lvvar          /var            ext4    defaults            0   0
/dev/mapper/main-lvvarlog       /var/log        ext4    defaults            0   0
/dev/mapper/main-lvvarlog/audit /var/log/audit  ext4    defaults            0   0
/dev/mapper/main-lvhome         /home           ext4    defaults            0   0
/dev/mapper/main-lvtmp          /tmp            ext4    defaults            0   0

最後に、Packerは/dev/xvdfEBSボリュームのコンテンツからAmazon Machine Image(AMI)をマウント解除して作成します。

新しいAMIを起動しても実際に起動しないことを除いて、これまでは非常に良いです。 SSH経由で接続できず、AWS経由の「システムログの表示」には何も表示されません。だから私は「BIOSブートパーティション」を含む「128」パーティションを混乱させたと仮定します。また、新しいEC2インスタンスが起動したときにLVMによって作成された論理ボリュームを「有効にする」方法も混乱しています。

デフォルトでは、ブートパーティションに何が必要なのかという精神的なモデルはありません。 LVM自体を使用してルートボリュームを作成する場合、EC2インスタンスはどのようにLVMを起動して実行しますか?に特別なパーティションを作成する必要があるかどうか疑問に思います/boot。しかし、そこに何を入れるべきですか?私のコンピュータには、実際には/dev/xvdf「BIOSブートパーティション」、「既存」(ext4形式)パーティション/boot、LVM管理パーティション(他のすべてのエントリ用)の3つのパーティションが必要ですか?

答え1

問題はLVMとは無関係であることがわかりました。のようにこの変更によってブロックデバイスが起動しないのはなぜですか?、実際の問題は、/2/bootつの別々のパーティションに分割すると、MBR構成がもはや正しくないということです。この問題を解決するためにGRUB構成ファイルを更新できなかったため、最終的に同じパーティションを維持し、別の/パーティションを別々に追加する必要がありました。/boot理想的ではありませんが効果的です。

答え2

LVM 論理ボリュームのブートの鍵は、(もちろん) カーネルから LVM をサポートし、LVM サポートを含む initrd からブートすることです。 initrdを作成するのは簡単なことではないので、LinuxディストリビューションがLVMから起動するように設定されていることを確認することをお勧めします。また、EC2がinitrdを使用してカーネルを起動していることを確認してください。

関連情報