如何在磁盘映像上尝试 LVM?

如何在磁盘映像上尝试 LVM?

我想编写一个脚本,用于在具有两个硬盘的计算机上使用 LVM(创建物理卷、卷组等)。但是,我的 PC 中没有第二个硬盘,也不想添加第二个硬盘。

除了使用 Virtual Box 之外,还有其他方法可以模拟这种情况吗?

我希望能够操作一些虚拟物理卷、卷组,即使用 pvcreate、、vgcreatelvcreate

答案1

使用稀疏文件代替磁盘

如果您想尝试使用 LVM,但不更改磁盘上的分区,是的,这是可以做到的。创建几个可以用作“虚拟磁盘”的稀疏文件。然后在这些文件上创建分区,并使用磁盘映像设置循环设备。从那里,您可以在指向磁盘映像的循环设备上尝试使用 LVM。


制作稀疏文件
在终端中运行以下命令来创建两个稀疏文件。稀疏文件总是报告它们是预定的固定大小,但实际上,它们最初使用 0 字节的磁盘空间。随着它们的写入,它们可以增长,直到达到预定的大小或者包含它们的磁盘已经没有更多空间了。

  • truncate -s 1T /tmp/disk1.img
  • truncate -s 1T /tmp/disk2.img

在磁盘映像上创建分区
现在您有两个可以像磁盘一样对待的文件。使用 fdisk 对这些映像进行分区。如果您不知道如何使用 fdisk 创建分区,您可以查看本教程或者运行以下命令,这将在两个磁盘映像上创建两个各 512G 的分区。

sudo sfdisk /tmp/disk1.img <<< "$(base64 -d <<< "bGFiZWw6IGRvcwpsYWJlbC1pZDogMHhkODdlMWQ1MwpkZXZpY2U6IC90bXAvZGlzazEuaW1nCnVuaXQ6IHNlY3RvcnMKCi90bXAvZGlzazEuaW1nMSA6IHN0YXJ0PSAgICAgICAgMjA0OCwgc2l6ZT0gIDEwNzM3NDE4MjQsIHR5cGU9ODMKL3RtcC9kaXNrMS5pbWcyIDogc3RhcnQ9ICAxMDczNzQzODcyLCBzaXplPSAgMTA3MzczOTc3NiwgdHlwZT04Mwo=")"
sudo sfdisk /tmp/disk2.img <<< "$(base64 -d <<< "bGFiZWw6IGRvcwpsYWJlbC1pZDogMHg4ZWMwYWYyZgpkZXZpY2U6IC90bXAvZGlzazIuaW1nCnVuaXQ6IHNlY3RvcnMKCi90bXAvZGlzazIuaW1nMSA6IHN0YXJ0PSAgICAgICAgMjA0OCwgc2l6ZT0gIDEwNzM3NDE4MjQsIHR5cGU9ODMKL3RtcC9kaXNrMi5pbWcyIDogc3RhcnQ9ICAxMDczNzQzODcyLCBzaXplPSAgMTA3MzczOTc3NiwgdHlwZT04Mwo=")"

在循环设备上设置图像
接下来,我们将磁盘映像连接到一些循环设备,以便我们可以使用分区。在终端中,运行以下命令(losetup -f返回下一个可用的循环设备)

  • sudo losetup -P $(losetup -f) /tmp/disk1.img
  • sudo losetup -P $(losetup -f) /tmp/disk2.img

确定我们的分区连接到哪些设备
现在我们需要确定哪些循环设备指向我们的分区。在终端中运行以下命令:

  • sudo losetup -a | grep -P "disk[12].img | cut -f1 -d:"
    输出
    /dev/loop3
    /dev/loop4
    
    这些是我们将在下一个命令的输出中寻找感兴趣的循环设备
  • sudo blkid
    与我的循环设备相对应的输出
    /dev/loop3:PTUUID="d87e1d53" PTTYPE="dos"
    /dev/loop3p1:PARTUUID="d87e1d53-01"
    /dev/loop3p2:PARTUUID="d87e1d53-02"
    /dev/loop4:PTUUID="8ec0af2f" PTTYPE="dos"
    /dev/loop4p1:PARTUUID="8ec0af2f-01"
    /dev/loop4p2:PARTUUID="8ec0af2f-02"
    
    因此我的磁盘 1 分区位于/dev/loop3p1/dev/loop3p2,而我的磁盘 2 分区位于/dev/loop4p1/dev/loop4p2。您可能已经可以从这里继续,但我将继续使用示例 LVM 配置。

LVM 设置示例
我将在我的 LVM 配置中使用磁盘 1 分区 1 和磁盘 2 分区 2。从终端运行以下命令,根据需要替换循环设备的路径:

  • 设置物理卷:sudo pvcreate /dev/loop3p1 /dev/loop4p2
  • 设置卷组:vgcreate my_volume_group /dev/loop3p1 /dev/loop4p2
  • 设置几个分区:
    • 分区1:sudo lvcreate --name root --size 30G my_volume_group
    • 分区2:sudo lvcreate --name swap --size 4G my_volume_group
    • 分区3:sudo lvcreate --name home --extents +100%free my_volume_group

现在我有一个具有 1TB 空间的单个卷组,这些空间取自 disk1.img 上的 512G 和 disk2.img 上的 512G。可以通过运行以下命令进行验证:

  • sudo pvs输出
    PV VG Fmt 属性 PSize PFree
    /dev/loop3p1 my_volume_group lvm2 a-- 512.00g 0
    /dev/loop4p2 my_volume_group lvm2 a-- 512.00g 0
    
  • sudo vgs输出
    VG #PV #LV #SN 属性 VSize VFree
    我的卷组 2 3 0 wz--n- 1023.99g 0
    
  • sudo lvs输出
    LV VG 属性 LSize 池原点数据% Meta% 移动日志 Cpy% 同步转换
    主页我的卷组-wi-a----- 989.99g                                                    
    root 我的卷组-wi-a----- 30.00g                                                    
    交换我的卷组-wi-a----- 4.00g                                                    
    

相关内容