我有一个带有三个分区的可启动 16GB USB,我想将前 2 个分区复制到 ISO 文件。发现这个问题,但对我没有帮助。
+-------+-------------------+-------------------+
| | | |
| EFI | 7.8GB HFS+ | 7.8GB Empty Space |
| | | |
+-------+-------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)
我怎样才能用 dd 做到这一点?
我尝试过:
dd if=/dev/sdc of=Image.iso
Run Code Online (Sandbox Code Playgroud)
但它制作了16GB的镜像,整个设备的镜像。我只想要 sdc1 和 sdc2 的映像 PS:如果我将此映像刻录到 DVD,它会启动吗?
当我在 *NIX 中寻找管道缓冲工具时,我看到了使用buffer、mbuffer或的建议pv。然而,前两者并不总是在发行版的官方存储库中(例如 Arch),而pv(从 1.6.0 开始)有一个错误阻止了此功能。在其他几个问题中,我看到提到dd用作缓冲区,我想探索它,因为dd它总是存在。然而,没有一个足够详细以具有真正的意义,所以在这里我要求一种“正确”的使用方式。
提到的问题dd包括https://unix.stackexchange.com/questions/345072/can-dd-be-used-to-add-a-buffer-to-a-pipe和https://unix.stackexchange.com/questions /21918/管道中无限制数据量缓冲区的实用程序
为了便于测试,我在下面提供了一个测试脚本,以及一些关于我自己的实验的评论。详细信息将在代码清单后解释。运行前请确保您已pv安装且内存至少256M!
#!/bin/sh
producer() {
while [ 1 ]; do
dd if=/dev/zero bs=64M count=1 iflag=fullblock status=none
sleep 4
done
}
buffer() {
# Works, but long
# Must at least fill 32M before consumer starts
# So, must choose small obs and chain more to look
# more like a proper "buffer"
dd …Run Code Online (Sandbox Code Playgroud) 我正在学习bash,由于有许多不同的方式对驱动器进行零写入或从驱动器传输数据或将数据传输到驱动器(shred等等dd)pv,cat我tee已经不知所措了。
目前,我不情愿地选择了它,dd因为它似乎是两种用途的最佳命令行选项。鉴于此,我想确保我尽可能有效地使用它。
据我了解,默认情况下dd运行的块大小为 512 字节,并且可以通过以下方式增加块大小:
dd if=/dev/zero of=/dev/sdX bs=3M status=progress
Run Code Online (Sandbox Code Playgroud)
...将使它写入更大的块并且执行更少的次数,从而导致更快的运行。
但是,如果简单地设置更大的块大小将使命令运行得更快,那么什么阻止我使用呢bs=3G?这样做有什么缺点(如果有的话)?Linux 超级用户建议使用的最佳块大小是多少?
此命令将0xff在 Linux 中填充文件。
dd if=/dev/zero ibs=1k count=100 | tr "\000" "\377" >paddedFile.bin
Run Code Online (Sandbox Code Playgroud)
当我在 OSX 中运行它时,结果是不同的。
$ dd if=/dev/zero ibs=1k count=100 | tr "\000" "\377" >paddedFile.bin
100+0 records in
200+0 records out
102400 bytes transferred in 0.000781 secs (131104008 bytes/sec)
$ hexdump -C paddedFile.bin
00000000 c3 bf c3 bf c3 bf c3 bf c3 bf c3 bf c3 bf c3 bf
|................|
*
00032000
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我dd bs=4M if=image.iso of=/dev/sda oflag=sync在创建可启动驱动器而不是针对 USB 记忆棒时意外运行。
我相当肯定大多数文件都可以——iso只有~330mb,而驱动器是500gb。
问题是,那/dev/sda是在安装 manjaro 期间加密的,所以诸如此类的工具photorec无法访问这些文件。我也不确定被加密的驱动器将如何干扰被dd.
lsblk的输出显示了新的分区表:
sda 8:0 0 465.8G 0 disk
??sda1 8:1 0 336M 0 part
??sda2 8:2 0 2.4M 0 part
Run Code Online (Sandbox Code Playgroud)
fdisk -l 显示同样的事情:
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 0 688127 688128 336M 0 Empty
/dev/sda2 3820 8747 4928 2.4M ef EFI (FAT-12/16/32)
Run Code Online (Sandbox Code Playgroud)
/dev/mapper/只有control在其中,没有 luks 分区的迹象:
lubuntu@lubuntu:/dev/mapper$ ls
control
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不确定旧的分区表是什么。我知道我在驱动器的末尾有 12gb 的交换空间,我只使用了一个分区/并且没有手动分离任何其他东西, …
所以,假设你已经完成了:
dd if=/dev/zero of=/dev/sdX bs=1M
Run Code Online (Sandbox Code Playgroud)
然后,您要确保目的地已真正归零(忽略来自设备的确认消息,dd而不仅仅是轮询设备的开始或结束)。假设你必须通读整个磁盘——我会使用这个:
dd if=/dev/sdX bs=1M | grep -P '[^\x00]'
Run Code Online (Sandbox Code Playgroud)
但是,由于这适用于管道stdout,最终会出现错误,说明操作内存不足。所以,没啥用。
当然,创建整个磁盘的完整映像并保存它不是一种选择。但是,也许,这样做同时能够以某种方式即时跳过0x00 – 这将是解决方案之一。
想法?
我有一个我的 home ( /dev/sda3) 分区的映像,这是我使用“dd”命令创建的。
dd if=/dev/sda3 of=/path/to/disk.img
Run Code Online (Sandbox Code Playgroud)
我已经通过 gparted 删除了主分区以扩大我的/dev/root分区。然后我重新创建了比/dev/sda3我备份到图像的分区更小的分区。
我想知道因为我有一个 2TB 的外置硬盘,是否可以将我备份的图像安装在外置硬盘上,然后将文件复制到/home目录中。由于外部硬盘驱动器已经处于“安装状态”,我不确定这是否是一个好主意,安装在已安装的设备上。
我试过了:
mount -t ext4 /path/to/disk.img /mng/image -o loop
Run Code Online (Sandbox Code Playgroud)
它给了我一个 fs 错误(错误的 fs 类型、错误的选项、dev/loop/0 上的超级块错误)
然后我做了
dmesg | tail
Run Code Online (Sandbox Code Playgroud)
输出:
EXT4-fs (loop0) :坏几何:块数 29009610 超过缺陷大小(1679229 个块)
我不知道该怎么办,我想/home从备份的图像中恢复我的数据。
[更新] : * disk.image 在我的 USB 16GB 闪存驱动器上。图像大小约为 6GB。该图像是从一个大约 100GB 的已删除分区创建的,现在它减少到大约 80GB。
[更新]:我今天试过了: LQWiki:一些 dd 示例 说:
您不想通过将分区表从较大的驱动器写入较小的驱动器来告诉驱动器它比实际更大。驱动器的前 63 …
我从 Ubuntu live cd 终端执行了以下命令(不要问为什么)。
dd if=/dev/zero of=/dev/sdb2 bs=512 count=1
Run Code Online (Sandbox Code Playgroud)
其中 sdb2 是磁盘上的 NTFS 分区(第三个分区)。可以说它现在一团糟。当我启动到 Windows 7 时,它确实向我显示了 E 驱动器,但是当我单击它时,它要求我对其进行格式化。
我不知道我做了什么,我搞砸了分区表还是只搞砸了 MFT?有什么办法可以找回数据>
例如,如果我在硬件级别使用 1 gb 和 1 mb 的极端字节大小,有什么区别?如果恒定的数据流刚刚写入磁盘,字节大小有什么作用?
我很快就会以擦除硬盘为由购买几台新计算机。我不需要将驱动器随机化,只需将dd.
如何从可加载到 RAM 中的闪存驱动器启动 Linux,以便我可以启动它、移除驱动器并启动下一台机器以同时运行多个机器?
dd ×10
linux ×6
partitioning ×4
bash ×2
command-line ×1
grep ×1
hard-drive ×1
iso-image ×1
luks ×1
macos ×1
memory ×1
pipe ×1
slackware ×1
wipe ×1