在Linux中转移到一个更大的驱动器

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

我想我启动到单用户模式,格式,挂载新的驱动器,做一些魔法复制命令,保留链接,权限,文件date和其他一切,然后卸载旧的驱动器,挂载新的驱动器的旧名称,并重新启动。

这听起来正确吗? 我错过了什么吗? build议? 提示? 有人知道cp命令是什么?

这是一个Ubuntu的机器。

如果你给出了你当前的布局(如果你不使用LVM, fdisk -l的输出将会执行,“ fdisk -l ”,“ pvdisplay -C ”,“ vgdisplay -C ”和“ lvdisplay -C ”的输出if你使用LVM)和你希望增长的驱动器/分区,我们可以给出更准确的答案。

假设“非根卷驱动器”是指具有单个分区的驱动器,该分区包含要增长到新磁盘上的卷,旧磁盘显示为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”告诉各个实用程序输出进度信息。 resize操作应该非常快(如果缩小体积,通常只需要很长时间,因为在这种情况下需要移动更多的数据)。 如果你已经安装了pv,那么你可以通过用“pv / dev / sdb1> / dev / sdc1”replace对dd的调用,

编辑2:这是一个非常好的select,因为它首先复制block-for-block,所以不需要关心文件系统结构(所以拷贝会像“加速旧驱动器可以批量读取“和”新驱动器可以批量写入的速度“),并且不会与硬链接,设备节点或可能在文件系统中的任何其他特殊情况混淆 – 相当空你会发现基于cp / cpio的方法之一更快,因为他们不会将所有的空白块从磁盘复制到磁盘

我更喜欢rsync这种工作,因为如果有什么中断的复制过程,你可以再次运行rsync,它会拿起它停止的地方,而不是在开始。

你也可以在系统正常运行的时候运行rsync(虽然rsync在复制文件时会比较慢)。 那么当你准备切换到新驱动器时,要么closures写入到旧驱动器的所有内容(包括用户进程,守护进程,cron作业等),要么重新启动到单用户模式并再次运行rsync ,将新驱动器与初始rsync运行时发生的任何更改同步。

过程大致是:

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

如果将来可能再发生这种情况,或者如果要使用旧驱动器和新驱动器的容量,则可能需要考虑将LVM用于新驱动器,然后将数据rsync同步并编辑如上所述。 一旦在LVM卷组上运行了系统,就可以将旧驱动器(和/或任何额外的新驱动器)添加到卷组中,并调整fs的大小。

我最喜欢的文件系统副本:

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

不过,我很好奇看到别人的build议。 由于您正在移动整个文件系统,因此可能会有更好的select。 哦,LVM卷上的原始文件系统是什么?

我一直对自己偏爱cpio:

cd /src; find . -print | cpio -dpum /dst

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

我会做cp -a ,如果不是LVM的话。 但是据我所知,Ubuntu(版本9,至less)需要备用安装光盘。 我不知道其他版本。

如果你有lvm,你可以在不重新启动/停止任何服务的情况下进行,如果你的系统支持热插拔驱动器,你也可以更换驱动器。 – 分区新磁盘 – pv创build新分区 – pvcreate new_disk – 将卷组扩展到新分区vgextend datavg new_disk – pvmove old_disk new_disk