我们正在使用 RHEL 5.4,需要克隆一些硬盘。什么是好的(或“正确的”)方法来做到这一点?如果可以的话,我想避免使用 dd,因为它有点慢。(但是,如果这是唯一的选择,那就这样吧。)
一些注意事项:
1) 无法使用其他发行版 - 包括 Live CD - 因为我们有非常严格的审批流程,并且我们唯一可以使用的发行版是 RHEL。
2) 如果可能的话,我们需要使用 RHEL 软件包中的软件。我们仍然欢迎您推荐其他软件,但如果我们可以使用 RHEL 中已有的软件,那么这将为我们节省大量文书工作。
我意识到这看起来像是我试图使工作变得比它应有的更难,但这就是公司法规的本质。
谢谢你的帮助!
答案1
您需要多精确的克隆?例如,如果有 LVM,ID 是否需要匹配?ext2(和 3,可能还有大多数 Linux 文件系统)在每个文件系统上都有一个通用唯一标识符 (UUID);原始和克隆之间是否需要匹配?
换句话说,你需要克隆来做什么?
没有什么比 dd 更能快速地制作驱动器的真正精确克隆。
一些 dd 替代品
- 使用 fdisk(或 parted 或 cfdisk 或其他)复制分区。必要时使用 lv 工具。创建文件系统,使用
rsync
或(cd /origmount ; tar cf) | (cd /newmount; tar xf -)
或cp
复制数据——这将以完全不同的块排列方式布置文件,但看起来相同。或者不挂载原始文件系统并使用类似dump -level0 -f - /dev/sda1 | (cd /mnt/sdb1; restore -f - -rf)
- 小心使用软件 RAID 工具 (md) 从原始分区创建降级 RAID1,添加新分区,等待同步完成,然后断开 RAID。这可能比 dd 慢,但大多数工作可以在机器运行时完成,因此对于该词的某些定义来说,它可能“更快”。
答案2
这些是我记录的从安装了 CentOS 5.5 的大型 LVM 管理磁盘移动到较小磁盘的步骤(显然,大磁盘上的已用空间小于小磁盘的大小)。我相信有更好的方法可以做到这一点,但这种方法是成功的。有些步骤可能特定于我们的情况,请根据需要进行调整。
要求:
- 安装 CD
- 新磁盘
脚步:
连接新磁盘
使用 CD 启动,在提示符下输入“linux rescue”进入救援模式。它会询问您是否要继续或跳过挂载,您应该继续(它将挂载到
/mnt/sysimage
)。如果它询问,请不要格式化新磁盘。使用 检查先前的几何结构。在常规 LVM 配置中,
fdisk -l
您可能有/dev/sda1
和。将是您的 /boot 分区,它存在于 LVM 之外。其大小应为 1-13,其余磁盘专用于 LVM。/dev/sda2
sda1
。
# fdisk -l
...
/dev/sda1 * 1 13 ... 83 Linux
/dev/sda2 14 ... 8e Linux LVM
# fdisk /dev/sdb
>Command...:
n
>Command action
>e extended
>p primary partition (1-4)
p
>Partition number (1-4):
1
>First cylinder ...:
<default>
>Last cylinder ...:
13 (value from /dev/sda1, the original /boot)
>Command...:
n
>Command action
>e extended
>p primary partition (1-4)
p
>Partition number (1-4):
2
>First cylinder ...:
<default>
>Last cylinder ...:
<default (end of disk)>
>Command...:
t
>Partition...:
1
>Hex code...:
83
>Command...:
t
>Partition...:
2
>Hex code...:
8e
>Command...:
a
>Partition...:
1
>Command...:
w
- 在 /dev/sdb1 上为 /boot 创建文件系统
。
# mkfs.ext3 /dev/sdb1
- 在 /dev/sdb2 上设置新的物理卷、卷组和逻辑卷及其文件系统。将其替换
?G
为所需的大小。LogVol00 应为 LVM 分区大小减去所需的交换卷大小,LogVol01 应为交换大小。
。
# pvcreate /dev/sdb2
# vgcreate VolGroup01 /dev/sdb2
# lvcreate --name LogVol00 --size ?G VolGroup01
# lvcreate --name LogVol01 --size ?G VolGroup01
# mkfs.ext3 /dev/VolGroup01/LogVol00
# mkswap /dev/VolGroup01/LogVol01
- 挂载新磁盘并使用 将内容从旧磁盘复制到新磁盘。
cp -ax
避免复制/dev
、、、和/proc
/sys
/boot
/lost+found
/mnt
。
# mkdir /mnt/newdisk
# mount /dev/VolGroup01/LogVol00 /mnt/newdisk
# cd /mnt/sysimage
# for i in $(ls -1 | grep -v '\(dev\|proc\|sys\|mnt\|boot\|lost\)'); do echo $i; cp -ax /mnt/sysimage/$i /mnt/newdisk; done
# cd /mnt/newdisk
# mkdir {dev,proc,sys,mnt,boot}
- 挂载新磁盘
/boot
并将内容从旧磁盘复制到新磁盘,然后卸载它
。
# mkdir /mnt/{boot,newboot}
# mount /dev/sda1 /mnt/boot
# mount /dev/sdb1 /mnt/newboot
# cp -ax /mnt/boot/* /mnt/newboot
# umount /mnt/newboot
- 安装 grub 到新磁盘
。
# mount -o bind /dev /mnt/newdisk/dev
# mount /dev/sdb1 /mnt/newdisk/boot
# chroot /mnt/newdisk
# grub
> root (hd1,0)
> setup (hd1)
> quit
- 修复你的
/boot/grub/grub.conf
。
# vi /boot/grub/grub.conf
:%s/VolGroup00/VolGroup01/g
:wq
- 重新做你的 initrds
。
# cd /boot
# for i in $(ls -1 initrd* | grep -v bak); do mv $i{,-bak}; ver=$(echo $i | sed 's/initrd-//;s/\.img//;'); mkinitrd /boot/$i $ver; done
- 退出 chroot
。
# exit
#
- 修复你的
/etc/fstab
。
# vi /mnt/newdisk/etc/fstab
:%s/VolGroup00/VolGroup01/g
:wq
此时,关闭并移除旧磁盘。再次启动进入救援模式。
/dev/sdb
现在将/dev/sda
并挂载到/mnt/sysimage
标签
/boot
。
# e2label /dev/sda1 /boot
- 取出 CD,此时您应该能够启动到调整大小后的磁盘。
答案3
好吧,如果您避免使用“dd”和任何其他非 RHEL 提供的工具,那么您只能复制文件系统并复制内容(使用您选择的工具,cpio、tar、rsync 等)并将 GRUB 放在新驱动器上。最好使用静止驱动器(也许启动到 RHEL 救援模式)来完成此操作。
答案4
要对磁盘进行映像复制,您可以尝试 Ghost、Fog、Clonezilla 等(甚至 VMware Converter 等)。
对于文件系统复制,我推荐使用 rsync 之类的工具。