我有一个在 1TB HD 上安装 FreeBSD 的 img(用 dd 制作)。
这次我需要使用较小的磁盘(500GB),当然,如果我尝试仅恢复相同的映像,它将无法工作,但即使我尝试手动调整分区表和 MBR,我的系统也无法启动。
我做了什么:
后DDing,我直接去了软盘为了调整MBR结束扇区,然后我使用分手了将分区缩小到正确的边界。
根据我的计算,考虑到分区从扇区 2048 开始,对于 500GB 磁盘,将结束扇区设置为 976771120(总共 976773168)是正确的。
那么新的分区就是2048 -> 976771120,新的MBR也使用这个逻辑。事实上,我可以到达 FreeBSD 启动管理器第一阶段,但随后我陷入了启动提示符(错误 66)。也许我不知道接下来的引导加载程序阶段是如何工作的,可能修复分区方案和 MBR 来使 FreeBSD 引导还不够吗?可能有一些提前读取的conf文件也需要修复?不是我的主要操作系统,所以我正在尝试/错误过程中。谢谢
编辑:添加输出,抱歉图片,但我唯一的选择。不记得真实数据真的很少(<2GB)。
第一个磁盘,500GB 方案(不工作)。第二个磁盘,1TB原始方案(工作)。
答案1
首先,您需要一个备份副本,以防出现问题。无论您使用的文件系统是什么,您都需要工具。
首先,您需要一个程序,它可以逻辑地缩小您使用的文件系统中的分区。我之前用 ntfs 和 ext3 做过几次这样的事情,但每个文件系统的想法都是一样的。
我假设您的映像是分区 ( sda1.img
) 的映像,如果它是整个磁盘 ( sda.img
),则仅“提取”分区或将(整个映像)它放在物理磁盘 (1TB+) 上并对其进行处理。稍后您将把您的工作复制到新的 500GB 磁盘上。原因是您的调整大小程序可能不支持偏移分区,整个磁盘的映像就是这种情况。
your old disk (sda):
+--------+----------------+---...
| mbr... | sda1 (system) | sda2...
+--------+----------------+---...
1.使用ntfsresize
//缩小分区文件系统((在物理磁盘上)/ (在映像中))。这将调整(分区)映像中文件系统的大小tune2fs
whatever-fs-resizer
/dev/sda1
sda1.img
2. 在新的 (500GB) 磁盘 ( ) 上创建新的分区表,/dev/sdb
该分区表可以适合调整大小的系统分区以及一些额外的兆字节,以便文件系统适合新分区 ( /dev/sdb1
)。用fdisk/cfdisk/(g)parted/whatever-you-like
那个。记得设为/dev/sdb1
可启动。
从技术上讲,人们可以准确计算出您需要多少,但不用担心 - 您的调整器应该能够调整文件系统的大小(在/dev/sdb1
)以填充整个分区(稍后再说)。
3. 将调整后的大小复制sda1.img
到新目的地/dev/sdb1
(使用dd
或cat
什至$ cat sda1.img > /dev/sdb1
:)
4. 格式化其他分区/dev/sdb2|3|4...
以满足您的需要。
5. 享受你的工作。
答案2
我会用老式的方式解决它。
newfs /dev/ada1s1
mount /dev/ada1s1 /mnt
cd /mnt
dump -0a -f - /dev/ada0s1 | restore -rf -
gpart bootcode -b /boot/mbr -p /boot/boot1 ada1
这将创建一个新的文件系统,安装它并进入目标目录,因为恢复需要在那里进行。它使用经典备份工具(对于 UFS 来说永远不会失败)复制整个文件系统。最后一个命令写入引导代码。
免责声明:请务必验证命令,因为如果某些参数错误,后果当然是毁灭性的!!您需要了解这里正在做什么。
答案3
这对我来说似乎有点受虐狂。
就我个人而言,我会做一个dd
备份。然后我会缩小它并确保它在尝试移动它之前工作(收缩->重新启动->检查->最终 dd)。
我假设您的数据少于 500 GB。但您不知道它在磁盘上的结构如何。
那么你曾经使用过sfdisk
并parted
修改过分区吗?但是你做了什么来保护文件系统呢?对分区的简单更改不会对文件系统中的数据进行重新排序,也不会管理被截断的文件系统的布局。
所以你缺少的是处理你的文件系统。在 FreeBSD 上,您通常会使用 UFS 或 ZFS。对于 UFS 你应该看看成长(8)(看在 FreeBSD 上调整 UFS /root 分区的大小)。如果您使用 ZFS,一切都是完全不同的,因为它是卷管理器和文件系统的组合!
因此,为了能够回答您的直接问题,我们需要大量附加信息。然而,关于如何获取数据的隐含问题要容易得多。在新磁盘上设置裸露且可引导的 FreeBSD 安装。然后复制数据。
挂载图像
当您拥有磁盘的 dd 映像后,您可以安装它。要么在不同的系统上执行此操作,要么使用便携式 USB 磁盘/网络驱动器。
/dev/ada0
因此,如果您拥有as的完整原始副本ada0.dd
- 那么您可以将该映像用作虚拟内存磁盘:
# mdconfig -a -t vnode -u 0 -f /home/realpclaudio/ada0.dd
这将为我们提供/dev/md0
您的完整磁盘。
然后你可以检查一切看起来都很好。
# fdisk /dev/md0
这应该看起来与您的旧磁盘完全相同。然后我们可以开始查看数据,但这取决于您的文件系统。
超高速文件系统
我们将UFS文件系统挂载到磁盘上。
# mount -t ufs -o ro /dev/md0s1a /mnt
这很可能是第一个片的根文件系统。如果您还有更多切片,也可以安装它们。
# mount -t ufs -o ro /dev/md0s1e /mnt/var
# mount -t ufs -o ro /dev/md0s1g /mnt/home
ZFS
如果您使用 ZFS,则可以使用 ZFS 工具管理磁盘(请参阅zpool管理。
# zpool import -o altroot=/mnt mypool
# zfs list