1. 搞openwrt用到puppy linux时,直接将系统镜像写入到硬盘(重新启动从硬盘加载就变成 openwrt 对应的操作系统了)
1
| dd if=openwrt-x86-generic-combined-ext2.img of=/dev/sda
|
2.将bin文件作为镜像写入软盘 (于渊:所谓镜像,可理解为原始设备的逐字节复制。如软盘的第m个字节对应文件的第m个字节)
1 2
| nasm boot.asm -o boot.bin dd if=boot.bin of=/dev/fd0 bs=512 count=1 conv=notrunc
|
3.小测试
1 2 3 4 5
| dd if=/dev/zero of=a.img bs=1024 count=512 //制作全0镜像,大小为 1024bytes*512 =512k dd if=main.c of=/dev/tty //这个,其实相当于 cat 啦 dd if=main.c of=a.img obs=1024 seek=1 conv=notrunc //从a.img的 (1024bytes*1) 偏移处开始写入main.c对应的ASCII码,即使 if 较小也不要截断 of dd if=a.img | gzip > ./a.gz //把我们的这个镜像压缩一下(貌似tar没法这么搞) gzip -dc ./a.gz | dd of=b.img //把a.gz使用gzip解压后后得到 b.img(和a.img一模一样哈)
|
总的传输量大小 = ibscount
从 ibsskip 位置开始读取,从输出文件的 obs*seek 位置开始写入
conv=notrunc, 确保 if 较小时不要截断
4.总结
if=
of=
设备
:写入到块设备(映射到CPU地址总线的)则原封不动的逐字节写入物理存储memory(裸设备级别的写,需要把文件系统本身也写入,否则块设备将不包含文件系统,eg.写到flash,/dev/sda)。若写到字符设备,则调用其 write() 驱动函数(如/dev/tty, /dev/null)
文件
:写入位于(块设备中的)文件系统中的某个文件中(若文件原来不存在则会被创建)
ibs=1048576
(设定读取缓冲块大小,单位Byte,即每次读取1024*1024 bytes到缓冲块,或可写作 1024k 或 1M ),配合skip确定 if 读取位置的起始偏移,配合count确定dd传输的数据量大小(否则会一直传输,直到 if 文件末尾)
obs=1048576
(设定每次写入的缓冲块大小为 1024*1024 bytes),配合seek确定从 of 写入位置的起始偏移
bs=1048576
(设定 ibs=obs=1M bytes)
conv=notrunc
(设定当if文件大小<of文件大小时候,不要截断of。默认是截断的)