我有一个 USB,我正在用一个带有自己的 grub 的小型操作系统处理 5 Mb 的 ISO。如果我连接设备并检查它sudo fdisk -l我得到:
...
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 1 9551 9551 4.7M cd unknown
Run Code Online (Sandbox Code Playgroud)
如果我用 dd 复制 ISO sudo dd if=my_os.iso of=/dev/sdb
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.538487 s, 14.1 MB/s
Run Code Online (Sandbox Code Playgroud)
它完美地工作。从其他 PC 中的 BIOS 启动。
问题是,有时我在更新 BIOS 后忘记连接 USB,所以我在没有连接 USB 的情况下执行 ff,输出为:
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.00987684 s, 770 MB/s
Run Code Online (Sandbox Code Playgroud)
现在,/dev/sdb …
我不小心使用dd. 交换分区和用于写入的预期介质的大小均为 16GB,我感到很困惑。
我的 PC 现在似乎无法使用交换分区。我怎样才能恢复这个?我仍然有分区,它应该有大小。这是/dev/sda4我想要保留的地方/dev/sda1,/dev/sda2并且/dev/sda3完好无损。
我注意到最新版本的 Rufus 附带了一个可能有用的额外选项:Create a disk image of the selected device。然而,在最终的对话中我得到了这个:
Rufus 似乎将.vhd文件称为 DD 映像,尽管我自己的研究表明存在差异,并且在没有事先转换的情况下不可能将映像dd写入.vhd磁盘。
鲁弗斯这样做有什么特殊原因吗?
是否可以.vhd使用它输出的文件将dd生成的图像写入设备而无需事先进行任何转换?
我已.img使用dd以下命令将 USB 驱动器复制到文件中:
dd if=/dev/sdc of=myimage.img
Run Code Online (Sandbox Code Playgroud)
我想减小图像中分区的大小。我尝试了几种方法,但最终总是得到一个环回安装的映像,其分区仍然是 USB 的完整大小。
myimage.img安装回环后如何修改为具有较小的分区?
在这样做之前,我是否需要将零复制到分区的空白部分?
我是否需要进行碎片整理,以便在减小图像大小时删除空字节?(从我读到的内容来看,Linux 扩展到整个分区,所以我不期望图像末尾的所有数据都是零字节。即使写入全零也只会消耗它们所在的空字节。)
注意:我不是想节省磁盘空间,所以压缩对我没有帮助。
背景
我在 USB 驱动器上安装了 Linux,使用ext4. 我打算为多个设备复制安装。我已经成功做到了,但想在同一个 USB 驱动器上创建一个包含系统的只读分区和一个允许持久存储的小分区。我没有破坏我的 USB,而是尝试修改 USB 的副本。我希望我们不要被这个背景分心。
简而言之,我做了以下工作:
# Create mount point in current directory
sudo mkdir mnt
# Loopback mount the image
fdisk -l myimage.img
sudo mount -o offset=<partion_block_start * block_size> myimage.img mnt
# Copy all zeros to remaining space of the image
cd mnt
sudo dd if=/dev/zero of=filler conv=fsync bs=1M
rm filler
cd …Run Code Online (Sandbox Code Playgroud) 当您从设备中删除文件时,假设是一个 U 盘,然后(不做任何进一步的事情)只删除文件系统中的条目,该文件的原始字节仍在设备上(这就是文件恢复工具工作的原因通过一一扫描驱动器上的物理扇区)。
现在,如果我这样做
dd if=/path/to/usbdrive of=/backup/usbdrive.img
Run Code Online (Sandbox Code Playgroud)
USB 驱动器的内容将被复制到指定的文件。
当到达被删除文件所在的位置时,是dd复制零还是复制物理上仍然存在的文件内容?
它用于 bash/shell 脚本。基本上,我想格式化或擦除 USB(或 SD)存储设备;使用单个命令行。
我本来打算使用fdisk,但它似乎需要用户交互来实现我想要的自动化。
所以我决定尝试用以下方法将其归零
dd if=/dev/zero of=/dev/<target disk>:
但它似乎只将 2.0 GB 的空闲或未使用的磁盘空间清零。
root@linux:~# dd if=/dev/zero of=/dev/mmcblk0
dd: writing to '/dev/mmcblk0': No space left on device
3842249+0 records in
3842249+0 records out
1967230976 bytes (2.0 GB, 1.8 GiB) copied, 2.9054 s, 677 MB/sRun Code Online (Sandbox Code Playgroud)
.iso理想情况下,我谈论的是重新格式化任何可移动存储设备,和/或准备使用图像文件对其进行成像(通过dd)。
并不总是需要重新格式化,但它也会删除数据;无论如何,清除设备中任何存储的数据可能应该是默认行为/标准程序。
dd ×6
linux ×4
partitioning ×2
backup ×1
dev ×1
disk-image ×1
fdisk ×1
filesystems ×1
formatting ×1
gparted ×1
parted ×1
rufus ×1
sd-card ×1
storage ×1
swap ×1
usb ×1
vhd ×1
windows-7 ×1