从ext4分区映像创建可启动磁盘

多血症

我的目标是在不重新启动系统的情况下创建系统的可引导备份,我将使用qemu-img将原始dd映像转换为vhdx并在Hyper-V中运行它。

如果我启动到liveCD并运行:

dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc

我可以将其转换为vhdx并直接在Hyper-V中运行,而无需付出太多努力。

fdisk -l输出:

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
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: gpt
Disk identifier: 7555D04B-D6DC-4ABB-8863-529E874BADAD

Device       Start       End   Sectors   Size Type
/dev/sda1     2048   2000895   1998848   976M EFI System
/dev/sda2  2000896 500117503 498116608 237.5G Linux filesystem

但是,当系统在线时,您不能使用该命令,因此我正在使用dattobd驱动程序来复制我的整个ext4文件系统,如下所示:

dd if=/dev/datto0 of=/nfs/sda2.raw bs=1M

这有效/dev/sda2地正确复制了所有数据,我已经验证了这一点,因为如果我在哪里使用liveCD和dd/dev/sda2分区,则哈希值是相同的现在,我可以启动到liveCD并进行复制/dev/sda1,这是EFI分区,因此除非我更新grub或与Linux内核相关的内容,否则它不会经常更改,我可以重新启动以偶尔备份该分区就可以了,但是如果有人知道可以在网上进行的操作,请告诉我。

现在我有/dev/sda1/dev/sda2在两个单独的文件,我的问题是我怎么能组装这些两成一个单一的文件,该文件将基本上给出相同的输出中作为运行dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc在一个LiveCD?您是否只需要完全对齐字节?我到处都在寻找这个,没有运气。很感谢任何形式的帮助!

电信

您可以在分区支持下循环挂载整个磁盘映像,然后dd将更新的sda2映像放入其中:

losetup -P /dev/loop0 /nfs/sda.raw  #this will create /dev/loop0p1 and loop0p2
dd if=/nfs/sda2.raw of=/dev/loop0p2
losetup -d /dev/loop0

或者,您的分区表指示您的第一个分区从扇区#2048开始,因此您的磁盘在第一个分区(“磁头”)之前具有2048 * 512字节= 1 MiB空间,而500118192-500117503-1 = 688扇区(344)任意空间的末尾(“ tail”)的空间(kiB)。(-1因为第一个扇区是#0,而不是#1)

第一个分区在扇区#2000895处结束,第二个分区在#2000896处开始,因此它们之间没有未使用的空间。

您正在使用GPT分区表,该表在磁盘末尾包含分区表的备份副本,因此也需要捕获“ tail”部分。它从扇区#500117504开始,一直到磁盘结尾。

因此,您可以分别捕获“头部”和“尾部”部分的内容,然后将它们放在一起:

dd if=/dev/sda of=/nfs/head.raw bs=512 count=2048
dd if=/dev/sda of=/nfs/tail.raw bs=512 skip=500117504
cat /nfs/head.raw /nfs/sda1.raw /nfs/sda2.raw /nfs/tail.raw > /nfs/sda.raw

除非您修改分区表,否则只需捕获一次“ head”和“ tail”部分:在系统正常使用期间不应更改它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章