ank*_*540 4 partition dd restore
我使用dd
工具作为backup.img
文件对我的硬盘(包括所有分区)进行了定期完整备份。我有几个这样的文件。
现在我的旧硬盘坏了,我如何使用backup.img
文件在新硬盘上写入,以便我的所有分区和文件都像图像一样完好无损。
还可以从此类文件中提取部分数据(少数文件/文件夹)backup.img
吗?
您可以使用以下内容将映像还原回替换硬盘:
# dd if=backup.img of=/dev/sd?
Run Code Online (Sandbox Code Playgroud)
您最终将获得原始磁盘的克隆,包括所有分区和数据。
这样做的缺点是分区不会被调整大小,dd
因此您的替换磁盘的容量必须与原始磁盘相同或更大。
如果您对此感到满意,您可以使用包含gparted
或类似(例如 Parted Magic)的可启动映像并调整分区大小以适应新磁盘。
要安装图像,您需要使用losetup
.
执行此操作的较旧方法是计算到分区开头的偏移量,如下所示:
运行fdisk
并查找扇区大小:
# fdisk -l backup.img
Disk backup.img: 8 GiB, 8589934592 bytes, 16777216 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: dos
Disk identifier: 0x91999386
Device Boot Start End Sectors Size Id Type
backup.img1 * 2048 1026047 1024000 500M 83 Linux
backup.img2 1026048 16777215 15751168 7.5G 8e Linux LVM
Run Code Online (Sandbox Code Playgroud)
要计算您的偏移量,请阅读您感兴趣的分区的Start列,然后将该值乘以您的扇区大小。例如,要阅读backup.img1
上述内容,请乘以 2048 x 512 = 1048576。
使用此值作为偏移量,losetup
如下所示:
# losetup -o 1048576 /dev/loop0 backup.img
Run Code Online (Sandbox Code Playgroud)
然后挂载环回设备:
# mount -t ext4 /dev/loop0 /mnt
Run Code Online (Sandbox Code Playgroud)
较新版本的losetup
将扫描并自动/dev/loop
为映像中的所有分区创建条目,如下所示:
# losetup -Pf backup.img
# ls /dev/loop0*
/dev/loop0 /dev/loop0p1 /dev/loop0p2
# mount -t ext4 /dev/loop0p1 /mnt
Run Code Online (Sandbox Code Playgroud)
我上面的示例将第二个分区显示为 LVM。要从这些文件中提取文件,只需让 LVM 在环回设备上执行它的魔术即可。初次扫描:
# pvs
PV VG Fmt Attr PSize PFree
/dev/loop0p2 fedora-server lvm2 a-- 7.51g 40.00m
Run Code Online (Sandbox Code Playgroud)
然后激活 VG(注意上面命令中的 VG 名称,你的可能与我的不同):
# vgchange -a y fedora-server
2 logical volume(s) in volume group "fedora-server" now active
Run Code Online (Sandbox Code Playgroud)
检查您有哪些分区:
# ls /dev/fedora-server/
root swap
Run Code Online (Sandbox Code Playgroud)
并安装其中之一:
# mount -t ext4 /dev/fedora-server/root /mnt
Run Code Online (Sandbox Code Playgroud)
提取文件后:
# umount /mnt
# losetup -d /dev/loop0
Run Code Online (Sandbox Code Playgroud)
或者对于 LVM 安装:
# umount /mnt
# vgchange -a n fedora-server
0 logical volume(s) in volume group "fedora-server" now active
# losetup -d /dev/loop0
Run Code Online (Sandbox Code Playgroud)