我正在寻找使用 dd 来克隆故障硬盘。我担心的是肯定会有坏块。所以我的问题是dd坏块会留下所选块大小(bs)大小的间隙还是只会与硬盘驱动器上的扇区一样大?
我dd在尝试复制 freenas ISO 时搞砸了并设置了错误的输出,覆盖了错误的外部硬盘驱动器。
dd/proc/partition 仍然保存正确的信息(并已存储)dd的输出(记录输入/输出/字节)testdrive 在快速或深度搜索中没有找到任何分区我目前的计划是让 photorec 做它的事情,然后用 gparted 重新创建 mbr 并使用 cfdisk 使用来自 /sys/block/.../ 的扇区信息创建另一个 NTFS 分区。这是一个好的行动方案(即成功的机会)吗?或者我应该先尝试其他什么?
可能的相关资料:
dd if=FreeNAS-8.0.4-RELEASE-p3-x86.iso of=/dev/sdc:
194568+0 records in
194568+0 records out
99618816 bytes (100 MB) copied
grep . /sys/block/sdc/sdc*/{start,size}:
/sys/block/sdc/sdc1/start:2048
/sys/block/sdc/sdc1/size:3907022848
cat /proc/partitions:
major minor #blocks name
** …Run Code Online (Sandbox Code Playgroud) 我已经看到以下技巧可以稍微快速地创建大的空文件:
dd if=/dev/zero of=test.dat bs=1024 count=1024
Run Code Online (Sandbox Code Playgroud)
但是,这在创建多 GB 文件时仍然需要一些时间。我认为这次是由磁盘将所有\0s 从写入/dev/zero到test.dat。
有没有办法“立即”创建任意大小的文件,而无需实际将其内容初始化为任何内容?
我目前正在研究使用 mhddfs 聚合可用磁盘空间的 DIY 网络存储。
现在我想要的是,例如给定一个热插拔托架,当我插入一个全新的未分区磁盘时,我希望使用 bash 脚本自动对磁盘进行分区并挂载新的 mhddfs 分区。
如果服务器关闭,插入新磁盘并再次打开服务器,则会出现相同的情况。
所以问题是:如何使用 bash 脚本检测未分区的磁盘?
问题还包括不应有错误检测。例如,如果插入了一个加密磁盘,它不应该被自动重新分区和格式化——这一点是问题的主要兴趣点。
例如,我可以这样做:
cat /dev/sda1 > /dev/sda2
Run Code Online (Sandbox Code Playgroud)
而不是使用 dd,如果没有,为什么这不起作用?
我一直在网上看到dd结合使用pv来显示进度的示例...但是,我不明白的是,它pv完全有能力完全独立完成任务。那么,为什么dd还要使用呢?是否有一些优势是没有dd提供的?pv
同时使用dd和 的示例pv。其中有些确实很复杂...
dd if=/dev/sda | pv | dd of=/mnt/backup.img
dd if=/dev/sda | pv -s 10G | dd of=/mnt/backup.img
dd if=/dev/sda | (pv -s `fdisk -l /dev/sda | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | dd of=/mnt/backup.img
Run Code Online (Sandbox Code Playgroud)
pv你可以通过单独使用来实现同样的事情
pv /dev/sda > /mnt/backup.img
Run Code Online (Sandbox Code Playgroud) 我正在尝试dd为可与硬盘驱动器和闪存介质一起使用的操作系统创建分发映像(通过 Linux 的命令)。我已成功创建映像,但无法正常启动。我将布局以下步骤:
这将创建一个包含整个图像的空白文件:
dd if=/dev/zero of=/tmp/test.img bs=512 count=1250000
Run Code Online (Sandbox Code Playgroud)将环回设备文件与映像文件关联:
losetup /dev/loop0 /tmp/test.img
Run Code Online (Sandbox Code Playgroud)在我们可以操作之前,parted我们必须定义一个媒体标签类型:
parted -s /dev/loop0 mklabel msdos
Run Code Online (Sandbox Code Playgroud)使图像文件中的第一个分区为 512MB:
parted -s -a opt /dev/loop0 mkpart primary ext2 '0%' 512MB
Run Code Online (Sandbox Code Playgroud)将第一个分区设置为“可引导”:
parted -s /dev/loop0 set 1 boot on
Run Code Online (Sandbox Code Playgroud)在第一个分区上创建一个 Ext2 文件系统:
mkfs.ext2 -b 1024 /dev/loop0p1
Run Code Online (Sandbox Code Playgroud)安装 grub 引导代码的 stage1,同时保留上面创建的分区表:
dd if=/boot/grub/stage1 of=/dev/loop0 bs=446 count=1
Run Code Online (Sandbox Code Playgroud)在媒体的前 512 字节之后安装 grub 引导代码的 stage2(跳过 stage1 和分区表):
dd if=/boot/grub/stage2 of=/dev/loop0 bs=512 seek=1
Run Code Online (Sandbox Code Playgroud)将镜像文件的第一个分区挂载到一个挂载点:
mount /dev/loop0p1 /mnt/image
Run Code Online (Sandbox Code Playgroud)将所有数据复制到分区中并卸载。
dd 映像文件到任何硬盘驱动器或闪存介质。
使用这些步骤,我可以 …
好吧,令人讨厌的愚蠢事情发生了。我想将 Arch Linux ISO 文件复制到我的 U 盘,但很匆忙,不小心将我的主驱动器作为of参数输入。
以下是详细信息:
$ sudo dd bs=4MB if=archlinux-2017.08.01-x86_64.iso of=/dev/nvme1n1
Run Code Online (Sandbox Code Playgroud)
/dev/nvme1n1应该是/dev/sdb。
我的主驱动器/dev/nvme1n1包含两个分区:
的文件大小archlinux-2017.08.01-x86_64.iso为 541065216 字节,或516 MB
计算机仍在运行并且似乎工作正常,并且我有运行命令之前lsblk和df -h 之前的输出dd。输出与我现在运行命令时的输出完全相同。我假设因为数据被缓存:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:5 0 931.5G 0 disk
??nvme1n1p1 259:6 0 512M 0 part /boot
??nvme1n1p2 259:7 …Run Code Online (Sandbox Code Playgroud) 我希望使用 dd 定期备份我的整个硬盘驱动器,但它需要大约 1.5 小时,想知道是否有更快的备份方法。
可能只是通过更新不同的字节。
我在这个网站上阅读了其他问题/答案,说这是可能的,但我想知道它是如何完成的。我尝试了以下命令,该命令成功完成,但之后 NTFS 在驱动器上无效。
$ dd if=\backup\image.vhd of=\dev\sda
Run Code Online (Sandbox Code Playgroud)
是否.vhd必须先以某种方式挂载文件?这会恢复MBR吗?
谢谢你。
dd ×10
linux ×6
disk-image ×3
partitioning ×3
backup ×2
bash ×2
unix ×2
bootloader ×1
cat ×1
clone ×1
command-line ×1
hard-drive ×1
nas ×1
ntfs ×1
restore ×1
storage ×1
vhd ×1