我正在学习dd
Linux中的命令。出于测试目的,我启动了此命令:
sudo dd bs=4M if=/dev/mmcblk0 of=/media/some_remote_host/stuff/myImage.img
我知道 dd 用于拍摄给定磁盘/驱动器的图像。但我很好奇它是否包括根据 Unix 文件结构挂载文件夹(文件结构),例如 /mnt 或 /media。试图查找但找不到。如果它包含 /mnt 和 /media 目录,是否意味着它可能会处于无限循环中?因为它会在写入时索引并开始存储 /media 文件夹的内容。或者*.img
当所有文件夹被扫描并存入内存时发生实际写入。
TL;DR:dd
命令是否将 /mnt 和 /media 文件夹包含到映像中?
希望您能解答我这些问题。谢谢。
设备规格:
- Raspbian OS 32 位,单驱动器(SD 卡)。
答案1
dd 对文件系统中的挂载、文件夹或 UNIX 文件结构一无所知。 dd 只知道原始数据以及原始数据和数据块的一些简单转换。它最初设计用于从块设备(包括磁盘和磁带)读取数据或向块设备写入数据,并且可以处理在块数据和流数据之间来回更改数据结构,并执行一些简单的字符转换和填充调整。
在可写挂载文件系统的设备上运行 dd if= 是危险的,因为该文件系统在 dd 读取时可能会发生更改。 dd 已读取的块可能会发生更改(并且 dd 不会看到更改),同时它尚未读取的块也会发生更改,结果将是输出时文件系统的损坏映像。
由于 dd 正在从(大概)固定大小的块设备读取数据,并且在不了解底层文件系统的情况下读取它,因此如果将输出写入同一文件系统中的文件,它不会是无限循环,但是它增加了输出映像成为损坏文件系统的可能性和严重性。
由于挂载在目录上的文件系统不是父文件系统的一部分(但(空)目录是),因此它们不会出现在 dd 输出映像中(但目录本身会出现在其中,包括可能位于挂载点下的文件,如果安装前不为空)。
答案2
dd 将从 if (输入文件)中读取并将其转储到 of (输出文件),它将是“if”的二进制副本。这些文件可以是文件系统文件、文件系统本身、原始设备等。此命令不会从驻留在“if”中的数据结构中生成任何内容,如果它是文件系统,它将复制它,无论操作系统是否识别它。但是,不建议使用已安装的文件系统设备(例如 if=/dev/sdb3)来运行它。
由于它是一点一点复制,因此 dd 命令将无法识别它何时到达远程共享的安装点,因此,没有无限循环,但我同意@user10489,这很危险。
如果您尝试备份根文件系统,我建议您在另一个系统中执行此操作(提取您的卡)或从另一张卡启动并将备份备份到远程位置或位于新根文件系统中的 img 文件。