研究下 dd 命令,可以实现你所说的需求,大致使用如下的命令,可以配合其他参数:
dd if=/dev/sda of=/dev/sdb
---
man dd
```
DD(1) General Commands Manual DD(1)
NAME
dd - 转换和拷贝文件
摘要
dd [--help] [--version] [if=file] [of=file] [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes]
[skip=blocks] [seek=blocks] [count=blocks] [conv={ascii, ebcdic, ibm, block, unblock, lcase,
ucase, swab, noerror, notrunc, sync}]
描述
当进行非强制的转换的时候,使用指定的输入和输出块大小拷贝文件 (默认是从标准输入到标准输出。)
它每次从输入读取指定大小的一个块(默认是 512 字节)。 如果使用 bs=bytes 选项,并且没有转换,除了指
定 sync, noerror, 或 notrunc 之外, 那么 dd 将把全部读到的数据(可以比请求读的少) 写到独立的输出块
去。 这个输出块的长度和读到的数据 完全一样,除非指定使用 sync (同步) 转换,那样的话,数据结尾处
将追加 NUL 字符(或空格,见下)。
其他情况下,输入的时候每次读一个块,然后处理,并将 输出结果收集起来,最后写到指定大小的数据块中
去。最 终的输出块可能会比指定的大小短一些。
数字值选项(以字节或块为单位)后面可以跟一个乘数:k=1024 ,b=512 ,w=2 ,c=1 ( w 和 c 是 GNU 扩展语法。最
好别 使用 w ,因为在 system V 中,它表示 2 ,在 4.2 BSD 中,它 表示 4 )。两个或更多的数值表达式可以通过
“x”乘起来。 GEU fileutils 4.0 并且允许在数据块大小的叙述中使用 下列乘法后缀(
用 bs=,cbs=,obs=):M=1048576 ,G=1073741824 , 同理可得 T ,P ,E ,Z ,Y 。D 后缀表示数值是以 十进制表
示的:kD=1000 MD=1000000 GD=1000000000 等等。 (注意,在 ls 、df 、du 命令中,M 等标记的大小是由环境 变
量确定的,而在 DD 中,它的值是固定的。)
选项
if=file
从 file 中读而不是标准输入。
of=file
写到 file 里去而不是标准输出。除非指定 conv=notrunc ,否则,dd 将把 file 截为 O 字节(或由
seek= 选项指定的大小)
ibs=bytes
一次读 bytes 字节。默认是 512 。
obs=bytes
一次写 bytes 字节。默认是 512 。
bs=bytes
一次读和写 bytes 字节。这将覆盖 ibs 和 obs 设定的值(并且,设定 bs 不等于同时将 ibs 和 obs
设为同一个值,至少在 只使用 sync, noerror 或 notrunc 转换时是这样的。因为 bs 规定,每个输入
块都应作为单独 的数据块拷贝到输出,而不把较短的块组合到一起)。
cbs=bytes
为 block 转换和 unblock 转换指定转换块的大小。
skip=blocks
在拷贝之前,跳过输入文件的前 blocks 块,每块大小为 ibs-byte 字节。
seek=blocks
在拷贝之前,跳过输出文件的前 blocks 块,每块大小为 obs-byte 字节。
count=blocks
只拷贝输入文件的前 blocks 块(每块的大小为 ibs-byte 字节),而不是全部内容,直到文件末尾。
conv=转换"[,"转换"]..."
将文件按 转换 参数指定的方式转换(在“,”两边没有空格)。
转换方式包括:
ascii 将 EBCDIC 转换成 ascii 。
ebcdic 将 ascii 转换成 ebcdic 。
ibm 将 ascii 转换成 alternative ebcdic 。
block 每一行输入,无论长短,输出都是 cbs 字节,并且其中的“换行”( NEWLINE ,即 c 中的'0 )用
空格替换。如有必要,行尾会填充空格。
unblock
用“换行”替换每个输入块( cbs 字节大小)末尾的空格。
lcase 将大写字母转换成小写。
ucase 将小写字母转换成大写。
swab 交换每对输入字节。如果读入的字节数是奇数,最后 一个字节只是简单的复制到输出(因为没
有能跟它交换的 字节了)( POSIX 1003.26 ,PASC 翻译 1003.2 3 号和 4 号)。
noerror
发生读错误时,继续进行。
notrunc
不截断输出文件。
sync 用 0 填充到每个输入块的末尾,使其大小为 ibs 字节。
GNU 标准选项
--help 将用法信息打印到标准输出,并成功退出。
--version
将版本信息打印到标准输出,并成功退出。
-- 结束选项列表。
环境变量
LANG, LC_ALL, LC_CTYPE 和 LC_MESSAGES 具有其通常含义。
遵循标准
POSIX 1003.2
举例
磁带机通常不能接受任意大小的数据块,当最后一个数据片 段不能充满整个块时,dd 将出现 I/O 错误。用'dd
if=myfile of=/dev/mytape conv=sync' 就可以使全部内容存到磁带上。当然,这样做,把文件从磁 带上读回
时回产生一个稍大些的文件,因为其尾部填充了一 些 NUL (空字符)。
注
本手册页描述了 fileutils-4.0 软件包中的 dd 命令。其他版 本的 dd 会与此稍有不同。有关更正和补充可以发
帖到中国 linux 论坛-man 手册版。报告程序中的错误,请给
fileutils-bugs2gnu.ai.wit.edu 发邮件。
```