linux中dd备份数据会丢吗

linux中dd备份数据会丢吗?怎么看备份过去的数据,为什么恢复之后挂在不了,为啥还需要格式化

在Linux中,使用dd命令备份数据时,一般情况下不会丢失数据,但如果备份过程中出现错误或中断,可能会导致备份的数据不完整或出现丢失。

要查看备份过去的数据,可以使用dd命令结合其他命令或工具来实现,例如:

使用hexdump命令查看备份文件的内容,例如:
mathematica
Copy code
hexdump -C backup.img
这将以16进制和ASCII码的形式显示备份文件backup.img的内容。

使用diff命令比较备份前后的文件差异,例如:
bash
Copy code
diff -s /dev/sda1 backup.img
这将比较/dev/sda1和backup.img两个文件的内容,并显示它们之间的差异。

需要注意的是,在使用dd命令备份数据时,备份文件一般是一个完整的镜像,包括了原始磁盘或分区的所有内容,包括分区表和文件系统等。因此,在恢复数据之前,需要先将备份文件写入到目标磁盘或分区中,并重新创建文件系统。这也是为什么恢复之后还需要格式化的原因。具体的操作步骤可能因具体情况而异,需要根据备份文件和目标磁盘或分区的具体情况来决定。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:[linux] linux使用dd命令制作硬盘镜像 也许有你想要的答案,你可以看看
  • 你还可以看下linux参考手册中的 linux dd 它是一个用于Unix和类似Unix操作系统的命令行工具,主要目的是转换和复制文件
  • 除此之外, 这篇博客: linux命令-文件目录管理中的 dd 复制文件,依照指定操作数转换并格式化。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    语法: dd [操作数] ... 或: dd 选项(仅用于显示帮助信息–help和版本信息–version)

    常用操作数

      if=文件         从指定文件而非标准输入来进行读取
      of=文件         写入到指定文件而非标准输出
      bs=字节数       一次读写的比特数(默认: 512);会覆盖 ibs 和 obs 选项
      ibs=字节数      一次读取的字节数(默认: 512),与obs配合使用
      obs=字节数      一次写入指定字节数(默认: 512),与ibs配合使用
      cbs=字节数      一次转换的字节数
      count=块数      指定需要复制的输入块的数量
    

    **块数和字节数后可以带有以下的一个或多个后缀: **
    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。也可使用二进制进位前缀: 如 KiB=K、MiB=M 等等。

    以下3个复制操作数虽不同,但效果相同:

    # dd if=/dev/zero of=h1 count=1 bs=1024
    记录了1+0 的读入
    记录了1+0 的写出
    1024字节(1.0 kB,1.0 KiB)已复制,0.000397286 s,2.6 MB/s
    
    # dd if=/dev/zero of=h1 count=1 obs=1024 ibs=1024
    记录了1+0 的读入
    记录了1+0 的写出
    1024字节(1.0 kB,1.0 KiB)已复制,0.00090209 s,1.1 MB/s
    
    # dd if=/dev/zero of=h1 count=2
    记录了2+0 的读入
    记录了2+0 的写出
    1024字节(1.0 kB,1.0 KiB)已复制,0.000301429 s,3.4 MB/s
    
    

    /dev/zero:“零”设备,本身不占存储空间,但可以无限的提供空字符(0x00,ASCII代码NUL)。常用来配合dd命令生成一个特定大小的文件。

  • 以下回答来自chatgpt:

    回答:

    dd 命令备份数据是可靠的,因为它是按照字节复制的,可以完整地备份硬盘或分区的数据。但是,在备份或恢复时需要保证 of 指向的文件或磁盘空间要大于 if 指向的内容,否则备份或恢复会失败。

    备份过去的数据无法挂载,需要重新格式化的原因可能是因为备份时备份的不仅是硬盘或分区的数据,还包含了硬盘或分区的元信息(如磁盘分区表或文件系统信息),在恢复时如果没有完整地恢复元信息,可能就无法挂载。

    要查看备份过去的数据,可以使用类似 xxd 的工具查看备份文件的内容。例如命令 "xxd -s 100000000000 /dev/sdb | more" 可以查看第100G的位置的情况。结合自己硬盘的大小,可以执行几次带不同-s的xxd命令查询大概进度。

    如果硬盘需要重新格式化,可以使用一些脚本来批量进行格式化。例如下面的脚本使用 dd 命令格式化硬盘,可以通过 iostat -x 1 命令查看硬盘的读写情况,通过 xxd 命令大概查询格盘进度。

    #!/bin/bash
    boot_dev=`df | grep "/$" | awk '{print $1}' | grep -o "/dev/sd[a-z]"` #确定系统所在硬盘
    for disk in /dev/sd[a-z];do
        if [ "$disk" != "$boot_dev" ];then
            nohup dd if=/dev/zero of=$disk bs=100M >/dev/null 2>&1 & # dd中添加bs=100M可以提升格式化速率,默认是512byte
        fi
    done
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^