dd if=/dev/zero of=/dev/sda bs=1M如果 dd 命令最初在 /dev/sda 上,这个命令会成功吗?这会因为 dd 当时在内存中而完成吗?
上周,我的 MacBook硬盘崩溃并严重损坏。我用新的驱动器更换了驱动器,并在其上安装了 10.6/Snow Leopard。旧驱动器现在在 USB 外壳中,我真的需要从中恢复数据。
问题是,它不会挂载,当它与 USB 连接时,OSX 甚至没有检测到连接了新驱动器。
我能做什么?
我注意到在退役前安全擦除硬盘驱动器dd if=/dev/urandom of=/dev/sda需要将近一整天的时间,而shred -vf -n 1 /dev/sda使用同一台计算机和同一驱动器只需要几个小时。
这怎么可能?我猜瓶颈是/dev/urandom. shred 是否使用了一些伪随机生成器,该生成器的随机性较小且仅足以满足其单一目的(即更有效)urandom?
几天前,我使用以下命令创建了我的一个磁盘(而不是整个磁盘)的分区(包含 HFS+ FS)的 dd 映像 -
dd conv=sync,noerror bs=8k if=/dev/sdc2 of=/path/to/img
我怎样才能安装它?我尝试了以下但它不起作用 -
mount -o loop,ro -t hfsplus /path/to/img /path/to/mntDir
它给了我
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
Run Code Online (Sandbox Code Playgroud)
并dmesg | tail给我——
[5248455.568479] hfs: invalid secondary volume header
[5248455.568494] hfs: unable to find HFS+ superblock
[5248462.674836] hfs: invalid secondary volume header
[5248462.674843] …Run Code Online (Sandbox Code Playgroud) 我有一个 16GB 的 SD 卡,上面有几个分区(它实际上是用于 Raspberry Pi 的卡)。我还有其他几张 4GB 卡,我想将主卡克隆到其中。主卡上的 3 个分区是:
如果我用来dd通过以下方式创建卡片的图像:
dd if=/dev/sdb of=~/sd-card.bin
Run Code Online (Sandbox Code Playgroud)
那么生成的 .bin 大小为 16GB。有没有一种方法可以dd用来复制实际使用的内容,即 < 4GB,以便我可以将dd其复制到新的 4GB 卡上?或者我应该使用更好的解决方案吗?
我正在使用 dd 将 iso 图像复制到拇指驱动器。有没有办法在复制过程中输出dd的状态?
我需要从 Ubuntu Linux 擦除许多硬盘驱动器的所有数据。我找到了三个命令行工具:shred,wipe和dd. 人们推荐的东西似乎有点随机。有时有人会推荐一个而不是另一个,但他们并没有具体说明原因。
比较这些工具时有哪些优点/缺点?
将图像文件写入磁盘或 U 盘时,指令通常使用dd,如下所示:
dd if=myimage.img of=/dev/sdb
Run Code Online (Sandbox Code Playgroud)
这与说:
cat myimage.img > /dev/sdb
Run Code Online (Sandbox Code Playgroud)
我意识到dd有更多选项,例如count=...,但是如果练习的目的是将整个文件写入设备,那么使用 的优势是dd什么?
我的目标很简单,标题说明了一切,但我尝试过的每一种方式都失败了。我已经阅读了各种网站上的说明(除了这里),他们似乎都遗漏了一些东西......这就是我所拥有的:
虽然我可以使用 rufus 轻松创建可启动的 Windows 10 USB,但我的目标更具教育意义:我想了解正在发生的事情,以及失败的根源是什么,如果可能的话,让它工作。
当我尝试在终端中创建 Win10 映像时,我尝试了以下命令:
sudo dd if=Windows10.iso of=/dev/sdc1 bs=512k
Run Code Online (Sandbox Code Playgroud)
我得到一个分区,它似乎安装在 Debian 上,但在 Windows 和 mac 上无法识别。Gparted 显示这一点: gparted 报告文件系统未知 ,另一个正常工作的 USB 闪存驱动器(我有 4 个)读取如下: 在此处输入图像描述
我在某些地方读到你不应该输出到分区(sdc1)而是输出到驱动器(sdc),所以我试过这个:
sudo pv Windows10.iso | sudo dd of=/dev/sdc bs=5M
Run Code Online (Sandbox Code Playgroud)
(对于那些熟悉的人来说,这是相同的命令,通过 dd 管道传输,并使用 sdc 代替)。这似乎会破坏整个分区,正如您从 fdisk 中看到的:我的终端输出显示了命令和 fdisk。
这令人沮丧,但我决定重新开始。我重新启动,并运行以下命令
sudo umount /dev/sdc1
sudo wipefs -a /dev/sdc
sudo fdisk -l
sudo fdisk /dev/sdc
n, p, 1, [enter], …Run Code Online (Sandbox Code Playgroud) 我正在创建丢失数据的硬盘驱动器的副本,以便我可以尝试从磁盘副本恢复数据并保证原始数据的安全。我在 Mac 上使用 dd,它非常适合其他驱动器和存储介质,可以创建整个驱动器的精确副本。
我让 dd 运行了 45 个小时,期间只复制了 410GB。我注意到磁盘指示灯 LED 停止定期闪烁 5 秒,并且在活动监视器中显示仅写入了 360GB,但读取了 410GB。我使用 pv 来查看管道,这样我就可以知道它的进度,并且还报告了 410GB,所以我认为活动监视器在测量写入数据量方面是不准确的。此外,在显示读取和写入操作的图表中的活动监视器中,它仅显示读取操作的变化,但写入图表只是平坦的,没有显示任何发生的事情。我认为负责写入输出文件的第二个 dd 进程可能已被锁定。
第一次尝试花了这么长时间,只写了几秒钟,然后立即暂停了更长的时间,并且随着操作接近结束,情况变得越来越糟。当计算机重新启动时,我发现输出文件实际上是 410GB,就像活动监视器中建议的读取操作一样,因此写入操作的估计非常错误。我注意到活动监视器总是给出不正确的写入字节数,因此我不再相信活动监视器所说的内容,为什么它如此不一致?
我不想磨损需要恢复数据的旧硬盘。它随时可能会崩溃,特别是如果我必须连续几天运行它并进行大量的读取操作。
为什么 dd 会不断暂停并且随着时间的推移它会变得越来越糟?它开始时非常快,但随着大量数据的出现,它开始变得越来越慢,并且花费更多的时间看似什么也不做或等待某些事情。它在做什么?有没有更好的方法将磁盘复制到文件并使其成为驱动器上每个字节的精确副本?
以下是 IO 活动图的一些图像:
启动后立即:
4小时后:
11小时后:
26小时后:
我使用提供的不同方法进行了一些复制旧 USB 记忆棒的测试。所有文件都有相同的校验和,所有这些方法都在单个线程上运行。结果不是我所期望的:
dd ×10
linux ×7
disk-image ×2
hard-drive ×2
macos ×2
shred ×2
debian ×1
gparted ×1
mount ×1
raspberry-pi ×1
sd-card ×1
shell ×1
wipe ×1