A 在闪存驱动器上有一个根文件系统(文件系统 - 图像包含文件夹结构和内容)。闪存驱动器使用 UBI 作为底层文件系统文件系统 - 数据块映射到文件的方式,就像你说你使用的是 ext4)。
rootfs on / type rootfs (rw)
ubi0:root on / type ubifs (rw,sync)
Run Code Online (Sandbox Code Playgroud)
当有一个物理驱动器作为第一个参数时,我知道如何使用 dd 进行备份(例如。而不是rootfs有一个/dev/sda),但是在这里我不知道如何在当前场景中寻址驱动器(什么是的路径rootfs)。
我如何检测到哪个文件footfs或ubi0:root对应于哪个文件?
我有一个sdb1大小为 3.3 GB的分区。从 3.3 GB 开始,仅使用 1.9 GB,1.2 GB 是空白空间。我想创建这个分区的映像。但我希望图像只有已用空间,即 1.9 GB
现在,当我使用 dd 运行命令时:
dd if=/dev/sdb1 of=/home/data/Os.img bs=1M status=progress
Run Code Online (Sandbox Code Playgroud)
我看到 dd 正在制作 3.3 GB 的图像的行为虽然我不希望未分配的空间成为操作系统图像的一部分。
所以我尝试了不同的解决方案。我找到了一个解决方案:
dd if=/dev/sdb1 of=/home/data/OS.img bs=1M count=1946 status=progress
Run Code Online (Sandbox Code Playgroud)
这个解决方案创建了一个 1.9 GB 的图像,因为我定义了一个 1M 的块大小,计数为 1946,总共将提供 1.9 GB。
问题 我无法确定此 dd 命令是否仅制作了已用空间的映像,还是仅创建了大小为 1.9 GB 的映像,其中既有已用空间,也有未使用空间?
有没有其他方法可以只为已用空间创建图像?
在 Linux Mint 中,与 Ubuntu 不同,我看到两个单独的启动器来处理 U 盘,一个仅用于格式化,另一个用于将图像文件写入 U 盘。
在任务管理器中,我实际上看到它们都mintstick.py使用补充参数运行以处理 iso。
这与usb-creator-gtkUbuntu 的(启动盘创建器)有关吗?
可以在其他Linux系统中使用吗?
使用 Linux 时,可以轻松创建一定大小的常规文件,然后在其中创建文件系统。使用 FreeBSD 时如何做同样的事情?
我试过这个:
root@:/tmp/test # newfs -U ~/disk
newfs: /root/disk: not a character-special device: No error: 0
newfs: no valid label found
Run Code Online (Sandbox Code Playgroud)
我没有找到任何相关信息(例如:“使用开关 -i 允许在常规文件上创建文件系统,而不仅仅是在字符设备上。”在newfs.
我有一个 32GB 的 SD 卡,其中包含一些 pi 小工具的 Armbian 安装。我想将内容克隆到 16GB 卡中。使用 GParted,我将分区缩小到小于 16GB,这里是 SD 卡的状态,如 中所示fdisk。有2个分区,一个是Armbian,一个是FAT32小分区,用来和windows共享文件。
Disk /dev/sdk: 29,74 GiB, 31914983424 bytes, 62333952 sectors
Disk model: USB3.0 CRW-SD/MS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x22563e30
Device Boot Start End Sectors Size Id Type
/dev/sdk1 8192 25690111 25681920 12,3G 83 Linux
/dev/sdk2 25690112 26509311 819200 …Run Code Online (Sandbox Code Playgroud) 我希望使用我从运行 Ubuntu 的真机创建的磁盘映像来启动 QEMU。创建映像并尝试运行 QEMU 后,VM 挂在“从硬盘启动”状态。
我有一台 x86_64 桌面计算机,上面安装了标准 Ubuntu 20.04.3。默认情况下,这还会在 1TiB HDD 上安装 GRUB 作为引导加载程序。该磁盘有一个 GPT、一个 EFI 分区以及一个 ext4 分区 (~50GiB)。该系统可以启动、运行并且功能齐全。通过实时 USB 运行,我创建了整个启动磁盘的原始映像。让我们调用图像ae.img。
从远程计算机上,我通过运行创建了图像
ssh root@<IP> "dd if=/dev/sda bs=100M status=progress | xz -T 8 -1" | unxz | cp --sparse=always /proc/self/fd/0 ae.img
Run Code Online (Sandbox Code Playgroud)
忽略通过网络压缩数据的xz/ unxz,实际上整个磁盘都由 读取dd,通过网络发送,并由 写入稀疏ae.img文件cp。对于正在运行的实时 USB,/dev/sda是 HDD。我已使用 来检查映像的分区表fdisk,并通过将其安装为环回设备来检查实际 ext4 分区中的数据。
我想使用 QEMU 在另一个(几乎相同的)系统上运行具有此磁盘映像的虚拟机。我认为,如果我将此映像指定为 QEMU 上的驱动器,它可能会尝试从该映像启动,然后启动 GRUB 引导加载程序,依此类推。为了保持相同,我尝试用视频输出启动它。我使用的命令是:
-m 4G …Run Code Online (Sandbox Code Playgroud) 我在一台系统驱动器有限的机器上使用 Ubuntu 20.04。
我遇到了一个构建脚本,用于检查 中的可用大小/tmp,如果它没有看到 12 GB 可用空间(我的系统驱动器上没有该空间),它就会拒绝运行。
不过,我的这台机器上确实有另一个 NTFS 驱动器;由于它是NTFS,我不能真正直接使用它,但我可以创建一个磁盘映像。
因此,我想到在 NTFS 分区上创建一个 16 GB 的 ext3 映像,然后将其挂载为 /tmp。
所以,我尝试过:
dd if=/dev/zero of=tmp16.img bs=16M count=0 seek=1024
mkfs.ext3 ./tmp16.img
fdisk -l ./tmp16.img
e2label ./tmp16.img tmp16
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好——所有这些都有效;但后来我尝试安装:
$ sudo mount -o remount /path/to/ntfs/tmp16.img /tmp
mount: /tmp: mount point not mounted or bad option.
Run Code Online (Sandbox Code Playgroud)
Ups,一定是我在某个地方的旧记忆,那/tmp是一个单独的安装 - 事实证明,在这台机器上,/tmp不是一个单独的安装:
$ mount | grep tmp
udev on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=3970256k,nr_inodes=992564,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=802768k,mode=755)
tmpfs on …Run Code Online (Sandbox Code Playgroud) dd运行几个小时后我崩溃了。通常带有类似的消息
Input/output error
68424+1 records in
68424+1 records out
342124883968 bytes (342 GB) copied, 5114.68 s, 66.9 MB/s
Run Code Online (Sandbox Code Playgroud)
有什么我可以做的吗?有什么方法可以使用输出吗?还是从停止的地方重新开始?
是否有任何理由认为这是因为正在备份的分区正在被使用?
它总是在 70-80% 左右崩溃,通常是在分区应该较少使用的时候。
由于这个过程需要很长时间,所以很难尝试不同的东西。
我输出到图像。我可能可以使用分区,但涉及 LVM:
sudo lvmdiskscan
/dev/centos/swap [ 3.89 GiB]
/dev/sda1 [ 500.00 MiB]
/dev/centos/root [ 50.00 GiB]
/dev/sda2 [ 465.27 GiB] LVM physical volume
/dev/centos/home [ 411.38 GiB]
/dev/sdb1 [ 931.51 GiB]
3 disks
2 partitions
0 LVM physical volume whole disks
1 LVM physical volume
dd conv=sync,noerror if=/dev/centos/home bs=2000000 of=/run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image
dd: error reading '/dev/centos/home': Input/output …Run Code Online (Sandbox Code Playgroud) 我有一个磁盘映像文件,我正在尝试使用循环设备在本地安装。使用 parted 我可以看到图像有两个分区,但是,我无法挂载第一个分区并losetup认为第二个分区不存在。有谁知道我如何挂载第二个分区?
/m/sf_VMShare ??? sudo losetup /dev/loop0 ./imm_image-2017-05-28.img
/m/sf_VMShare ??? sudo losetup -a
/dev/loop0: [0023]:99 (/media/sf_VMShare/imm_image-2017-05-28.img)
/m/sf_VMShare ??? sudo parted /dev/loop0 print
Model: Loopback device (loop)
Disk /dev/loop0: 1206MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 10.5MB 360MB 349MB primary ext4
2 361MB 1205MB 844MB primary ext4
/m/sf_VMShare ??? sudo mount -t ext4 /dev/loop0p2 /tmp/vdisk
mount: special device /dev/loop0p2 does not exist
/m/sf_VMShare ??? sudo mount -t ext4 …Run Code Online (Sandbox Code Playgroud) 有没有办法在我的文件系统中的任何挂载点上挂载和访问单个分区,或者我必须使用磁盘映像并使用偏移量挂载?
我制作了一个分区图像,dd bs=4M if=/dev/sdb1 of=~/part.img并尝试将其安装在 /mnt 上mount -t vfat ~/part.img /mnt。
mount 的输出是一个未知错误 -1
disk-image ×10
dd ×4
linux ×3
mount ×3
filesystems ×2
boot ×1
cloning ×1
fdisk ×1
freebsd ×1
hard-disk ×1
iso ×1
linux-mint ×1
live-usb ×1
loop-device ×1
partition ×1
qemu ×1
tmp ×1
ubifs ×1
usb ×1