最近公司的一台 CentOS 服务器需要克隆一下,以便在另一台服务器或者虚拟机上运行,因此,研究了一下Linux的磁盘克隆方法。
基本常识
UEFI 与 BIOS 区别
UEFI引导与BIOS引导在结构上的区别:
BIOS引导的结构相对简单,由3个部分组成:BIOS程序、MBR(主引导记录)和操作系统引导程序。其中BIOS程序是由计算机制造商预装在ROM芯片中的,MBR是位于磁盘的名列前茅个扇区,用于存储操作系统引导程序的位置信息,操作系统引导程序则是由用户安装的操作系统自带的。
UEFI引导的结构相对复杂,由多个部分组成:UEFI固件、GPT(GUID分区表)、EFI系统分区、操作系统引导程序。其中UEFI固件是由计算机制造商预装在主板上的,GPT是磁盘分区表,EFI系统分区是用于存储操作系统引导程序和其他UEFI应用程序的特殊分区,操作系统引导程序则是由用户安装的操作系统自带的。
MBR (Master Boot Record,主引导记录)
主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序;第二部分是Partition table区(DPT分区表),占64个字节;第三部分是Magic number,占2个字节。
GPT 分区格式
GPT分区格式包含传统MBR(主引导记录)、分区表头、分区表、备份分区表头、备份分区表以及数据区。
使用工具
fdisk, 查看磁盘分区情况,或者用于磁盘分区,注意 fdisk 只支持 MBR 分区格式,只支持 2T 以下的磁盘
lsblk, 查看磁盘分区情况
blkid, 获取分区 UUID ,用于编辑 /etc/fstab 永久挂在分区
parted, 查看磁盘分区情况,或者用于磁盘分区,支持 MBR 或者 GPT 分区格式,支持 2T 以上的磁盘
mkfs.ext4, 用于分区后的磁盘文件系统格式化
mount, 挂载磁盘分区
dd, 磁盘克隆的工具
1 | # 读取硬盘的mbr扇区 |
以上命令的使用方法请参考:
解决方案
目标磁盘大于原磁盘
需要磁盘克隆的服务器,其硬盘有4T大小,但只使用了不到512G,用于克隆的目标磁盘同样有4T大小。因此考虑先生成原磁盘的镜像文件,再向目标磁盘克隆。具体步骤如下:
- 挂载目标磁盘,GPT分区,并ext4格式化。
- 生成原磁盘的镜像文件
1 | # /media/nvme1n1 为目标磁盘挂载目录 |
- 将生成的原磁盘镜像文件复制到原磁盘的 root 目录
1 | mv /media/nvme1n1/nvme0n1.dd.gz /root |
- 使用原磁盘的镜像文件克隆磁盘
1 | gzip -dc /root/nvme0n1.dd.gz | dd of=/dev/nvme1n1 |
目标磁盘小于原磁盘
如果目标磁盘小于原磁盘,就不能简单的使用dd命令进行全盘克隆了。好在原磁盘实际使用的空间不大,因此,采用的步骤如下:
- 在目标磁盘安装同样的CentOS操作系统
- 使用 dd 命令克隆 root 分区
对于 home 分区,应根据不同情况不同处理:
- 如果 home 分区文件系统占有空间相对较小,可使用 tar 命令压缩 home 分区的文件,然后解压到目标磁盘的 home 分区,并更改 home 分区文件夹的所有者。
- 如果 home 分区文件系统占用空间相对很大,那干脆用 dd 命令克隆 home 分区更省事。
- 如果 home 分区为 ext 文件系统,可考虑使用 resize2f 缩小文件系统,在缩小文件系统后,在使用 fdsik 或者 parted 缩小 home 分区大小,没有问题后,考虑使用 dd 命令克隆 home 分区。
- 如果 home 分区为 xfs 文件系统,由于 xfs 文件系统不支持缩小,可以考虑使用 xfsdump 备份,等缩小 home 分区后,使用 xfsrestore 还原 home 分区。
参考链接
- linux下使用fdisk进行磁盘分区详解,by 人生的哲理.
- fdisk 管理磁盘分区,by gnu.
- UEFI是什么意思?UEFI和BIOS的区别是什么?,by 小橙7.
- UEFI是什么?与BIOS的区别在哪?,by 平凡而伟大(心之所向).
- 装机、做系统必备:秒懂MBR和GPT分区表,by 张伟.
- GPT 磁盘分区格式简介及解析示例,by 一柯.
- GUID Partition Table (GPT) Disk Layout,by uefi.
- Linux下使用dd命令备份硬盘,by zuyunfei.
- How to gzip and keep original file on Unix or Linux command line,by Vivek Gite .
- BIOS 与 UEFI 引导流程,by LARRY1024.
- LVM原理与实现,by 戴思达.
- CentOS 7 调整 XFS 格式的 LVM 分区大小,by Tom Ma.
- CentOS 8 逻辑卷管理LVM详解(扩容、快照等),by 把倒立的世界腾空.
- resize2fs 缩小根分区 linux缩小根分区大小,by 编程小匠人.
- Linux下对LVM逻辑卷分区大小调整 [针对xfs和ext4文件系统],by 散尽浮华.
- Linux无损调整分区大小,by anuoua.
- 无损扩容Linux磁盘分区容量,by orchidflower.