Ubuntu 用 dd 指令复制档案

3/26/2017
共享:
... 阿舍 ! 这个用 cp 指令来复制档案不是就已经很方便了,为什么还要用到 dd 指令哩 ?! ... 这个嘛,是因为阿舍正在写一篇用 debugfs 指令来救回已删除档案的文,然后,就发现里面要用到 dd 指令来把档案从被删除的区块(Block)中搬到另外的档名来存放,阿舍觉得这个方式也可用来复制档案,而且,可以从 dd 复制的方式来练习从档案区块救回资料的方式,所以,阿舍先来写这篇文来介绍一下啰 !


在开始之前,阿舍要先说一下,这篇文会提到二个和 Linux 档案系统有关的东西,一个是 Inode,另一个就是 Block(区块),有关 Inode 的说明和介绍请参考阿舍写的这一篇文,而有关区块的部份,你可以把当作是档案系统的最小储存单位,在 Linux 的档案系统上,一般是 4096 byte,所以,当你存一个档案小于 4096 byte 时,还是会用到一个区块哩 ! 但是,一个区块的单位也可能不是 4096 Byte,可以用下面的指令来查一下啰 ! (以阿舍的硬碟代码是 /dev/sda1 为例)

 $ blockdev --getbsz /dev/sda1

了解 Inode Block 之后,接下来,阿舍就可以开始说明用 dd 指令复制档案的操作步骤哩 ! 首先,当然是要先查出档案的资料所存放的 Block 的开始和结束位置,查询的方式有二种,下面的第一种是用档案名称,而第二种则是用 Inode 编号,下面是以阿舍要复制 /dev/sda1 磁碟上的 /home/arthurtoday/xyz.zip 档案为例。

 $ sudo debugfs -R 'stat /home/arthurtoday/xyz.zip' /dev/sda1

 $ sudo debugfs -R 'stat <149665' /dev/sda1


执行完上面的指令后,会看到类似下面这样的结果 (按下 q 字母键可跳出),而阿舍需要的资料是最下面那一行的数字,也就 "EXTENTS:" 下面那一行,那个就是这个档案的 Block 开始编号 2752512 和结束编号 2786584 及它帮忙算好的共有 34072 Block 的这个数字哩 !

Inode: 149665   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1253879810    Version: 0x00000000:00000001
User:  1000   Group:  1000   Size: 139560875
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 272584
Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x558f59f3:e0d6becc -- Sun Jun 28 10:20:35 2015
  atime: 0x558f5c1d:0766fe08 -- Sun Jun 28 10:29:49 2015
  mtime: 0x558f59f3:e0d6becc -- Sun Jun 28 10:20:35 2015
crtime: 0x558f59f0:87318650 -- Sun Jun 28 10:20:32 2015
Size of extra inode fields: 28
EXTENTS:
(0-32767):2752512-2785279, (32768-34072):2785280-2786584

有了这几个数字之后,阿舍就可以用 dd 指令来复制档案啰 ! 下面就用 dd 指令来复制这个档案的方式和说明,执行后,应该就会产出档案,但是,复制出来的档案可能会比原来的大,因为是以 Block 为单位来复制的,不过,并不会改变或影响档案的内容的,但是,如果复制出来的档案比较小,通常就会有问题哩 !

 $ sudo dd if=/dev/sda1 of=f.zip bs=4096 count=34073 skip=2752512

 # if 选项用来指定磁碟装置代号
 # of 选项用来指定复制出来的新档案名称和路径
 # bs 选项用来指定 Block 的大小,也就是用 blockdev 指令取到的数字
 # count 选项用来指定要复制几个 Block,记得要多加 1 才行,以阿舍查的档案查到的 Block 数是 34072 为例,这个选项就要变成放 34073 才对
 # skip 选项就是要放上面查到的 Block 的开始编号


这种以 Block 为基础的资料复制方式拿来复制完整的档案可能不太实用,但是,如果是用在无法以档名直接复制资料或要从光碟或磁碟直接复制某些资料出来时,就会满实用的啰 ! ...

共享:

没有评论 :

发表评论