我有一个空间不足的Linux机器,在非根卷驱动器上。 迁移到更大的驱动器的最佳方法是什么?
我想我启动到单用户模式,格式,挂载新的驱动器,做一些魔法复制命令,保留链接,权限,文件date和其他一切,然后卸载旧的驱动器,挂载新的驱动器的旧名称,并重新启动。
这听起来正确吗? 我错过了什么吗? build议? 提示? 有人知道cp命令是什么?
这是一个Ubuntu的机器。
如果你给出了你当前的布局(如果你不使用LVM, fdisk -l
的输出将会执行,“ fdisk -l
”,“ pvdisplay -C
”,“ vgdisplay -C
”和“ lvdisplay -C
”的输出if你使用LVM)和你希望增长的驱动器/分区,我们可以给出更准确的答案。
假设“非根卷驱动器”是指具有单个分区的驱动器,该分区包含要增长到新磁盘上的卷,旧磁盘显示为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”告诉各个实用程序输出进度信息。 resize操作应该非常快(如果缩小体积,通常只需要很长时间,因为在这种情况下需要移动更多的数据)。 如果你已经安装了pv,那么你可以通过用“pv / dev / sdb1> / dev / sdc1”replace对dd的调用,
编辑2:这是一个非常好的select,因为它首先复制block-for-block,所以不需要关心文件系统结构(所以拷贝会像“加速旧驱动器可以批量读取“和”新驱动器可以批量写入的速度“),并且不会与硬链接,设备节点或可能在文件系统中的任何其他特殊情况混淆 – 相当空你会发现基于cp / cpio的方法之一更快,因为他们不会将所有的空白块从磁盘复制到磁盘
我更喜欢rsync这种工作,因为如果有什么中断的复制过程,你可以再次运行rsync,它会拿起它停止的地方,而不是在开始。
你也可以在系统正常运行的时候运行rsync(虽然rsync在复制文件时会比较慢)。 那么当你准备切换到新驱动器时,要么closures写入到旧驱动器的所有内容(包括用户进程,守护进程,cron作业等),要么重新启动到单用户模式并再次运行rsync ,将新驱动器与初始rsync运行时发生的任何更改同步。
过程大致是:
如果将来可能再发生这种情况,或者如果要使用旧驱动器和新驱动器的容量,则可能需要考虑将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