我有一台作为 kvm 主机运行的 Ubuntu 服务器。该主机有三个 1.5 TB 磁盘,主机使用 lvm 并有一个 4 TB 卷组,我在该卷组上创建了一个名为 nfsserver 的 3 TB 逻辑卷。
我想创建一个运行 ubuntu 服务器的客户机,我将使用它作为 3 TB 文件服务器。
Ubuntu vmbuilder 使用 mbr 作为客户文件系统,无法处理超过 2TB 的硬盘。
我搜索过,但找不到任何指南或操作说明,甚至没有提到如何使用 GPT 作为客户文件系统来创建客户机。
我还缺少其他解决方案吗?
我用来创建客户虚拟机的命令:
vmbuilder kvm ubuntu --suite=trusty --flavour=virtual --raw=/dev/server1/nfsserver --rootsize=3000000 --domain=nfsserver --arch=amd64 --mirror=http://dk.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --user=admin --name=Admin --pass=PassXXXX --addpkg=unattended-upgrades --addpkg=acpid --addpkg=linux-image-generic --addpkg=openssh-server --mem=1024 --hostname=nfsserver --bridge=br0
设置了 rootsize 后,vmbuilder 会失败,并显示“分区长度...超出 msdos-partition-table 规定的最大值”。
如果没有它,客户机可以构建并正常工作,但只能使用默认大小的磁盘。在客户机系统内部,fdisk -l 可以看到磁盘 (sda) 为 3TB,而 sda1 根分区仅使用了其中的几 GB。我尝试调整分区大小,但失败了,并出现类似的“msdos.. max..”错误。
我知道我可以从客户系统内部保存小的 sda1 分区,重新分区文件系统,并将其更改为使用 gpt 并将保存的 sda1 分区复制回(到新的 3TB 根分区)。但这对我来说似乎是一个困难的解决方法,我想一定有一个更简单的解决方案。
主机上lvdisplay:
--- Logical volume ---
LV Path /dev/server1/nfsserver
LV Name nfsserver
VG Name server1
LV UUID F8wWeB-GSUI-rxd3-TDQ1-yjcI-af50-s9jdXZ
LV Write Access read/write
LV Creation host, time server1, 2015-02-02 15:56:20 +0100
LV Status available
# open 0
LV Size 3.04 TiB
Current LE 797964
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
编辑:以下是 Thomas 的回答对解决我的问题非常有帮助,为了方便其他人浏览此问题,下面是我所做工作的详细描述:
我有一个名为 server1 的 VG,其空间为 4TB。为了给客户机准备一些磁盘,我创建并格式化了一些 LV:
lvcreate -L 3000G -n nfsserver server1
lvcreate -L 6G -n nfsserver-root server1
lvcreate -L 200M -n nfsserver-boot server1
lvcreate -L 2G -n nfsserver-swap server1
mkfs.ext4 /dev/mapper/server1-nfsserver-boot
mkfs.ext4 /dev/mapper/server1-nfsserver-root
mkfs.ext4 /dev/mapper/server1-nfsserver
mkswap -f /dev/mapper/server1-nfsserver-swap
我安装了 virtinstall(apt-get install virtinst),因为您不能为此使用 vmbuilder,因为它会创建分区,而正如 Thomas 指出的那样,我们实际上不需要/不想要为此创建分区。使用 virt-install,您可以创建一个客户机并在客户机启动时在其中运行 ubuntu 服务器安装 - 这可以让您控制不同磁盘的用途。但是,您确实需要在磁盘上创建一个分区以用作 /boot,因为安装程序无法自行创建分区,或者无法安装 Grub。因此,我们在创建客户机之前在主机上使用 fdisk:
user@server1:~$ sudo fdisk /dev/mapper/server1-nfsserver-boot
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x95a40881.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-409599, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-409599, default 409599):
Using default value 409599
Command (m for help): p
Disk /dev/mapper/server1-nfsserver-boot: 209 MB, 209715200 bytes
255 heads, 63 sectors/track, 25 cylinders, total 409600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x95a40881
Device Boot Start End Blocks Id System
/dev/mapper/server1-nfsserver-boot1 2048 409599 203776 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
user@server1:~$ sudo fdisk -l /dev/mapper/server1-nfsserver-boot
Disk /dev/mapper/server1-nfsserver-boot: 209 MB, 209715200 bytes
127 heads, 37 sectors/track, 87 cylinders, total 409600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x95a40881
Device Boot Start End Blocks Id System
/dev/mapper/server1-nfsserver-boot1 2048 409599 203776 83 Linux
user@server1:~$
我忽略了 fdisk 的警告,一切正常。我下载了最新的 Ubuntu LTS
wget http://releases.ubuntu.com/14.04.1/ubuntu-14.04.1-server-amd64.iso
并运行 virt-install:
virt-install --name=nfsserver --ram=1024 --os-type=linux --os-variant=ubuntutrusty --cdrom=/home/user/ubuntu-14.04.1-server-amd64.iso --disk path=/dev/mapper/server1-nfsserver-boot --disk path=/dev/mapper/server1-nfsserver-root --disk path=/dev/mapper/server1-nfsserver-swap --network bridge=br0 --vcpus=1 --vnc --noautoconsole
它运行非常快,并从下载的 iso 启动客户机。使用与主机位于同一网络上的台式计算机的 virt-manager,我可以连接到客户机并完成安装。当您进入分区时,安装程序可以将所有 LV 视为磁盘,只需告诉应该将哪个用于什么用途即可。
我随后添加了 3TB 磁盘:关闭客户机,编辑客户机并重新启动它:
virsh shutdown nfsserver
virsh edit nfsserver
这将打开定义来宾的客户 xml 文件,我将 3TB LV 作为额外磁盘添加到已存在的其他磁盘下方:
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/mapper/server1-nfsserver'/>
<target dev='vdd' bus='virtio'/>
</disk>
然后
virsh start nfsserver
最后,您可以在客户端中安装新的驱动器:
sudo mount /dev/vdd /your/mount/point
如果它安装,则为了使其永久安装,请将以下行添加到您的 /etc/fstab:
/dev/vdd /your/mount/point ext4 errors=remount-ro 0 0
就是这样!现在您有一个拥有巨大磁盘的客户端。感谢 Thomas 的建议,如果您想克隆您的客户端或调整驱动器大小,现在您也可以非常轻松地完成任务。
答案1
我只是不建议您在单个 3 TB 磁盘上安装客户系统。GPT 可以解决您的问题,但我个人认为,如果您使用更模块化的方法,您会获得更多好处,而且我们到底为什么需要在虚拟机中分区?;) 好吧,MBR 仍然可以用于启动 :) 在过去的几年里,我发现以下设置在客户机方面最灵活:
- /dev/sda(100 - 200 MB 磁盘,带有普通旧 MBR,仅用于启动)
- /dev/sda1 安装在 /boot 上(ext4 或类似)
- /dev/sdb 安装在 / 上(4 - 6 GB,无分区,直接用 ext4 或类似格式格式化,用于基础系统)
- /dev/sdc 安装在 /srv 上(你的情况是~3 TB,没有分区,直接用 ext4 或类似格式格式化)
- /dev/sdX:交换或/var 或其他内容,并且只有在我们需要时才需要它,同样:无分区
首先,我将使用 sda 和 sdb 安装一个基本的 ubuntu 机器。由于此设置仅占用大约 4 GB,因此您也可以将其用作其他客户机的模板。完成设置后,将 3 TB 磁盘添加到您的客户机,以便将其识别为 /dev/sdc。直接格式化 /dev/sdc 并将其挂载在 /srv(或您喜欢的任何其他位置)下。
当不使用分区时,您也可以随时调整磁盘大小,即使系统正在运行,甚至是 / 分区。
希望这对您有帮助,祝您 KVM 愉快!