背景
私の目標は使用することです包装機セキュリティを強化するために、さまざまなファイルシステムに複数のパスを搭載した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/xvdf
EBSボリュームのコンテンツから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を使用してカーネルを起動していることを確認してください。