AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 669642
Accepted
Teatree
Teatree
Asked: 2021-09-19 18:39:38 +0800 CST2021-09-19 18:39:38 +0800 CST 2021-09-19 18:39:38 +0800 CST

LVM:如何克隆多磁盘加密逻辑卷?

  • 772

我正在运行 Arch Linux。我想在单个卷组(LVM 上的 LUKS)中克隆 2 个磁盘加密的逻辑卷。有一个小问题。我想交换一些驱动器。

我有:

  • VG1: LV: PV(OldDrive1) + PV(OldDrive2)
sda (OldDrive1)
    -vg1-luks_encrypted_lv
sdb (OldDrive2)
    -vg1-luks_encrypted_lv

我还有另外两个驱动器(NewDrive1 和 NewDrive2)。我想创建一个 VG2,它是 VG1 的克隆。但是,我想交换一些驱动器。所以我想要:

  • VG1:LV:PV(旧驱动器1)+ PV(新驱动器1)
  • VG2: LV: PV(OldDrive2) + PV(NewDrive2)
sda (OldDrive1)
    -vg1-luks_encrypted_lv
sdb (OldDrive2)
    -vg2-cloned_luks_encrypted_lv
sdc (NewDrive1)
    -vg1-luks_encrypted_lv
sdd (NewDrive2)
    -vg2-cloned_luks_encrypted_lv

我目前的计划是克隆每个驱动器。我以前在考虑使用 dd,但是在阅读了一些内容之后,也许我需要使用 pvmove?:

  • 旧驱动器 1 -> 新驱动器 1
  • 旧驱动器 2 -> 新驱动器 2

然后我可以只交换 LVM 中的物理驱动器,因为驱动器是逐位克隆的吗?我担心我错过了什么。我如何将新闻驱动器合并到 LV 中?我会很感激一些建议,因为我不想丢失任何数据。谢谢。


编辑:

@telcoM 的回答效果很好。非常感谢。我用的是网上的方法。如果有人想做类似的事情,那么值得注意的事情很少。

在第 7 步:

现在lvconvert -m默认是raid1,不是lvm自己的镜像系统。阅读man lvconvert了解更多详情。由于我想立即拆分镜像,因此使用 lvm 的遗留镜像和存储在内存中的镜像日志要容易得多:

lvconvert --type mirror -m +1 --mirrorlog core vg1/luks_encrypted_lv OldDrive2 NewDrive2

请记住,--mirrorlog core将镜像日志放入内存中。所以在运行之前不要关闭你的电脑,lvconvert --splitmirrors否则你会丢失你的mirrorlog文件。

在第 9 步:

在您这样做之前,vgsplit您需要卸载文件系统并停用逻辑卷。

在第 11 步:

大多数人可能都意识到了这一点,但是您需要$uuid在运行之前分配一个 UUID cryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx。先运行类似的东西uuid=$(uuidgen)。

lvm encryption
  • 2 2 个回答
  • 349 Views

