运行 FreeBSD 的服务器自 2004 年左右开始投入生产。最近发生断电,重新启动后显示错误消息“...文件系统已满”。
当时它位于 40 GB 驱动器上,后来拿了一个 1 TB 来替换它。使用 dd 复制驱动器,然后尝试 Gparted,但它似乎无法识别文件系统。
问题 - 克隆旧驱动器并调整分区大小以使用新驱动器的全部空间的最简单方法是什么?
答案1
您需要使用gpart
(而不是 gparted)创建分区,然后使用newfs
.然后使用dump | restore
或rsync
将数据复制到新磁盘。最后,用于gpart
确保驱动器上有引导代码。有关更多详细信息,请参阅这些命令的手册页。
但需要注意的是,考虑到这个问题,我猜操作系统自 2004 年以来就没有更新过,并且不再受支持,也没有获得安全更新。所以实际上,您最好在新磁盘上安装新系统,然后使用dump | restore
或rsync
或cp
手动将相关数据复制到新磁盘。我不建议将 2004 年的操作系统重新投入生产。
答案2
我只是这样做了,尽管磁盘大小相同,但/文件系统稍小。我很确定该过程适用于更大的磁盘。
# newdisk=ada1
# echo $newdisk
ada1
# gpart create -s GPT $newdisk
# gpart add -t freebsd-boot -i 1 -a 4K -s 512K -l gptboot ${newdisk}
ada1p1 added
# gpart bootcode -p /boot/gptboot -i 1 ${newdisk}
partcode written to ada1p1
# gpart add -t freebsd-ufs -a 4K -s 70G -i 2 -l fbsdroot $newdisk
ada1p2 added
# gpart add -t freebsd-swap -a 4K -i 3 -l fbsdswap $newdisk
ada1p3 added
# gpart show
=> 34 156249933 ada0 GPT (75G)
34 1024 1 freebsd-boot (512K)
1058 148896768 2 freebsd-ufs (71G)
148897826 7352140 3 freebsd-swap (3.5G)
156249966 1 - free - (512B)
=> 40 156301408 ada1 GPT (75G)
40 1024 1 freebsd-boot (512K)
1064 156300384 2 freebsd-ufs (75G)
=> 40 156301408 diskid/DISK-5JVD21RN GPT (75G)
40 1024 1 freebsd-boot (512K)
1064 146800640 2 freebsd-ufs (70G)
146801704 9499744 3 freebsd-swap (4.5G)
# newfs -U /dev/ada1p2
...
# mkdir /mnt/newsys
Reboot system into single-user mode; it should come up read-only
# mount /dev/ada1p2 /mnt/newsys
# cd /mnt/newsys
dump -0 -f - /dev/ada0p2 | restore -r -Dv -f -
我原来的系统盘有不可恢复的坏块;新系统很干净。我很幸运,因为坏块位于 /var/db/freebsd-update/files/ 中未使用的文件中,并且不再需要整个目录(从 6 个月前的系统更新备份)。