Stu Asked: 2009-07-30 11:28:45 +0800 CST2009-07-30 11:28:45 +0800 CST 2009-07-30 11:28:45 +0800 CST 在linux中移动到更大的驱动器 772 我在非根卷驱动器上有一个空间不足的 linux 机器。移动到更大的驱动器的最佳方法是什么? 我想我启动到单用户模式,格式化,安装新驱动器,执行一些保留链接、权限、文件日期和其他所有内容的神奇复制命令,然后卸载旧驱动器,将新驱动器安装为旧名称并重新启动。 听起来对吗?我错过了什么吗?建议?提示?有人知道cp命令是什么吗? 这是一个 ubuntu 机器。 backup linux drive 6 个回答 Voted Best Answer David Spillett 2009-07-30T11:50:56+08:002009-07-30T11:50:56+08:00 如果你给出了你当前的布局(fdisk -l如果你不使用 LVM,输出会做,如果你使用 LVM,输出会是“ fdisk -l”,“ pvdisplay -C”,“ vgdisplay -C”和“ lvdisplay -C”)和你希望增长的驱动器/分区,我们可以给出更准确的答案。 假设“非根卷驱动器”是指具有单个分区的驱动器,其中包含要增长到新磁盘上的卷,旧磁盘显示为 sdb(及其上的分区 sdb1),现有分区是一个 ext2 或 ext3 文件系统,新磁盘在其中并分区为单个卷(例如,sdc1),并且您希望完全移动到新磁盘以摆脱旧磁盘,以下将起作用: 备份数据,以防万一 停止访问卷 /dev/sdb1 的任何服务和其他进程 卸载它 dd if=/dev/sdb1 of=/dev/sdc1 fsck /dev/sdc1 -C 0 resize2fs /dev/sdc1 -p 将任何指向旧设备(即在 /etc/fstab 中)的指针调整到新设备 重新挂载并重新启动服务 下次机器断电时卸下旧驱动器。您可能希望将其保留一段时间作为紧急备份,以防新驱动器出现故障 编辑: fsck 上的“-C 0”和 resize2fs 上的“-p”告诉各自的实用程序在执行任务时输出进度信息。调整大小操作应该非常快(如果使卷变小,通常只需要很长时间,因为在这种情况下需要移动更多数据)。如果您安装了pv,那么您也可以通过将 dd 调用替换为“pv /dev/sdb1 > /dev/sdc1”,让第 3 步为您提供进度信息 编辑 2:对于相当完整的卷,这是一个不错的选择,因为它首先会逐块复制,因此不需要在关心文件系统结构时翻转驱动器头(因此复制速度将与“速度旧驱动器可以批量读取”和“新驱动器可以批量写入的速度”)并且它不会与硬链接,设备节点或文件系统中可能存在的任何其他特殊内容混淆 - 对于卷相当空,您会发现其中一种基于 cp/cpio 的方法要快得多,因为它们不会将所有空块从磁盘复制到磁盘 cas 2009-07-30T13:51:29+08:002009-07-30T13:51:29+08:00 对于这种工作,我更喜欢 rsync,因为如果有任何东西中断了复制过程,你可以再次运行 rsync,它会从中断的地方继续,而不是从头开始。 您也可以在系统正常运行时运行 rsync(尽管 rsync 复制文件时会慢一些)。然后,当您准备好切换到新驱动器时,要么关闭正在写入旧驱动器的所有内容(包括用户进程、守护进程、cron 作业等),要么重新启动到单用户模式并再次运行 rsync , 将新驱动器与初始 rsync 运行时发生的任何更改同步。 流程大致是: 安装新驱动 使用您喜欢的文件系统进行分区并格式化 安装它 rsync 旧 fs 到新 fs 重启进入单用户模式 再次同步 编辑 /etc/fstab 以挂载新 fs 代替旧文件 再次重新启动(或先关闭并删除旧驱动器) 如果将来可能再次发生这种情况,或者如果您想同时使用旧驱动器和新驱动器的容量,那么您可能需要考虑将 LVM 用于新驱动器......然后将数据同步到它并编辑fstab 同上。一旦系统在 LVM 卷组上运行,您就可以将旧驱动器(和/或任何额外的新驱动器)添加到卷组并调整 fs 的大小。 Chad Huneycutt 2009-07-30T11:42:52+08:002009-07-30T11:42:52+08:00 我最喜欢的文件系统副本: (cd /src; tar cf - .) | (cd /dst; tar xpf -) 不过,我很想看看其他人的建议。由于您要移动整个文件系统,因此可能会有更好的选择。哦,原来的文件系统在 LVM 卷上吗? TCampbell 2009-07-30T11:44:53+08:002009-07-30T11:44:53+08:00 我自己一直偏爱cpio: cd /src; find . -print | cpio -dpum /dst Kevin M 2009-07-30T11:45:19+08:002009-07-30T11:45:19+08:00 如果它不是 root,并且没有使用 drive( /usr/sbin/lsof | grep '/path/to/mount/point),那么您不需要引导到单用户模式。 cp -a如果不是 LVM,我会这样做。但我记得,Ubuntu(至少是第 9 版)需要备用安装光盘。我不知道其他版本。 Jure1873 2009-07-30T12:04:12+08:002009-07-30T12:04:12+08:00 如果您有 lvm,您可以在不重新启动/停止任何服务的情况下即时执行此操作,如果您的系统支持热插拔驱动器,您也可以更换驱动器。- 对新磁盘进行分区 - pvcreate 新分区 - pvcreate new_disk - 将卷组扩展到新分区 vgextend datavg new_disk - pvmove old_disk new_disk
如果你给出了你当前的布局(
fdisk -l
如果你不使用 LVM,输出会做,如果你使用 LVM,输出会是“fdisk -l
”,“pvdisplay -C
”,“vgdisplay -C
”和“lvdisplay -C
”)和你希望增长的驱动器/分区,我们可以给出更准确的答案。假设“非根卷驱动器”是指具有单个分区的驱动器,其中包含要增长到新磁盘上的卷,旧磁盘显示为 sdb(及其上的分区 sdb1),现有分区是一个 ext2 或 ext3 文件系统,新磁盘在其中并分区为单个卷(例如,sdc1),并且您希望完全移动到新磁盘以摆脱旧磁盘,以下将起作用:
dd if=/dev/sdb1 of=/dev/sdc1
fsck /dev/sdc1 -C 0
resize2fs /dev/sdc1 -p
编辑: fsck 上的“-C 0”和 resize2fs 上的“-p”告诉各自的实用程序在执行任务时输出进度信息。调整大小操作应该非常快(如果使卷变小,通常只需要很长时间,因为在这种情况下需要移动更多数据)。如果您安装了pv,那么您也可以通过将 dd 调用替换为“pv /dev/sdb1 > /dev/sdc1”,让第 3 步为您提供进度信息
编辑 2:对于相当完整的卷,这是一个不错的选择,因为它首先会逐块复制,因此不需要在关心文件系统结构时翻转驱动器头(因此复制速度将与“速度旧驱动器可以批量读取”和“新驱动器可以批量写入的速度”)并且它不会与硬链接,设备节点或文件系统中可能存在的任何其他特殊内容混淆 - 对于卷相当空,您会发现其中一种基于 cp/cpio 的方法要快得多,因为它们不会将所有空块从磁盘复制到磁盘
对于这种工作,我更喜欢 rsync,因为如果有任何东西中断了复制过程,你可以再次运行 rsync,它会从中断的地方继续,而不是从头开始。
您也可以在系统正常运行时运行 rsync(尽管 rsync 复制文件时会慢一些)。然后,当您准备好切换到新驱动器时,要么关闭正在写入旧驱动器的所有内容(包括用户进程、守护进程、cron 作业等),要么重新启动到单用户模式并再次运行 rsync , 将新驱动器与初始 rsync 运行时发生的任何更改同步。
流程大致是:
如果将来可能再次发生这种情况,或者如果您想同时使用旧驱动器和新驱动器的容量,那么您可能需要考虑将 LVM 用于新驱动器......然后将数据同步到它并编辑fstab 同上。一旦系统在 LVM 卷组上运行,您就可以将旧驱动器(和/或任何额外的新驱动器)添加到卷组并调整 fs 的大小。
我最喜欢的文件系统副本:
(cd /src; tar cf - .) | (cd /dst; tar xpf -)
不过,我很想看看其他人的建议。由于您要移动整个文件系统,因此可能会有更好的选择。哦,原来的文件系统在 LVM 卷上吗?
我自己一直偏爱cpio:
cd /src; find . -print | cpio -dpum /dst
如果它不是 root,并且没有使用 drive(
/usr/sbin/lsof | grep '/path/to/mount/point
),那么您不需要引导到单用户模式。cp -a
如果不是 LVM,我会这样做。但我记得,Ubuntu(至少是第 9 版)需要备用安装光盘。我不知道其他版本。如果您有 lvm,您可以在不重新启动/停止任何服务的情况下即时执行此操作,如果您的系统支持热插拔驱动器,您也可以更换驱动器。- 对新磁盘进行分区 - pvcreate 新分区 - pvcreate new_disk - 将卷组扩展到新分区 vgextend datavg new_disk - pvmove old_disk new_disk