如何更改分区?

pio*_*rek 1 linux boot partition ubuntu

我有一个带有/、/home 的硬盘。我刚刚购买了新的 SSD,需要更改分区而无需重新安装。我想创建一个单独的 /var 分区(当前位于 / 下)并将其保留在硬盘上。其余的/(包括/boot)我想移至SSD。我应该在 ubuntu 12.04 中怎么做?

cat /etc/fstab
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=4f614ad4-8b21-4e21-b6fc-13ba7f489a88 /               ext4    errors=remount-ro 0       1
UUID=dba112c1-1647-4e73-b907-0117ad3a058e /home           ext3    defaults        0       2
UUID=01CB6A18FD7DF1C0 /windows/c      ntfs    defaults,umask=007,gid=46 0       0
UUID=01CB6A18E6F42370 /windows/d      ntfs    defaults,umask=007,gid=46 0       0
UUID=48d5b437-91c9-4304-9bde-ee661779089d none            swap    sw              0       0
Run Code Online (Sandbox Code Playgroud)

我还有一些 lvm 分区,但它们与这个问题无关

cas*_*sey 5

我的做法是根据需要对 SSD 进行分区(/、/boot、/home 等),并且由于您要将所有内容移动到新的 SSD,因此您无需担心缩小分区或其他任何事情就这么复杂。您基本上只需将所有内容复制到 SSD,对 HDD 重新分区并编辑磁盘上和 fstab 中的安装点。

准备迁移

  1. 备份您当前的硬盘!
  2. 对 SSD 进行分区

    出于演示目的,我将使用这些分区:

    • /dev/sdb1 -- /boot
    • /dev/sdb2 -- /
    • /dev/sdb3 -- /home

    如果需要,您可以省略 /boot 并将其保留为 / 内的普通目录,就像您当前所做的那样。

  3. 在新分区上创建文件系统(mkfs.ext4mkfs任何您想要的文件系统)
  4. 将新分区挂载到当前文件系统的层次结构下。例如,将 SSD 上的新 / 安装为 /mnt,将 SSD 上的新 /boot 和 /mnt/boot 安装,将 SSD 上的新 /home 安装为 /mnt/home

    • 例如:

      mkdir -p /mnt/newroot
      mkdir /mnt/newroot/boot
      mkdir /mnt/newroot/home
      mount /dev/sdb2 /mnt/newroot
      mount /dev/sdb1 /mnt/newroot/boot
      mount /dev/sdb3 /mnt/newroot/home
      
      Run Code Online (Sandbox Code Playgroud)

从 HDD 迁移到 SSD

  1. 将所有内容复制(保留时间戳、权限和所有权)到新分区中。

    • 您可以使用以下命令组之一

      cp -ax --sparse=always / /mnt/newroot
      cp -ax --sparse=always /home /mnt/newroot /home
      
      Run Code Online (Sandbox Code Playgroud)
    • 或者

      rsync -avSx / /mnt/newroot
      rsync -avSx /home /mnt/newroot/home
      
      Run Code Online (Sandbox Code Playgroud)
    • 这些将使用存档标志进行复制(保留文件所有权和其他信息),在可能的情况下进行稀疏复制,并且不会跨越源文件系统上的文件系统边界。如果您没有指定-x保留在文件系统中的标志,则可以通过一个命令进行复制,但需要采取措施从副本中排除 /proc、/dev 和其他内存中文件系统。

  2. 编辑文件 /mnt/newroot/etc/fstab 并更改条目以反映新分区

  3. 将 grub 安装到新磁盘(如果它将是您的引导设备)并将其指向 SSD 上的新 /boot,以便它可以找到其引导配置。
  4. 卸载新分区。

    umount /mnt/newroot/home
    umount /mnt/newroot/boot
    umount /mnt/newroot
    
    Run Code Online (Sandbox Code Playgroud)

验证迁移

  1. 重新启动进入新分区

    • 如果正确设置 grub 并且新的 /etc/fstab 正确,则引导的行为将与以前完全相同,只是它使用新分区而不是旧分区。
  2. 验证一切正常。

    • 如果出现意外情况,您可以保留旧磁盘并进行备份。什么都没有丢失。然而。
    • 除了在新磁盘上克隆它们之外,我对 Windows 分区没有任何建议(dd如果要移动它们,请使用克隆工具或 )
    • 如果您是双启动到 Windows,请验证是否仍然有效并且 Windows 位于 SSD 上(如果您想要 SSD,如果您将其保留在 HDD 上,也可以)
    • 这些天我不太了解 Windows,所以我在这方面没有什么可提供的。

此时,您的 SSD 上应该有一个工作系统,它是 HDD 上的系统的克隆。超出这一点的任何步骤都会破坏您的旧数据。在继续之前先进行备份

重新调整硬盘的用途

  1. 重新分区硬盘

    • 如果您不涉及 Windows 分区,只需删除不再需要的 Linux 分区,并为 /var 和您需要的其他分区创建一个新分区。
    • 如果您确实将 Windows 移动到 SSD,则可以完全重新分区 HDD。
  2. 为新的 /var 创建文件系统
  3. 暂时将这个新的 /var 挂载为 /mnt/var 或其他东西

    mkdir /mnt/var
    mount /dev/sd?? /mnt/var
    
    Run Code Online (Sandbox Code Playgroud)
  4. 停止依赖于 /var 的服务或进入单用户模式

    • 这是必需的,因为如果守护进程在复制期间写入 /var,当我们切换到新的 /var 时,您将丢失这些新数据。单用户模式也是运行级别 1(init 1在 sysvinit 上,不确定 upstart)
  5. 将旧的 /var 复制到新的 /var

    cp -av --sparse=always /var /mnt/var
    
    Run Code Online (Sandbox Code Playgroud)
  6. 删除旧的 /var(保留该目录,但将其清空)。

    rm -rf /var
    mkdir /var
    
    Run Code Online (Sandbox Code Playgroud)
  7. 卸载新的 /var

    umount /mnt/var
    
    Run Code Online (Sandbox Code Playgroud)
  8. 编辑/etc/fstab并添加 /var 条目

  9. 挂载 /var(如果您编辑了 fstab,这将是新的)。

     mount /var
    
    Run Code Online (Sandbox Code Playgroud)
  10. 重新启动您停止的任何服务或返回多用户模式(或者根据需要重新启动)

这个一般过程应该可以帮助您进行迁移,最重要的步骤是备份,以防万一您搞砸了。