dd

(0 comments)

dd 是 Unix 下安字节复制文件的工具。

常用参数:

if	指定源文件
of	指定目标文件
bs	指定块大小
count	指定复制块的数量
skip	读取跳过的块数量

读写软盘

制作引导软盘

dd if=bootdisk.img of=/dev/fd0

读取软盘内容

dd if=/dev/fd0 of=floppy.img

读写磁带

读取磁带,磁带前面 32k 是是磁带头信息,因此恢复数据时跳过前 32K:

dd if=/dev/nst1 bs=32k skip=1 of=dump_image.tar

写入磁带

dd if=dump_image.tar bs=32k of=/dev/nst1

读写硬盘

dd 读写硬盘时,必须确保硬盘没有进程访问。因此建议将磁盘 umount 后再进行读写操作。

将硬盘分区整个备份到磁带中,假设文件系统的格式是 ext3,默认的 block size 为 4096:

备份磁盘

dd if=/dev/hda of=/dev/nst1 bs=4096

恢复磁盘

$ dd if=/dev/nst1 of=/dev/hda bs=4096

将硬盘分区备份到 image 文件,实现类似 Ghost 的功能:

备份磁盘

dd if=/dev/hda1 of=/backup/disk-boot.img bs=4096

恢复磁盘

dd if=/backup/disk-boot.img of=/dev/hda1 bs=4096

使用 dd 备份磁盘的最大缺陷是它不能识别空白的空间,因此如果硬盘分区有 10G,那么备份出来的文件大小就有 10G。备份出来的 img 文件可以使用 bzip2 等压缩工具压缩,在磁盘利用率不高的情况下能够有很高的压缩率。

读写文件

有一些特殊的设备文件,例如 /dev/zero 代表一个永远输出 '0' 的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。

例如,创建大小为 500K 的新文件:

dd if=/dev/zero of=/tmp/a bs=1024 count=500

另外还可以用覆盖的方式清除文件、磁盘、磁带等设备,这种方式清除是不可能恢复的。例如,完全销毁磁带内容:

dd if=/dev/zero of=/dev/st1 bs=5M

MBR

硬盘的第 0 柱面 0 磁道 1 扇区(clindyer 0, side 0, sector 1) 共 512 字节为硬盘主引导扇区,包括:硬盘主引导记录(MBR)446 字节(0000–01BD),硬盘分区表(DPT)64 字节(01BE–01FD),结束标志 2 字节(55 AA)。

dd if=/dev/hda of=/etc/mbr.img bs=512 count=1

仅恢复 MBR,而保留新的分区表:

dd if=/etc/mbr.img of=/dev/hda bs=446 count=1 

DOS 中需要借助其他工具来备份 MBR,但 fdisk 可以直接删除 MBR:

c:> fdisk /mbr

DPT 只能包含最多 4 个分区,为主分区和扩展分区。而所有逻辑分区在主引导扇区(DBR)中,位于硬盘的 1 柱面 0 磁道 1 扇区(clindyer 0, side 1, sector 1)中。

因为 DPT 的尺寸是不固定的,因此暂时没找到备份整个分区表的方法,不过可以用 fdisk -l 方式来备份分区信息。

Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required