有很多你想要可令一个Linux分区或者甚至硬盘驱动器的原因,其中大部分原因是与创建你数据的备份有关。在Linux中你通过诸如partimage或Clonezilla的一些外部工具实现这个目标。
在本文中,我们将回顾用称作dd的工具进行Linux磁盘克隆,这个工具最常用于转换或复制文件并且它预装在大部分Linux发行版中。
如何克隆Linux分区
你能够用dd命令复制整个磁盘驱动器或者仅一个Linux分区。我们从克隆我们一个分区开始。在这里,我有以下驱动器:/dev/vda,/dev/vdb,我将克隆/dev/vdb1到/dev/vdb2。
首先使用如下所示fdisk命令列出这些分区:
[root@telecom ~]# fdisk -l /dev/vdb1 /dev/vdb2
Disk /dev/vdb1: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/vdb2: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
现在使用以下dd命令克隆一个分区/dev/vdb1到/dev/vdb2。
[root@telecom ~]# dd if=/dev/vdb1 of=/dev/vdb2
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 526.379 s, 20.4 MB/s
在克隆Linux分区之后,你可以用以下检查两个分区:
[root@telecom ~]# fdisk -l /dev/vdb1 /dev/vdb2
Disk /dev/vdb1: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/vdb2: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
如何克隆Linux硬盘驱动器
克隆一个Linux硬盘驱动器类似克隆一个分区。但是不是指定分区,你只要指定整个驱动器。注意:推荐磁盘驱动器大小与源驱动器大小相同(或更大)。
[root@telecom ~]# dd if=/dev/vda of=/dev/vdb
83886080+0 records in
83886080+0 records out
42949672960 bytes (43 GB) copied, 2479.5 s, 17.3 MB/s
这应该用在硬盘驱动器/dev/vdb上复制了/dev/vda的分区。你可以用lsblk命令列出两个驱动器验证变化。
[root@telecom ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
├─vda1 253:1 0 4G 0 part [SWAP]
└─vda2 253:2 0 36G 0 part /
vdb 253:16 0 50G 0 disk
├─vdb1 253:17 0 4G 0 part
└─vdb2 253:18 0 36G 0 part
如何在Linux中备份MBR
dd命令也可以用于备份你的MBR,它位于驱动器的第一个扇区,在第一个分区之前。所以如果你想要创建你的MBR的备份,只要运行:
# dd if=/dev/vda of=/backup/mbr.img bs=512 count=1
以上命令告诉dd用512字节步长和count选项复制/dev/vda到/backup/mbr.img告诉只复制一个块。换句化,你告诉dd从/dev/vda复制最前面的512字节到你提供的文件。
[root@telecom ~]# dd if=/dev/vda of=/tmp/mbr.img bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0218645 s, 23.4 kB/s
[root@telecom ~]# ls /tmp/mbr.img -l
-rw-r--r-- 1 root root 512 Jul 9 21:51 /tmp/mbr.img
如何使用'cat'命令备份或克隆Linux分区
Linux cat命令的粗略使用是通过对照硬盘分区、或U盘或者本地映像文件重定向这个命令输出制作完整磁盘备份或者磁盘分区备份或者一个磁盘分区克隆或者写输出到一个网络套接字。
当dd更容易地做相同的工作时,你正常地认为我们为什么应该使用cat,因为碰到速度和性能时,cat比dd快得多。
dd提供了更多选项并且在处理诸如磁带驱动器的大型备份非常有用,而cat包括更少的选项并且它不是dd必要的替代,但还是在可用时的一个选项。
在复制一个分区的内容到一个新的未格式化分区中,cat命令非常成功地完成了这个工作。唯一要求是要提供一个有效的磁盘分区,这个磁盘分区要有已有文件的最小尺寸并且没有系统文件。
在以下示例中,在第一个硬盘上的第二个分区,其对应/根分区,即/dev/vda2,使用Linux重定向操作符被克隆到了第二个磁盘的第二个分区。
[root@telecom ~]# mount /dev/vdb2 /mnt/clone
在以上命令结束后,克隆分区被挂载到/mnt并且列出两个挂载点目录来检查是否缺失任何文件。
[root@telecom ~]# ls /mnt/clone/
bin dev lib64 opt sbin usr
boot etc lost+found proc srv var
CloudResetPwdUpdateAgent home media root sys
CloudrResetPwdAgent lib mnt run tmp
[root@telecom ~]# ls /
bin dev lib64 opt sbin usr
boot etc lost+found proc srv var
CloudResetPwdUpdateAgent home media root sys
CloudrResetPwdAgent lib mnt run tmp
[root@telecom ~]# ls /root/
frp_0.33.0_linux_amd64.tar.gz gitproject install_frp.sh pythondownload
[root@telecom ~]# ls /mnt/clone/root/
frp_0.33.0_linux_amd64.tar.gz gitproject install_frp.sh pythondownload
为了扩展这个分区文件系统到最大尺寸,用root特权发出以下命令:
[root@telecom ~]# resize2fs /dev/vdb2
resize2fs 1.42.9 (28-Dec-2013)
The filesystem is already 9436923 blocks long. Nothing to do!