【 XBATU . COM 】    【 MOZICHINA . COM 】    【 2858999 . COM 】


 

为什么 Linux dd 命令可以用来制作 U盘 系统启动盘、系统安装盘?

webmaster@李松涛 提交于 周一, 05/08/2017 - 12:59

作者:【webmaster


 

为什么 Linux dd 命令可以用来制作 U盘 系统启动盘、系统安装盘?

背景:

OS:Ubuntu 16.04

dd:Version 8.25

首先我们看一下 Linux dd 命令的官方帮助摘要:

lst@xbatu.com:~$ dd --help
Usage: dd [OPERAND]...
  or:  dd OPTION
Copy a file, converting and formatting according to the operands.

 

dd命令用于转换和复制文件,由于它是按照磁盘结构进行复制,用指定大小的块为单位进行拷贝,它可以把一块硬盘上的内容按照原有的结构复制到另外一块硬盘,并在拷贝的同时进行指定的格式转换。

所以我们可以用dd命令来烧写树莓派的系统启动盘、安装盘,一般情况下,树莓派的系统启动盘、安装盘就是一张SD卡,或者制作其他系统的启动U盘。

 

步骤:

1、使用Linux 命令 fdisk -l 查看U盘的设备信息及文件系统类型,我的为/dev/sdb1,根据您要制作的系统启动盘的需求,看看是否需要格式化 U 盘。

2、卸载已挂载的U盘

umount /dev/sdb1

3、如果需要格式化U盘,执行格式化命令:mkfs.xxx /dev/sdb1,否则忽略这一步。

请将xxx换成您需要的文件系统类型,如fat、vfat、ntfs、ext4等等

4、如果需要,请重新挂载U盘,执行mount 命令。

5、制作启动盘:

网上很多类似文章都说:用Linux dd 命令 制作系统启动盘期间,终端命令窗口不会有任何反馈输出,当看到终端命令窗口有返回消息即制作完成,并且还无法明确判断是否制作完全成功,那是因为他们用的是类似如下格式的命令:

# dd bs=4M if=/您的路径/您的.iso of=/dev/sdb && sync

如果/dev/sdb 出错的话,换成/dev/sdb1 再试试!^_^

 

接下来,我们来点新鲜的!^_^

其实用Linux dd 命令 制作系统启动盘期间,终端命令窗口是可以持续输出中间的复制信息的,只要给上面的命令添加一个选项值:status=progress ,变成下面这样的命令串:

# dd status=progress bs=4M  if=/您的路径/您的.iso  of=/dev/sdb && sync

运行该命令,看看效果,应该是符合预期。

从此,再也不会发生:在使用 Linux dd 命令制作系统启动盘的漫长的等待期间,战战兢兢地以为系统死机了的糟糕体验啦!^_^

当该命令执行完成后,为了进一步确认是否制作成功,您可以通过运行命令:

echo $?

查看上一个命令的返回值,一般返回值为 0 ,表示上一个命令执行成功。

 

延伸内容:

功能强大的 Linux dd 命令 可以帮我们完成哪些任务?

我们可以用命令

kill -l

来查看当前的 Linux 系统所支持的所有信号种类。

Ubuntu 16.04 没有 INFO 信号,但是有 USR1、USR2 信号。

下面是摘自 GNU.ORG 的关于 Linux dd 命令的一些权威内容及原文链接,感兴趣的朋友们可以读一读,这里我就不翻译了,以免班门弄斧、弄巧成拙。^_^


http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html#dd-invocation

For failing disks, other tools come with a great variety of extra functionality to ease the saving of as much data as possible before the disk finally dies, e.g. GNU ddrescue. However, in some cases such a tool is not available or the administrator feels more comfortable with the handling of dd. As a simple rescue method, call dd as shown in the following example: the options ‘conv=noerror,sync’ are used to continue after read errors and to pad out bad reads with NULs, while ‘iflag=fullblock’ caters for short reads (which traditionally never occur on disk based devices):

# Rescue data from an (unmounted!) partition of a failing disk.
dd conv=noerror,sync iflag=fullblock </dev/sda1 > /mnt/rescue.img

Sending an ‘INFO’ signal (or ‘USR1’ signal where that is unavailable) to a running dd process makes it print I/O statistics to standard error and then resume copying. In the example below,dd is run in the background to copy 5GB of data. The kill command makes it output intermediate I/O statistics, and when dd completes normally or is killed by the SIGINT signal, it outputs the final statistics.

# Ignore the signal so we never inadvertently terminate the dd child.
# Note this is not needed when SIGINFO is available.
trap '' USR1

# Run dd with the fullblock iflag to avoid short reads
# which can be triggered by reception of signals.
dd iflag=fullblock if=/dev/zero of=/dev/null count=5000000 bs=1000 & pid=$!

# Output stats every second.
while kill -s USR1 $pid 2>/dev/null; do sleep 1; done

The above script will output in the following format:

3441325+0 records in
3441325+0 records out
3441325000 bytes (3.4 GB, 3.2 GiB) copied, 1.00036 s, 3.4 GB/s
5000000+0 records in
5000000+0 records out
5000000000 bytes (5.0 GB, 4.7 GiB) copied, 1.44433 s, 3.5 GB/s

The ‘status=progress’ option periodically updates the last line of the transfer statistics above.

On systems lacking the ‘INFO’ signal dd responds to the ‘USR1’ signal instead, unless the POSIXLY_CORRECT environment variable is set.

An exit status of zero indicates success, and a nonzero value indicates failure.


 

 


 

审编:【webmaster】          校对:【webmaster】          关于:【webmaster】 

原创:【赛因拔都:XBATU.COM】          


【 XBATU . COM 】    【 MOZICHINA . COM 】    【 2858999 . COM 】