
テキスト/コンソール インストーラーを使用して、KVM/libvirt VM に Ubuntu サーバーをインストールしています。
2 つの LVM ボリュームをルートとして渡し、仮想ディスクとして VM にスワップするつもりです。
これらは および として正しく検出されますvda
がvdb
、インストーラーはこれらをディスクとしてパーティション分割するように強制しているようで、これでは LVM の柔軟性が損なわれます。
パーティションを使用する代わりに、仮想ディスクを直接フォーマットして Ubuntu をインストールするにはどうすればよいですか。それとも、これは悪い考えですか?
モチベーション:
全体的なポイントは、ストレージ階層から不必要な抽象化レベルを削除して複雑さを軽減することです。
- 物理ドライブ:
host:/dev/sd{a,b}
- パーティション分割:
host:/dev/sd{a,b}1
- sw-raid:
host:/dev/md1
- lvm:
host:/dev/vg0/mylv_root
- VirtIO ディスク
guest:/dev/vda
- パーティショニング:
guest:/dev/vda1
- ファイルシステム:
guest:/
このレイアウトでは、単一の VM に追加のスペースを割り当てるときに、次の手順を実行する必要があります。
lvresize
parted
特に醜いresize2fs
割り当てられたスペースを逆に減らす(これはさらに醜い)。
バックアップの場合 ( を使用)、 psusi で説明されているように、lvcreate --snapshot
追加の手順があります。kpartex
この抽象化がどのような価値をもたらすのかわからないので、方程式から 6. を削除したいと思います。ただし、複雑さが増し、パフォーマンスに影響が出る可能性があり、小さなスペースが無駄になるため、コストがかかります。
ハッキーな解決策:
これを使用するとkpartx
、ルート ファイル システムを「ブートストラップ パーティション」(別の一時論理ボリューム内) からターゲット論理ボリュームに移動し、直接カーネル ブートを介してブートすることができました。
kpartx -a /dev/vg0/mylv_bootstrapper
dd if=/dev/mapper/vg0-mylv_bootstrapper1 of=/dev/vg0/mylv_root bs=4M
e2fsck -f /dev/vg0/mylv_root
# Edit fstab inside /dev/vg0/mylv_root accordingly
resize2fs /dev/vg0/mylv_root
kpartx -d /dev/vg0/mylv_bootstrapper
しかし:
- これは妙にハッキーな感じがします。
- カーネルがアップグレードされるたびに、ホスト内のゲストのカーネル バージョンを手動で更新する必要があるため、直接カーネル ブートのアイデアはあまり好きではありません。
答え1
そうですね、LVM であるかどうかに関係なく、スペースをパーティション分割/フォーマットする必要があります。
はい、KVM はデバイスを「vda」および「vdb」として認識します。
一般的に、KVM は raw パーティション / LVM を使用しますが、仮想ディスクを使用する方がはるかに信頼性が高いと思います。同じスペースを占有し、仮想ディスクで常に LVM を使用したり、仮想ディスクのサイズを変更したりできます。
答え2
実際には、簡単な答えがあることがわかりました。論理ボリュームがフォーマットされている場合 (例host# mkfs.ext4 /dev/vg0/mylv_root
)、インストーラーはそれを検出し、「仮想ディスクのパーティション 1」として使用できるようにします。その後、パーティションを再フォーマットすることもできます。
ただし、Grub のインストールは失敗しますが、代わりに直接カーネル ブートを使用できます。