在线通过dd命令备份分区

一般不推荐在线备份分区,因为在线使用dd命令备份分区时,如果硬盘有写入会导致导出的镜像文件的文件系统存在错误。

这次尝试在线备份根分区,主要想看下后续mount时会产生什么问题。

正巧,我在3A平台购买了云服务器,可以测试一下。

dd 命令直接按字节读取硬盘,硬盘上有什么就读到什么,至于上面是文件系统还是分区表它并不关心。所以说它是不挑系统的,所有系统通吃。dd 备份分区命令如下:

$ dd if=/dev/sda2 of=dev_sda2.img bs=1K1827972096+0 records in1827972096+0 records out1871843426304 bytes (1.9 TB, 1.7 TiB) copied, 22207.3 s, 84.3 MB/s

命令说明:

  • if 是输入文件

  • of 是输出文件,备份分区时输入输出不能在同一分区

  • bs 每次读取的字节数

其中 bs 参数会影响读取效率,可以调整 bs 参数来测试导出速度,加一个 count 参数来测试导出相同大小的内容时不同的导出速度。

$ dd if=/dev/sda2 of=/dev/null bs=1K count=10240$ dd if=/dev/sda2 of=/dev/null bs=1M count=10

bs 参数接的是字节,可用的单位为:

  • b =512
  • kB =1000
  • K =1024
  • MB =1000*1000
  • M =1024*1024
  • GB =100010001000
  • G =102410241024
  • T, P, E, Z, Y 的换算关系类似

直接导出硬盘和导分区是有区别的,如果 dd 的对象是硬盘,比如 /dev/sda 此时导出的内容是带分区表的。如果导出的是分区,则不带分区信息。如果分区已经格式化,则导出的分区是带文件系统的。

当导出完毕,我尝试 mount 导出的文件,此时报错:

$ mkdir -p test$ mount -o loop -t ext4 dev_sda2.img testmount: wrong fs type, bad option, bad superblock on /dev/loop0,       missing codepage or helper program, or other errorIn some cases useful info is found in syslog - try       dmesg | tail or so.$ dmesg| tail[25909913.190780] EXT4-fs (loop0): error loading journal[25910631.353502] EXT4-fs (loop0): VFS: Can't find ext4 filesystem

当执行 mount 时内核报错,提示找不到文件系统,难道 dd 导出的文件不带文件系统?或者 mount 挂载命令用的不对?

为了排除挂载命令使用没有问题,我打算生成一个镜像文件尝试看能不能挂载成功。步骤是先生成一个空的镜像文件,再使用 mkfs 在镜像文件上生成文件系统,然后挂载这个镜像文件,看 mount 命令是否正确。

$ dd if=/dev/zero of=new.img bs=1M count=3232+0 records in32+0 records out33554432 bytes (34 MB, 32 MiB) copied, 0.0442892 s, 758 MB/s
$ dd mkfs.ext4 new.imgmke2fs 1.42.13 (17-May-2015)Discarding device blocks: 完成Creating filesystem with 32768 1k blocks and 8192 inodesFilesystem UUID: 8a66a04a-9adf-441a-9ed9-b7673e9d6995Superblock backups stored on blocks:        8193, 24577Allocating group tables: 完成正在写入inode表: 完成Creating journal (4096 blocks): 完成Writing superblocks and filesystem accounting information: 完成
$ mount -o loop -t ext4 new.img test$ ls testlost+found

loop 设备是一种特殊的块设备,它用将一个文件映射成虚拟块设备。这样就可以在文件上使用虚拟文件系统。通过 loop 设备,Linux 可以在文件中创建文件系统。

我们检查一下当前测试用的 loop 设备与文件之间的映射关系:

$ losetup -lNAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE/dev/loop0         0      0         0  0 /it/tts/dd/dev_sda2.img/dev/loop1         0      0         1  0 /it/tts/dd/new.img$ umount /it/tts/dd/new.img$ losetup -lNAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE/dev/loop0         0      0         0  0 /it/tts/dd/dev_sda2.img$ umount /it/tts/dd/dev_sda2.imgumount: /it/tts/dd/dev_sda2.img: not mounted

此时说明 loop 设备的绑定也没有问题,无法 mount 只说明文件系统出了问题。我们是在 /dev/sda2 在线状态导出的,也就是说没有 umount 这个分区,此时文件系统还处于读写状态。执行 dd 读取分区时有可能文件系统上会出现不一致的情况。我们尝试修复文件系统,看导出的镜像文件能否能正常打开。

$ e2fsck -vf dev_sda2.imge2fsck 1.42.13 (17-May-2015)ext2fs_open2: Bad magic number in super-blocke2fsck: 超级块无效, trying backup blocks...超级块没有needs_recovery标志,但是日志中没有数据。Recovery flag not set in backup 超级块, so running 日志 anyway.dev_sda2.img: 正在修复日志第一步: 检查inode,块,和大小删除 inode 8657418 has zero dtime.  处理<y>? 是删除 inode 27005985 has zero dtime.  处理<y>? 是删除 inode 101337409 has zero dtime.  处理<y>? 是删除 inode 101337425 has zero dtime.  处理<y>? 是第二步: 检查目录结构目录inode 27000833, 第 块 #0 块, 偏移量 0: 目录损坏修复<y>? 是目录inode 27000833 中缺少 '.'.处理<y>? 是

在文件系统修复过程中有大量的坏块确认,这里强烈建议加上-y参数,不然有超级多的确认需要输入:

$ e2fsck -vfy dev_sda2.img

修复后e2fsck会给出统计信息:

