在 Linux 中移动到更大的驱动器

在 Linux 中移动到更大的驱动器

我的 Linux 机器在非根卷驱动器上空间不足。移动到更大驱动器的最佳方法是什么?

我认为我启动到单用户模式,格式化,挂载新驱动器,执行一些神奇的复制命令以保留链接、权限、文件日期和其他所有内容,然后卸载旧驱动器,以旧名称挂载新驱动器并重新启动。

听起来对吗?我遗漏了什么吗?有什么建议吗?有什么提示吗?有人知道 cp 命令是什么吗?

这是一台 ubuntu 机器。

答案1

fdisk -l如果您提供了当前的布局(如果您不使用 LVM,则输出将会起作用,如果使用 LVM,则输出“ fdisk -l”、“ pvdisplay -C”、“ vgdisplay -C”和“ lvdisplay -C”)和希望扩大的驱动器/分区,我们可以给出更准确的答案。

假设“非根卷驱动器”是指具有单个分区的驱动器,该分区包含要扩展到新磁盘的卷,旧磁盘显示为 sdb(其上的分区为 sdb1),现有分区是 ext2 或 ext3 文件系统,新磁盘位于并被分区为单个卷(例如,sdc1),并且您想要完全移动到新磁盘并删除旧磁盘,则以下操作将起作用:

  1. 备份数据,以防万一
  2. 停止访问卷 /dev/sdb1 的所有服务和其他进程
  3. 卸载它
  4. dd if=/dev/sdb1 of=/dev/sdc1
  5. fsck /dev/sdc1 -C 0
  6. resize2fs /dev/sdc1 -p
  7. 将指向旧设备的所有指针(即 /etc/fstab 中的指针)调整为新设备
  8. 重新挂载并重新启动服务
  9. 下次机器断电时移除旧驱动器。你可能想保留它一段时间作为紧急备份,以防新驱动器出现故障

编辑:fsck 上的“-C 0”和 resize2fs 上的“-p”指示相应的实用程序在执行操作时输出进度信息。调整大小操作应该非常快(通常只有在缩小卷时才会花费大量时间,因为在这种情况下需要移动更多数据)。如果您有光伏安装后,你可以通过将对 dd 的调用替换为“pv /dev/sdb1 > /dev/sdc1”,使步骤 3 也为你提供进度信息

编辑2:对于相当满的卷来说,这是一个很好的选择,因为它首先逐块复制,因此不需要翻转驱动器头来关心文件系统结构(因此复制的速度将与“旧驱动器可以批量读取的速度”和“新驱动器可以批量写入的速度”中较慢的一个一样快),并且它不会与硬链接、设备节点或文件系统中可能存在的任何其他特殊内容混淆 - 对于相当空的卷,您会发现基于 cp/cpio 的方法之一要快得多,因为它们不会将所有空块从磁盘复制到磁盘

答案2

我更喜欢使用 rsync 来完成这种工作,因为如果有任何东西中断了复制过程,您只需再次运行 rsync 并且它会从中断的地方继续,而不是从头开始。

你也可以在系统正常运行时运行 rsync(尽管 rsync 复制文件时速度会比较慢)。然后,当你准备切换到新驱动器时,可以关闭一切即写入旧驱动器(包括用户进程、守护进程、cron 作业等)或重新启动到单用户模式并再次运行 rsync,以将新驱动器与初始 rsync 运行时发生的任何更改同步。

流程大致是:

  • 安装新驱动器
  • 使用您喜欢的文件系统对其进行分区和格式化
  • 安装它
  • 将旧 fs rsync 到新 fs
  • 重新启动进入单用户模式
  • 再次 rsync
  • 编辑 /etc/fstab 以挂载新文件系统来代替旧文件系统
  • 再次重新启动(或先关机并移除旧驱动器)

如果这种情况将来可能再次发生,或者您想要同时使用新旧驱动器的容量,那么您可能需要考虑对新驱动器使用 LVM...然后将数据 rsync 到它并按上述方式编辑 fstab。一旦系统在 LVM 卷组上运行,您就可以将旧驱动器(和/或任何额外的新驱动器)添加到卷组并调整 fs 的大小。

答案3

我最喜欢的文件系统复制功能:

(cd /src; tar cf - .) | (cd /dst; tar xpf -)

不过,我很好奇其他人的建议。由于您要移动整个文件系统,因此可能会有更好的选择。哦,原始文件系统是在 LVM 卷上吗?

答案4

如果它不是根目录,并且没有任何东西使用该驱动器(/usr/sbin/lsof | grep '/path/to/mount/point),那么您不需要启动到单用户模式。

cp -a如果不是 LVM,我会这么做。但我记得,Ubuntu(至少是版本 9)需要备用安装光盘。我不知道其他版本的情况。

相关内容