将数据从常规分区移动到 lvm

Wan*_*ian 7 debian lvm

我已经阅读了一些关于 lvm 的内容,并决定改用它。似乎可以从 debian 安装程序中实际设置 lvm,所以我认为这将是最简单的。我不确定的是如何将我的所有文件复制到新系统。

我想复制我的整个系统,而不仅仅是我的主目录或我的包,我已经弄乱了很多东西,以至于我不知道所有配置文件的确切位置。我在互联网上找到的指南似乎对这一步不太了解,只提到可以做到这一点的工具,而不是如何使用它们,即使用rsync. 本能告诉我,我不能只是rsync将备份的根目录复制到 lvm 系统的根目录,我会复制一些重要的东西,比如 lvm 配置文件,但我不确定我到底需要排除什么,同时一定不要排除我可能已经改变的任何东西。有小费吗?

为了清楚起见,我计划的步骤是:我有一个 1tb 的硬盘和一个 250GB 的固态硬盘。我想缩小硬盘上的分区,使用可用空间(我有足够的空间)创建两个新分区,并将我的 ssd 和 hdd 分区作为备份添加到这些分区。然后我想擦除我当前使用的 ssd 分区和 hdd 分区,并在它们上设置 lvm(为了简单起见,最好使用 debian 安装程序,但也可以手动)。然后我想以某种方式将备份分区中的所有内容复制到新的 lvm 分区。然后擦除备份分区并调整现有 lvm 分区的大小以包括剩余空间,或者只是将剩余空间作为 lvm 上的另一个物理卷并以这种方式添加。

Gil*_*il' 7

除非您想从头开始重做系统配置,否则不要安装新系统。请注意,您可能要做到这一点-在复制你的主目录,并逐步恢复系统配置,同时注意1,安装etckeeper只要你的系统安装程序后,重新启动并2.不能更改外/etc,你的主目录。但是,如果您想保留现有安装,将其移动到不同的分区方案比将其移动到另一个安装之上容易得多。

您不能使用官方工具“LVMize”分区。有一个名为blocks to-lvm(最初称为lvmify的第三方工具可以执行此操作。我从来没有尝试过。您可能希望尝试一下,但首先要确保您的备份是最新的。

假设您不使用blocks-to-lvm,您需要在磁盘上腾出一些空间,为 LVM 卷创建一些空间,移动数据,并重复直到所有数据都被移动。许多文件系统,包括 ext4(Debian 的默认设置),在挂载时无法调整大小,因此您需要从实时系统(例如SystemRescueCDGParted Live )中执行所有这些操作。

  1. 缩小现有文件系统之一和包含分区。假设您正在处理sda并且当前分区号为 1。如果可能,将您的文件系统缩小到原来的一半减去一些更改,因为这可以让您一次性移动它。如果你不能这样做,缩小文件系统以只剩下很少的可用空间。有两种方法可以做到这一点:

    • 使用parted /dev/sda(文本模式)或gparted(GUI,选择sda)及其resizepart 1/“调整大小”命令。
    • 使用resize2fs /dev/sda1缩小文件系统,然后fdisk /dev/sda或者其他的分区工具。请注意,fdisk 没有调整分区大小的命令,您需要删除该分区然后创建一个除了大小之外具有相同特征的分区。这并不难,但容易出错;错误复制数字或混淆单位可能会破坏您的数据。

    此时,也删除您的交换分区,以腾出更多空间。

  2. 在现在可用的空间中,创建一个分区。将其声明为类型 8e (MBR) 或“Linux LVM” (GPT)。假设新分区的编号为 2,因此其设备路径为/dev/sda2.

  3. 运行pvcreate /dev/sda2以使新分区成为 LVM 物理卷。这分配/dev/sda2给 LVM 使用,但尚未将空间用于任何事情。
  4. Run vgcreate drowhd /dev/sda2,其中drowhd是您为卷组选择的名称。这会在 LVM 上创建一些工作空间:一个卷组。
  5. Run lvcreate -n root -L 42g drowhdwhereroot是你给第一个逻辑卷的名字,42g 是大小。逻辑卷是您可以放置​​文件系统或交换空间的地方。
  6. 移动一些数据。

    • 如果逻辑卷至少与您现有的根文件系统一样大,您可以批量复制它。

      cat /dev/sda1 >/dev/mapper/drowhd-root
      
      Run Code Online (Sandbox Code Playgroud)
    • 如果您没有足够的空间,则需要分块移动文件。在新卷上创建一个文件系统,然后移动一些文件。

      mkfs.ext4 /dev/mapper/drowhd-root
      mount /dev/sda1 /media/old-root
      mount /dev/mapper/drowhd-root /media/new-root
      mkdir /media/new-root/usr
      mv /media/old-root/usr/lib /media/new-root/usr
      umount /media/old-root
      
      Run Code Online (Sandbox Code Playgroud)

      现在重复步骤 1-3 以缩小旧的根文件系统并进行更多分区,并/dev/sda3在现在空闲的空间上创建一个新的物理卷(比如)。将新物理卷添加到现有卷组并扩大您的逻辑卷:

      pvcreate /dev/sda3
      vgextend drowhd /dev/sda3
      lvresize -L 99g drowhd/root
      
      Run Code Online (Sandbox Code Playgroud)

      如上所述移动更多文件。重复直到你移动了所有东西。

  7. 移动完所有内容后,将之前的数据分区转换为物理卷并将其添加到卷组中:

    pvcreate /dev/sda1
    vgextend drowhd /dev/sda1
    
    Run Code Online (Sandbox Code Playgroud)

    您可以使用此空间来扩展现有的逻辑卷或创建新的逻辑卷。不要忘记为交换创建一个逻辑卷并使用mkswap. 如果您打算使用此功能,您可能需要留出一些空间来创建快照。

  8. 除非你有一个单独的/boot分区并且你没有修改它,否则你需要更新你的引导加载程序配置。对于 Grub:

    1. 在某处挂载新的系统分区:

      mount /dev/mapper/drowhd-root /media/new-root
      
      Run Code Online (Sandbox Code Playgroud)
    2. 在新根目录下创建一些可用的内存文件系统:

      mount --rbind /dev /media/new-root/dev
      mount --bind /proc /media/new-root/proc
      mount --bind /sys /media/new-root/sys
      mount --bind /run /media/new-root/run
      
      Run Code Online (Sandbox Code Playgroud)
    3. 在您的系统中获取命令行:

      chroot /media/new-root
      
      Run Code Online (Sandbox Code Playgroud)
    4. update-grub
    5. 退出 chroot 并卸载所有东西。
  9. 您可能需要更新/etc/fstab(除非您只进行了整个文件系统的移动cat 并且您的 fstab 仅使用UUID=LABEL=来识别分区)。编辑文件以反映新的分区位置。

LVM 本身不会在 中保留有关磁盘的任何配置/etc,它们都存储在物理卷本身上。下面的配置文件/etc/lvm是 LVM 工具的配置(扫描规则、日志首选项等)和自动更新的卷排列缓存。您可以从插入包含它们的磁盘的任何系统访问 LVM 卷。

每个底层块设备使用一个卷组。在少数情况下,不这样做是明智的。底层块设备通常是磁盘、RAID 阵列或加密卷。在你的情况下,在硬盘上创建一个 VG,在 SSD 上创建一个 VG,除非你设置了一些 RAID。