代码之家  ›  专栏  ›  技术社区  ›  lfaraone

安装LVM覆盖/快照?[关闭]

  •  2
  • lfaraone  · 技术社区  · 15 年前

    我正在尝试以编程方式挂载一个用FedoraLiveUSB Creator创建的磁盘映像,我遇到了一些问题。

    据我所知,在主机系统之外装载LVM快照非常困难。我既有“原始”的图像,也有持久的快照,所以我认为从技术上讲这是可能的。

    有什么想法吗?

    2 回复  |  直到 9 年前
        1
  •  2
  •   nobody    9 年前

    LVM的卷概念在系统间是不可移植的,在这个意义上,您可以将一些MD驱动器组合在一起,它们仍然可以工作。每个LVM VG都有一个唯一的标识符,您需要让系统的LVM接受它。换句话说,在您“告诉”卷组的存在之前,LVM无法“看到”卷组。一旦你做到了,从那里开始航行应该是平稳的。

    快照由记录的扇区增量组成。您是正确的,您应该能够让原始快照和快照同时出现来显示您的快照。快照本身不起作用。

    我假设您正在一起编写脚本,因为您只需要使用lvm工具集就可以实现这一点。

    一份临别的小礼物,帮助你上路。将其保存为/usr/sbin/lvms,将owner设置为root/root,chmod 755,并使用它保存指尖。


    #!/bin/sh
    #lvms command - consolidates all LVM views into a single command
    pvscan 1>/dev/null 2>/dev/null
    vgscan 1>/dev/null 2>/dev/null
    lvscan 1>/dev/null 2>/dev/null
    echo "Available Physical Volumes - - - - - - -"
    pvs
    echo
    echo "Active Volume Groups - - - - - - - - - -"
    vgs
    echo
    echo "Active Logical Volumes - - - - - - - - -"
    lvs
    
        2
  •  1
  •   FGrose    9 年前

    在暴露嵌入的根文件系统之后,可以安装FedoraLiveCD或LiveUSB中的操作系统映像。Fedora的LiveCD工具包提供了一个实用程序 liveimage-mount 这是使用python实现的。

    这个 Fedora LiveOS image (Live CD/USB操作系统)技术使用设备映射器快照目标生成根文件系统的压缩只读副本,以便在启动时进行读写装载,在启动时,文件系统写入将进入临时或永久的写入覆盖副本。一切都是用 dmsetup 命令。不涉及LVM(尽管它也使用设备映射器技术)。

    安装了LiveOS的设备在其基本文件系统中会有一个/LiveOS/目录。/liveos/squashfs.img文件包含一个压缩(和只读)的ext4文件系统,该文件本身包含一个/liveos/目录,在该目录中,名为ext3fs.img的文件中包含分布式根文件系统。因此,squashfs.img文件包含一个目录和文件/liveos/ext3fs.img,它本身包含根文件系统(带有/bin、/boot、/dev、/etc、/home,…)。

    如果设备上安装了永久覆盖文件,它将另存为
    /LiveOS/覆盖-<label>-<uuid>
    其中label和uuid是由以下命令报告的设备分区标签和uuid,
    lsblk -o LABEL,UUID

    一个人可以通过编程

    1. 循环装入squashfs.img文件,然后
    2. 为mount 1中的ext3fs.img文件设置循环设备。
    3. 如果没有持久覆盖,您可以简单地从安装ext3fs.img文件或循环设备
      步骤2(只读基本图像)。
    4. 如果存在持久覆盖文件,请为其设置循环设备。
    5. 确定以512字节扇区为单位的根文件系统的大小,

      blockdev --getsz <basefs_loop>

    6. 然后使用此常规命令设置设备映射器快照目标,

      dmsetup create <target_name> --table "0 <size> snapshot <basefs_loop> <overlay_loop> P 8"

    7. 最后,将设备映射器目标安装到所需的安装点上,

      mount /dev/mapper/<target_name> <mount point>