2

我正在尝试以编程方式挂载使用 Fedora LiveUSB 创建器创建的磁盘映像,但遇到了一些问题。

据我所知,在主机系统之外挂载 LVM 快照非常困难。我有“原始”图像和持久快照,所以我认为它在技术上应该是可行的。

有任何想法吗?

4

2 回答 2

2

LVM 的卷概念不能跨系统移植,就像您可以将一些 md 驱动器放在一起并且它们仍然可以工作一样。每个 LVM vg 都有一个唯一标识符,您需要让系统的 LVM 接受它。换句话说,在您“告诉”它存在之前,LVM 无法“看到”卷组。一旦你这样做,它应该从那里一帆风顺。

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

我假设您正在考虑一起编写脚本,因为您只需要 lvm 工具集来实现这一点。

一份小小的离别礼物,可以帮助你在路上。将其保存为/usr/sbin/lvms,将所有者设置为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
于 2009-04-24T18:05:46.910 回答
2

Fedora LiveCD 或 LiveUSB 中的操作系统映像可以在暴露嵌入式根文件系统后挂载。Fedora 的 livecd-tools 包提供了一个实用程序liveimage-mount,它使用 Python 来执行此操作。

Fedora LiveOS 映像(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/overlay-<LABEL>-<UUID>
其中 LABEL 和 UUID 是设备分区标签和 UUID,如以下命令报告的那样,
        lsblk -o LABEL,UUID

一个可以以编程方式

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

    blockdev --getsz <basefs_loop>

  6. 然后使用这个通用命令设置一个设备映射器快照目标,

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

  7. 最后,将 Device-mapper 目标挂载到所需的挂载点,

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

于 2012-02-03T05:53:26.880 回答