2 个回答

  • Voted
  1. Best Answer
    telcoM
    2021-09-20T04:10:38+08:002021-09-20T04:10:38+08:00

    “需要”是一个强有力的词——实现你想要的东西的方法不止一种。

    使用pvmove,您可以在使用加密的 LV 时在线进行。

    1.)pvcreate新驱动器1

    2.)vgextend VG1 NewDrive1

    3.) pvmove OldDrive2(有效的意思是:“将任何 LVM 分配的范围从 OldDrive2 移动到 VG1 中的任何其他驱动器,以便 OldDrive2 变得完全未分配,如果可能的话。”这将需要一些时间:您可能希望在一个screen/tmux带有-verbose 选项的会话。)

    4.) 使用pvs或pvdisplay OldDrive2确保 OldDrive2 现在完全未分配。

    5.)pvcreate NewDrive2

    6.)vgextend VG1 NewDrive2

    7.) 对于 VG1 中的每个 LV:(lvconvert -m +1 VG1/LVx OldDrive2 NewDrive2“从 VG1/LVx 创建一个镜像,为来自 OldDrive2 和 NewDrive2 的镜像分配空间”)。如果磁盘镜像日志没有空间,您可能需要在--mirrorlog core此处使用选项。

    8.)一旦镜像同步,对于 VG1 中的每个 LV:(lvconvert --splitmirrors 1 --name LVcopyx VG1/LVx OldDrive2 NewDrive2“拆分位于 OldDrive2 和/或 NewDrive2 上的 LVx 的一个镜像并将其命名为“LVcopyx”以避免名称冲突。)

    9.) vgsplit VG1 VG2 OldDrive2 NewDrive2(“将 OldDrive2 和 NewDrive2 从 VG1 中分离出来,带上它们的 LV,并将生成的新 VG 命名为 VG2。”)

    10.) 对于 VG2 中的每个 LV:lvrename VG2 LVcopyx LVx恢复原始 LV 名称,现在副本已分离到自己的 VG 中并且不再有冲突。您现在有一个新的 VG2,其中包含 VG1 的 LV 的副本,因为它们在步骤 8 中拆分 LV 镜像时存在。)。

    11.) 在实际使用 VG2 之前,您需要vgchange -ay VG2, 然后cryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx给它一个与 VG1 对应物不同的唯一 UUID,一旦您解锁了加密,您还应该给它里面的文件系统一个新的 UUID。对于 BtrFS,这是至关重要的 ( btrfstune -u /dev/mapper/VG2-LVx-crypt);对于其他文件系统,这本质上只是一种方便,以便基于 UUID 的挂载可以工作。


    如果您可以使 VG 脱机并且可以拔出/重新插入磁盘,您还可以:

    1.) 卸载cryptsetup luksClose并停用 VG ( vgchange -an VG1)。为避免在引导或热插拔时不需要的自动激活,还将其标记为已导出 ( vgexport VG1)。

    2.) 按照您的计划克隆驱动器。

    3.) 拔下驱动器,使系统只能看到 OldDrive2 和 NewDrive2。如果您的硬件允许热插拔,请使用echo 1 > /sys/block/<device name>/device/delete优雅的热拔出。

    4.) 引导系统或vgscan在优雅的热拔出后运行。然后导入并重命名 VG: vgimport VG1,然后vgrename VG1 VG2. 用于vgchange --uuid VG2为新 VG2 赋予与旧 VG1 不同的新身份,并在 PV 级别使用pvchange --uuid OldDrive2和执行相同操作。pvchange --uuid NewDrive2导入和重命名后,请记住,您需要先激活 VG,然后才能对其进行挂载或对其执行任何其他操作:vgchange -ay VG2.

    5.) 激活 VG 后,使用cryptsetup luksUUID --uuid=$(uuid) /dev/mapper/VG2-LVx给 LUKS 容器一个独特的新身份,并在解锁加密后,使用文件系统特定工具在文件系统级别执行相同操作。(这对 BtrFS 尤其重要 btrfstune -u /dev/mapper/VG2-LVx-crypt:)

    6.) 现在您可以重新插入 OldDrive1 和 NewDrive1(vgscan如果您是热插拔则使用),然后vgimport VG1“再次”,并使用 .激活它vgchange -ay VG1。您现在有两个完全独立的 VG,您可以根据需要使用它们。

    • 2
  2. brt
    2021-09-20T04:08:17+08:002021-09-20T04:08:17+08:00

    如果您能够在 dd clonig 期间关闭 LUKS 容器,则步骤如下:

    • 将 NewDrive1 添加到 VG1
    • 使用“pvmove OldDrive2 NewDrive1”
    • 从 VG1 中删除 OldDrive2
    • 使用 OldDrive2 + NewDrive2 创建 VG2
    • 在 VG2 上创建您想要的 LV
    • 使用 dd VG1/LV -> VG2/LV

    如果您打算在同一台机器上使用两个副本,您还必须更改 LUKS 容器和包含文件系统的 UUID!感谢@telcoM 指出这一点!

    • 0

相关问题

  • 如何使用 pv 显示 openssl 加密/解密的进度?

  • 对 openssl 加密文件中的盐感到困惑

  • lvm 和一个分区问题

  • 调整设备 /dev/sdb 上的 LVM 物理卷的大小

  • 以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve