我正在使用 dd 将旧硬盘上的数据一次一个分区地备份到 .img 文件中。
sudo dd if=/dev/sdc5 of=/home/flex/data/partition.img bs=1M status=progress
这给了我一个 10GB 的 .img 文件,但我知道分区上只有 3GB 的数据。
该分区为 FAT32 且包含 Windows XP 操作系统。
我循环挂载 .img 文件...它出现在 /dev/loop7
sudo losetup --find partition.img
然后在 GParted 中打开..
sudo gparted /dev/loop7
现在,当我在 Gparted 中调整分区大小时,它似乎可以正常工作并且没有出现任何错误,但我认为它实际上并没有改变任何东西。 .img 文件仍然是 10GB,此命令显示分区的大小仍然是 10GB。
sudo parted /dev/loop7 unit s print free
我以为会有未分配的分区空间,然后我可以这样做......
truncate --size=$[(End Sector+1)*512] partition.img
我究竟做错了什么?
我想我的替代方法是将整个分区 .img 打包成 TAR,然后提取到一个空白的 .img 文件,但我想知道使用 GParted 的这种方法是否可行,因为它似乎是一种调整 .img 文件大小以便于存储的便捷方法。
干杯,
柔性
答案1
我遇到的 GParted 无法调整分区大小的问题是由于我从旧硬盘中单独提取每个分区的方式,每个分区都放入单独的 .img 文件中。
sudo dd if=/dev/sdc5
...
这给了我一个partition.img
没有分区表或分区的文件,只有文件系统。
所以现在我按照以下步骤操作......
-- 创建一个空白的 .img 文件,其大小足够容纳从旧硬盘中提取的分区。例如:12GB。
sudo dd if=/dev/zero of=Win-XP-New-12G.img bs=1M count=12000
-- 循环挂载该文件并找出它所连接的循环设备lsblk
(在本例中为 /dev/loop7)
sudo losetup --find Win-XP-New-12G.img
lsblk
-- 在 12GB .img 文件中创建一个分区表,然后创建一个分区,然后将该分区格式化为 fat32(我从旧硬盘中存档的分区是 FAT32)
sudo parted -s /dev/loop7 mklabel msdos
sudo parted -s /dev/loop7 mkpart primary fat32 2048s 100%
sudo mkfs -t vfat /dev/loop7p1
-- 将旧硬盘通过 USB 连接到我的 Ubuntu 笔记本电脑后,我找到了我想要使用的分区的设备文件lsblk
-- 将硬盘分区中的数据/dev/sdc5
直接复制到 12GB .img 文件中的分区中。例如:/dev/loop7p1
下面
sudo dd if=/dev/sdc5 of=/dev/loop7p1 bs=1M status=progress
-- 现在打开指向 GParted 中的 12GB .img 文件的设备文件,重新调整分区大小,使其变小。这次 GParted 重新调整大小成功了,后来我截断了 .img 文件这里有很大的帮助。
sudo gparted /dev/loop7
我没有使用tar
或rsync
命令,因为它们在将文件复制到 Fat32 文件系统时不会保留访问记录或创建时间戳。