当前位置:首页 > 行业动态 > 正文

dd 存储迁移

dd 存储迁移是一种使用 dd 命令在 Unix 系统上进行数据复制和迁移的方法。它通过指定源文件和目标文件,将数据从一个位置复制到另一个位置,常用于磁盘克隆或备份。

dd命令简介

dd是Linux/Unix下的一个非常有用的命令,其作用是将指定大小的输入文件(或设备文件)按block为单位拷贝到指定的输出文件(或设备文件)中,并在拷贝的同时进行指定的转换,当不指定转换选项时,使用指定的输入和输出块大小来复制文件(默认是从标准输入到标准输出)。dd每次从输入文件或设备文件读取指定大小的一个块(默认是512字节),如果使用bs=bytes选项,将把全部读到的数据写到独立的输出块,这个输出块的长度和读到的数据完全一样,除非指定使用sync选项转换。

dd命令的主要选项

if=FILE:指定输入文件的名称,缺省为标准输入。

of=FILE:指定输出文件的名称,缺省是标准输出。

bs=BYTES:指定输入输出块的大小,取代ibsobs标志,由bs标志指定的块大小值必须始终是使用的媒介物理块大小的整数倍。

cbs=BYTES:指定由可变长度到固定长度和从固定长度到可变长度的转换块大小。

conv=CONVERSION[,CONVERSION]…:指定一个或多个转换选项,多个转换之间用逗号隔开。

count=BLOCKS:仅复制由BLOCKS变量指定的输入块的数量。

ibs=BYTES:指定输入块的大小;缺省为512字节。

obs=BYTES:指定输出块的大小;缺省为512字节。

seek=BLOCKS:在复制之前,从输出文件开头跳过BLOCKS值的块大小,每块大小为obs-byte字节。

skip= BLOCKS:在开始复制之前跳过指定的BLOCKS值的输入块,每块大小为ibs-byte字节。

数字值选项BLOCKSBYTES后面可以跟一个乘数:c =1,w =2,b =512,kB =1000,K =1024,MB =10001000,M =10241024,xM =M,GB =100010001000,G =102410241024等等,同理可得T,P,E,Z,Y

常用CONV转换参数介绍

block:将变长记录转换到固定长度,长度由转换块大小(cbs)决定,对于换行用空格代替,必要时使用空格填充。

unblock:将固定长度的块转化为可变长度,长度由转换块大小(cbs)决定,该选项与block选项冲突。

lcase:将所有大写字符转换为小写字符。

nocreat:不创建输出文件;输出文件必须已经存在。

excl:如果输出文件已经存在则操作失败,该选项与nocreat选项冲突。

dd 存储迁移

notrunc:不截取输出文件。

ucase:把所有小写字符转换为大写字符。

swab:交换每对输入字节,对于GNU dd,如果读入的最后的字节数是奇数,则只是简单的复制到输出(因为没有能跟它交换的字节)。

noerror:发生错误时也不停止进程,继续进行。

sync:使用zero字节将每个输入块填充到ibs值指定的长度,如果指定block或者unblock选项,则以空格补齐。

fdatasync:在复制结束之前,同步输出数据,改选项将会做物理写入操作。

fsync:在复制结束之前,同步输出数据和元数据,改选项将会做物理写入操作。

dd命令实例

整盘数据备份与恢复

1、将本地的/dev/sdx整盘备份到/dev/sdy

   sudo dd if=/dev/sdx of=/dev/sdy

2、将/dev/sdx全盘数据备份到指定路径的image文件:

   sudo dd if=/dev/sdx of=/path/image

3、备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:

   sudo dd if=/dev/sdx | gzip > /path/image.gz

4、恢复备份:

将备份文件恢复到指定盘:

dd 存储迁移

     sudo dd if=/path/image of=/dev/sdx

将压缩的备份文件恢复到指定盘:

     gzip -dc /path/image.gz | sudo dd of=/dev/sdx

备份MBR

1、备份磁盘开始的512Byte大小的MBR信息到指定文件:

   sudo dd if=/dev/sdx of=/path/file count=1 bs=512

2、恢复备份的MBR信息到磁盘开始部分:

   sudo dd if=/path/file of=/dev/sdx

备份软盘

1、将软驱数据备份到当前目录的disk.img文件:

   sudo dd if=/dev/fd0 of=disk.img count=1 bs=1440k

2、要使用36个512字节块来有效的实现向软盘的传输:

   sudo dd if=filename of=/dev/fd0 bs=36b conv=sync

3、将块大小为720字节的输入文件复制到软盘当中:

   sudo dd if=testfile of=/dev/fd0 bs=720b conv=sync

系统迁移步骤及注意事项

准备工作

1、确认目标磁盘的大小和分区情况,确保目标磁盘空间足够容纳源磁盘的数据。

2、确认目标磁盘未挂载,如果已经挂载,需要先卸载。

3、将目标磁盘与源磁盘连接到同一台机器上,可以使用外接硬盘或者虚拟机等方式。

使用DD命令进行系统迁移

1、打开终端,确保你有足够的权限来执行dd命令。

2、确定源磁盘的设备名,可以使用命令lsblkfdisk -l来查看系统中的磁盘设备信息,通常情况下,源磁盘的设备名为/dev/sda/dev/nvme0n1

3、确定目标磁盘的设备名,同样使用上面提到的命令来查看目标磁盘的设备名。

dd 存储迁移

4、使用以下命令进行系统迁移:

   sudo dd if=/dev/[source-disk] of=/dev/[target-disk] bs=4M conv=sync status=progress

[source-disk]是源磁盘的设备名,[target-disk]是目标磁盘的设备名。bs=4M表示使用4MB的块大小进行拷贝,conv=sync表示在每个块拷贝之后进行同步操作以确保数据完整性,status=progress表示显示拷贝进度。

5、等待dd命令完成拷贝操作,这可能需要一段时间取决于系统的大小和硬件性能。

6、系统迁移后的操作:

如果源磁盘和目标磁盘是相同大小的,迁移后你可以直接将目标磁盘连接到原来的机器上,启动系统即可。

如果目标磁盘比源磁盘大,你可以使用分区工具(如fdiskparted等)来扩展目标磁盘的分区。

如果目标磁盘比源磁盘小,可能需要进行额外的操作,如缩小分区等,在这种情况下,建议先进行数据备份再进行操作,以免丢失数据。

FAQs

Q1: dd命令中的if和of参数分别代表什么?

A1:if参数指定输入文件或设备的名称,即源数据所在的位置;of参数指定输出文件或设备的名称,即目标数据的存放位置,在命令dd if=/dev/sda of=/dev/sdb中,/dev/sda是源磁盘,/dev/sdb是目标磁盘。

Q2: 使用dd命令进行数据迁移时,如何确保数据的完整性?

A2: 为了确保数据的完整性,可以在使用dd命令时添加conv=sync选项,这个选项会在每个块拷贝之后进行同步操作,确保数据被正确地写入到目标设备中,还可以在拷贝完成后验证数据的一致性,例如通过比较源数据和目标数据的哈希值或其他校验和来确认数据是否完整且未损坏。