我经常使用映像驱动器,这意味着对有问题的驱动器进行 dd 复制,然后处理映像而不是驱动器本身。
对于大多数工作,我使用 kpartx 将驱动器的分区映射到 /dev/mapper/ 下的设备。我在这里想知道是否有办法找到哪个映射属于哪个图像。
考虑一下:
root@vyvyan:/tmp# kpartx -a -v Image1
add map loop1p1 (254:4): 0 10240 linear /dev/loop1 2048
add map loop1p2 (254:5): 0 10240 linear /dev/loop1 12288
add map loop1p3 (254:6): 0 52848 linear /dev/loop1 22528
root@vyvyan:/tmp# kpartx -a -v Image2
add map loop2p1 (254:7): 0 33508 linear /dev/loop2 2048
add map loop2p2 (254:8): 0 39820 linear /dev/loop2 35556
Run Code Online (Sandbox Code Playgroud)
现在,假设我忘记了哪个图像去了哪个映射。有没有办法让 kpartx - 或内核,或其他任何东西 - 告诉我哪个图像去哪里?
编辑另外,如果我在 kpartx 添加映射时不小心 rm 图像文件,你如何删除映射?kpartx 希望显示实际图像。
出于备份的目的,我想通过 ssh 链接传输(几个)整个磁盘分区。源是块特殊设备,目标应该是常规文件。但是,常用工具似乎不适合于此:
scp 会抱怨 not a regular filetar 将尝试在目标端重新创建设备 inodersync 说 skipping non-regular file我目前最好的选择是nc通过端口转发,或cat在每个分区的远程端调用一次,这意味着每个分区输入一个密码,除非设置公钥。有没有更优雅的解决方案?
环境可以是任何合理的Linux live系统。目前我碰巧有一个 Debian wheezy,但它不应该太具体。
使用以下 HDD 的 GPT 的等效项是什么:
# fdisk -l /dev/hda > /mnt/sda1/hda_fdisk.info
我从https://wiki.archlinux.org/index.php/disk_cloning(在“创建磁盘映像”下)获取此信息以获取额外的硬盘信息,这对于从多分区映像恢复或提取可能很重要。
当我这样做时,我收到类似于以下内容的错误:
“警告:在‘/dev/sda’上检测到 GPT(GUID 分区表)!util fdisk 不支持 GPT。使用 GNU Parted。”
我是dpkg --configure -a在我的 Debian wheezy 中做的。并得到这个错误:
dpkg --configure -a
dpkg: failed to write status record about `libcairo2' to `/var/lib/dpkg/status': No space left on device
Run Code Online (Sandbox Code Playgroud)
我被 chroot 到一个.img文件中。我能做什么?
我在一些 500GB 硬盘上的单个 ext4 根分区†中安装了一些普通的 x86_64 桌面 Linux 。
现在,如果我想将此安装迁移到 500GB SSD(系统的其余部分保持不变),我是否只需克隆磁盘并运行genfstab(我从 Arch 安装指南中知道,我什至需要那个?)并完成?
或者还有更多吗?
†也就是说,所有内容都在该单个分区中。我没有交换分区,但有交换文件,如果它应该是一个问题,我的系统也可以很容易地做到这一点。
我经常处理全盘映像,我经常需要使用 USB-3 磁盘作为临时介质在不太强大的笔记本电脑上读写全盘映像。
复制原始图像可能是最快的方法,但我必须处理有限的可用存储空间。
我需要的是高吞吐量和低 CPU 使用率 - 压缩比对我来说不是那么重要。
我想要一个工具可以非常轻松地压缩创建的图像 - 主要是编码磁盘上的空白空间,以便我只能存储有用的数据,同时使其尽可能快 - 希望几乎和原始dd复制一样快。
我绑定了 use pxz -1,因为它可以使用多个 CPU 内核来加速压缩,希望最快的压缩仍然有用。然而,这似乎没有我想要的那么胖。
压缩 500 GB 磁盘映像估计需要 21 小时:
mint Backup # dd if=/dev/sda bs=100M | pv -ptera -s500G | pxz -1 > Lenovo-Win8-sda.dd.xz
0:09:21 [9.26MiB/s] [6.54MiB/s] [> ] 0% ETA 21:34:46
Run Code Online (Sandbox Code Playgroud)
完全没有压缩预计需要 3 小时才能完成成像:
mint Backup # dd if=/dev/sda bs=100M | pv -ptera -s500G > Lenovo-Win8-sda.dd
0:00:20 [80.2MiB/s] [49.8MiB/s] [> ] 0% ETA 2:50:20
Run Code Online (Sandbox Code Playgroud)
在 15 小时时使用lbzip2 -1 …
如何检查磁盘映像的文件系统格式?
我知道我可以检查file命令,但我想自动化该行为。
$ file img.raw
img.raw: data
$ file img.ext4
img.raw: Linux rev 1.0 ext4 filesystem data, UUID=346712e7-1a56-442b-a5bb-90ba4c6cc663 (extents) (64bit) (large files) (huge files)
$ file img.vfat
img.vfat: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 16, reserved sectors 16, root entries 512, Media descriptor 0xf8, sectors/FAT 256, sectors/track 32, heads 64, sectors 1024000 (volumes > 32 MB) , serial number 0x4b5e9a12, unlabeled, FAT (16 bit)
Run Code Online (Sandbox Code Playgroud)
我想检查给定的图像磁盘是否使用给定的格式进行格式化。
例如,checkfs <image> <format>如果图像包含“格式”文件系统,则返回 0,否则返回另一个值。
我想过做类似的事情file <image> | …
我能够使用以下命令备份驱动器。
pv -EE /dev/sda > disk-image.img
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但现在我无法看到文件,除非我使用这个命令
pv disk-image.img > /dev/sda
Run Code Online (Sandbox Code Playgroud)
当然,这将数据写回磁盘,这不是我想要做的。我的问题是我能做些什么来挂载.img文件本身而不是仅仅写回磁盘?
我试过使用循环挂载,但它似乎抱怨无效的 NTFS。
$ mount -o loop disk-image.img
mount: disk-image.img: can't find in /etc/fstab.
$ mount -o loop disk-image.img /mnt/disk-image/
NTFS signature is missing.
Failed to mount '/dev/loop32': Invalid argument
The device '/dev/loop32' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
Run Code Online (Sandbox Code Playgroud) 我在 10G 图像文件中有一个大约 7G 的 btrfs 文件系统img.btrfs(我使用 缩小了它btrfs fi resize -3G /mnt)。如何找到文件系统的总大小(结束字节偏移量),以便缩小图像大小?即找出$SIZE了
truncate -s $SIZE img.btrfs
Run Code Online (Sandbox Code Playgroud)
适用于图像文件内的任何其他文件系统的机制将是一个加分项。
注意:有一点做的工作是:
INITIAL=$(stat -c %s img.btrfs)
mount img.btrfs /mnt
btrfs fi resize -$NBYTES /mnt
umount /mnt
truncate -s $((INITIAL - NBYTES + 1024*1024)) img.btrfs
mount /img.btrfs /mnt
btrfs fi resize max /mnt
Run Code Online (Sandbox Code Playgroud)
即缩小 btrfs,将图像缩小一点(留下 1M 的开销),然后将 btrfs 增大到缩小图像所提供的最大值。
我刚买了一台带有 500GB SSD 的新笔记本电脑。我想做的第一件事是克隆硬盘驱动器,因为我想拥有整个系统的原始副本。
为了做到这一点,我用 Clonezilla 闪存了一个 USB 闪存盘,并尝试使用 device-imageoption 和beginner mode.
我希望有一个与源 SSD 大小相同的图像(类似于 .img.zp 文件),但是我最终得到了一个文件夹,里面有几个文件,只需要 14GB 的空间,只花了 10 分钟。整个过程。
这是正常的还是我在此过程中搞砸了什么?
disk-image ×10
linux ×4
filesystems ×2
backup ×1
block-device ×1
btrfs ×1
clonezilla ×1
compression ×1
fdisk ×1
gdisk ×1
gpt ×1
hard-disk ×1
loop-device ×1
mount ×1
pv ×1
ssh ×1