Free inodes count wrong for 簇 #13696 (8192, counted=8191).处理<y>? 是Directories count wrong for 簇 #13696 (0, counted=1).处理<y>? 是Free inodes count wrong (114253815, counted=113440900).处理<y>? 是dev_sda2.img: ***** 文件系统已修改 *****812924 inodes used (0.71%, out of 114253824)        1537 non-contiguous files (0.2%)         453 non-contiguous directories (0.1%)             # of inodes with ind/dind/tind blocks: 0/0/0             Extent depth histogram: 754175/818    26930922 blocks used (5.89%, out of 456993024)           0 bad blocks           5 large files632546 regular files      105582 directories          57 character device files          25 block device files         118 fifos      114521 links       74580 symbolic links (57716 fast symbolic links)           9 sockets------------      927410 files

在文件系统扫描的过程中,有些坏块导致文件受损,这些受损的内容会存放到文件系统的 lost+found 目录。

文件系统修复后,我们尝试使用 mount 挂载镜像文件:

$ mkdir -p test$ mount -o loop dev_sda2.img test$ cd test$ df -h .Filesystem      Size  Used Avail Use% Mounted on/dev/loop1      1.7T   76G  1.6T   5% /it/tts/dd/test

最终成功挂载,也可以查看到镜像文件的内容。如果要使用 dd 备份文件系统或分区,一定要在分区 umount 状态下执行 dd。虽然可以在线执行,但导出的镜像文件的文件系统存在错误。虽然可以通过 e2fsck 进行修复,但有可能出现文件受损的情况。为保证文件系统的一致性,应该在 umount 下执行 dd 导出。

在线通过dd命令备份分区相关推荐

  1. dd linux命令 分区,使用dd命令备份Linux分区

    为了备份分区,开始使用的是Remastersys,但最终生成的iso文件仅有几十K,应该是软件bug,且此软件不再更新,后尝试使用Linux Respin,但github一直连接不上. 其实可以尝试使 ...

  2. linux dd copy all partitions,Linux 系统下使用dd命令备份还原MBR主引导记录

    https://www.cyberciti.biz/faq/howto-copy-mbr/ https://www.cyberciti.biz/faq/linux-clearing-out-maste ...

  3. linux dd恢复分区,Linux dd命令备份和恢复分区与磁盘、分区表、MBR等

    1,查看磁盘挂载状态:df -h 2,开始备份磁盘分区,命令格式为: dd if="设备或文件名" of="备份文件的路径",下文示例的磁盘分区为/dev/sd ...

  4. linux通过dd命令把分区,linux dd命令使用详解

    dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m 输入文件名,缺省为标准输入. of=file 输出文件名, ...

  5. 10205以下需要使用kfed或者dd命令备份asm disk header

    asm disk 元数据都保存在disk header上,如果没有备份,一旦disk header损坏,那么asm disk 就不能mount了.所以备份asm disk header的信息是必要的. ...

  6. 在TTL线下使用DD命令备份电视盒子各个分区教程

    1.跑马以后请在跑马窗口内代码:df ,然后回车键,查看下U盘的路径,一般为:/mnt/sda/sda1 2.输入新的代码:ll /dev/block,查看mmcblk0p分区有几个(看最后面最大的数 ...

  7. dd命令 备份和恢复磁盘 linux系统下

    备份: [root@server~]#ddif=/dev/sdaof=/dev/sdb =>备份整个磁盘到另外一个磁盘 [root@server~]#ddif=/dev/sdbof=sda.ba ...

  8. linux备份磁盘数据,linux下vmstat输出数据分析-linux下dd命令备份磁盘的节点(...-linux watch命令用法简介(图文)_169IT.COM...

    Linux下vmstat命令的输出,对应着很多选项,有的朋友不是很明白. 下面为大家作详细的分析,如下: Vmstat procs -----------memory---------- ---swa ...

  9. linux驱动器和分区的备份,使用dd命令示例

    dd命令是Linux发行版非常简单的备份工具. "dd"工具简单的拷贝标准输入到标准输出,在512字节块读取. dd 命令是Linux发行版非常简单的备份工具.该"dd& ...

最新文章

  1. 超级简单的jquery轮播图demo
  2. 关于自动驾驶汽车法律政策的十点思考
  3. java面向对象第一章
  4. 测试一个数是不是素数
  5. 也谈1+2+3+...+n的解答
  6. 推荐一个不到300k的Gif处理神器 - Gifsicle(免费下载)
  7. JS实现省市联动效果
  8. 自定义线程类中实例变量与其他线程共享与不共享
  9. POJ 1150 The Last Non-zero Digit 数论+容斥
  10. Source InSight context 窗口丢失的解决办法
  11. LeetCode(225)——用队列实现栈(JavaScript)
  12. ubuntu18.04多版本opencv
  13. SpringMVC RedirectView的使用以及源码分析
  14. 云计算核心技术剖析学习笔记_2
  15. 终于搞定阿里云ftp的问题
  16. 云计算里的家校互联平台
  17. 九大内置对象的作用以及应用场景
  18. 新主播如何在直播行业混得好
  19. 2、恩智浦-车规级-MCU :S32K11X GPIO实验
  20. ipad无线怎么重新连接到服务器,iPad不能连接无线怎么办 iPad不能连接无线解决方法【详解】...

热门文章

  1. 图吧地图(V5.0公测版) 高清地图今日公测
  2. 云计算大数据学习中心作业2
  3. 卷积神经网络及图像处理中共享权重、特征映射等理解
  4. BUUCTF misc 九连环
  5. 腾讯云服务器域名申请 备案和绑定IP地址详细步骤带清晰图
  6. php memcached 性能测试,多种方法实时监测 Memcached 命中率
  7. 蓝桥杯 土地的面积计算
  8. mysql数据创建用户及授权
  9. ubuntu系统构建VNC虚拟远程桌面
  10. 使用vue-cli快速构建项目