all*_*tic 8 linux raid local-area-network migration
这是我的情况:
/dev/sda
相差不到 10 MB,但目标服务器的阵列由于某种原因小了几兆。我想做的事:
fsck
在两端(源和目标)上运行以验证文件系统在传输前后是否正常。/
分区中的可用空间。/
分区的大小,以便在复制它时调整大小以适应目标磁盘的稍小一些的大小。我的问题:
/dev/sda
每个服务器上的大小之间的差异(以字节为单位),然后使用e2resize
非破坏性减小源端/
分区的大小,使其适合目标端的空间?dd
在原始块设备上运行,/dev/sda
从源到目标(通过ssh
),还是应该在目标上创建等效的分区布局并dd
在每个分区上运行?请注意,一次处理一个分区会给我留下引导加载程序的问题,但是如果我一次不做一个分区,则dd
需要知道在写入目标可以容纳的字节数后停止传输数据(希望这将“关闭”/
最后一个块上分区的最末端,这在逻辑上是源分区布局中所有其他分区的“右侧”)。一些杂项。具体:
这很麻烦,但可行。
我假设这里/
是/dev/sda3
,那/boot
是/dev/sda1
。
将旧服务器上的文件系统缩小到可能的最小大小。
oldserver # resize2fs -M /dev/sda3
Run Code Online (Sandbox Code Playgroud)使用相同大小的/boot
、交换空间和新/
分区(以及您需要的任何其他内容)对新服务器的磁盘进行分区。
newserver # parted /dev/sda
Run Code Online (Sandbox Code Playgroud)复制/
和/boot
文件系统。
oldserver # dd if=/dev/sda1 | ssh root@newserver "dd of=/dev/sda1"
oldserver # dd if=/dev/sda3 | ssh root@newserver "dd of=/dev/sda3"
Run Code Online (Sandbox Code Playgroud)
因为新服务器上的分区将比旧服务器上的分区略小,所以No space left on device
在此结束时您会收到一条虚假消息。但是,由于您在第 1 步缩小了文件系统,因此这无关紧要。
将新服务器上的文件系统调整为分区大小。
newserver # resize2fs /dev/sda3
Run Code Online (Sandbox Code Playgroud)在新磁盘上安装 GRUB。
newserver # mount /dev/sda3 /mnt
newserver # mount /dev/sda1 /mnt/boot
newserver # mount -o bind /dev /mnt/dev
newserver # mount -o proc proc /mnt/proc
newserver # chroot /mnt /bin/bash
newserver(chroot) # grub-install /dev/sda
newserver(chroot) # exit
Run Code Online (Sandbox Code Playgroud)完成其余的修正(IP 地址等)。
您可能会找到一种方法来避免复制分区的可用空间,但与仅复制所有内容相比,研究可能需要更长的时间......
我会mkfs
在新服务器上使用新的文件系统,然后rsync
从旧服务器上使用它们。这是可重新启动的、一致的,并且每个文件都可以轻松地单独验证。如果您丢弃文件系统中未使用的部分(不是取证副本),我认为没有任何理由不使用此方法。您将不得不重新运行 GRUB,但这不应该是一个挑战。
解释一个文件系统感知的原始副本需要我一段时间,所以除非你评论为什么我的 rsync 解决方案不起作用,否则我会省去打字的时间。
归档时间: |
|
查看次数: |
2054 次 |
最近记录: |