我有 PC 的 mSATA SSD 磁盘的映像。该磁盘包含操作系统,容量为512GB。
我没有那个可用存储空间,所以我将磁盘克隆到一个图像中,并用dd
压缩它gz
,然后根据 的答案这个帖子,我把稀疏的内容复制了,这样占用的空间就少了。
此操作正确,导致 512GB 的映像在磁盘上占用的空间少于 5GB。
作为已完成工作的总结:
# dd bs=64K if=/dev/sdd conv=sync,noerror status=progress | gzip -c > /image.img.gz
# gunzip -c /image.img.gz | cp --sparse=always /dev/stdin mini.img
# ls -lhs
4,8G -rw------- 1 balon users 477G ene 13 10:54 mini.img
2,3G -rw-r--r-- 1 balon users 2,3G ene 11 08:32 minimal-industrial-pc.img.gz
到目前为止,一切都是正确的。当我打算挂载映像时,问题就出现了(因为我想将自己关在其中并对文件系统进行一些更改)。
我已经尝试过以下方法:
fdisk
# fdisk -l mini.img
The size mismatch of the primary master boot record (GPT PMBR) (1000215215!= 1000215295) will be corrected by writing.
The backup GPT table is not at the end of the device.
Disk mini.img: 476,94 GiB, 512110231552 bytes, 1000215296 sectors
Units: sectores de 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disc label type: gpt
Disk identifier: 74BC899D-E8BA-4C70-B82D-6F4E8F6343A3
Device Start End Sectors Size Type
mini.img1 2048 2203647 2201600 1G EFI System
mini.img2 2203648 6397951 4194304 2G Linux file system
mini.img3 6397952 1000212479 993814528 473.9G Linux file system
kpartx
# kpartx -a -v mini.img
GPT:Primary header thinks Alt. header is not at the end of the disk.
GPT:Alternate GPT header not at the end of the disk.
GPT: Use GNU Parted to correct GPT errors.
add map loop1p1 (254:4): 0 2201600 linear 7:1 2048
add map loop1p2 (254:5): 0 4194304 linear 7:1 2203648
add map loop1p3 (254:6): 0 993814528 linear 7:1 6397952
这种情况下挂载似乎没有问题,loop1p1
但是loop1p2
对于我理解对应Ubuntu根系统的`loop1p3,就没办法了。
gdisk
# gdisk -l mini.img
GPT fdisk (gdisk) version 1.0.9.1
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk mini.img: 1000215296 sectors, 476.9 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): 74BC899D-E8BA-4C70-B82D-6F4E8F6343A3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1000215182
Partitions will be aligned on 2048-sector boundaries
Total free space is 4717 sectors (2.3 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 2203647 1.0 GiB EF00
2 2203648 6397951 2.0 GiB 8300
3 6397952 1000212479 473.9 GiB 8300
我究竟做错了什么?
答案1
由于您在 上使用的标志,您的图像可能已损坏dd
。如果您可以重复该过程,请不要使用dd
.反而,
gzip </dev/sdd >/.../sdd.img.gz
zcat /.../sdd.img.gz | cp --sparse=always /dev/stdin mini.img
进一步加强这一点,如果您实际上不需要压缩图像,只需直接从磁盘制作稀疏副本:
cp --sparse=always /dev/sdd mini.img
如果磁盘/dev/sdd
在复制时正在使用,则副本可能会失败完整性检查 - 最坏的情况是您看不到它们。