我有一台运行 FreeBSD 9.1 的 KVM 虚拟机,具有典型的单分区布局,其中有交换分区、/、/tmp、/var、/usr。现在我需要将该虚拟服务器以及其他服务器升级到更大的硬盘。
我不想重新安装整个系统和所有服务器应用程序,所以我宁愿增加现有系统的切片大小。
我在网上看到,使用 fdisk、disklabel 和 growfs 可以很容易地增加分区中最后一个切片(通常是 /usr)的大小。但是,我还需要增加 /var 切片的大小。
root@chaos ~ % bsdlabel /dev/vtbd0s1
# /dev/vtbd0s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1048576 0 4.2BSD 0 0 0
b: 980816 1048576 swap
c: 31456593 0 unused 0 0 # "raw" part, don't edit
d: 2586624 2029392 4.2BSD 0 0 0
e: 1048576 4616016 4.2BSD 0 0 0
f: 25792001 5664592 4.2BSD 0 0 0
root@chaos ~ % gpart show -l vtbd0
=> 63 31457217 vtbd0 MBR (15G)
63 31456593 1 (null) [active] (15G)
31456656 624 - free - (312k)
root@chaos ~ % df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/vtbd0s1a 495M 215M 240M 47% /
devfs 1.0k 1.0k 0B 100% /dev
/dev/vtbd0s1e 495M 12k 456M 0% /tmp
/dev/vtbd0s1f 11G 2.5G 8.5G 23% /usr
/dev/vtbd0s1d 1.2G 562M 562M 50% /var
有没有“最佳实践”方法可以做到这一点?
或者除了最后一个切片之外,其他所有切片都不适用?
PS:该系统使用UFS文件系统
PPS:通过端口的virtio驱动程序进行磁盘I/O
答案1
夫妻想法:
没有办法将 BSD Slice 扩展到磁盘上的两个物理位置(磁盘上的新空间仅在末尾,不在末尾的切片无法扩展到该新空间)。我不知道有什么工具可以移动切片,但如果没有,我会感到惊讶。
你不需要需要var 位于单独的分区上。笨重的旧安装程序始终会为您提供传统的分区布局,这与安装程序一样过时。正是出于这些原因,我很少像安装程序那样将文件系统划分为难以管理的小块。
实际上,您只需删除 /var 行
/etc/fstab
,系统就会在下次重新启动时在根分区上重新创建 var 层次结构。不过,您的根分区可能也很小,这也是安装程序的默认设置。这应该只需工作™/var
,但是我见过应用软件在文件被丢弃时大发雷霆。如果当前 var 切片很小,那么可能更简单的方法是丢弃整个切片并在新的可用空间中创建一个新切片。应该有很多说明,但如果您需要更多详细信息,请发帖,我可以填补空白。
如果您的磁盘布局确实被破坏了,通常更容易的是降级为单模式,创建一个包含整个混乱的 tar 文件,删除并重新创建分区/标签(使用启动 CD 或类似工具),然后从 tar 文件恢复。我遇到过几次这种情况。在虚拟机上甚至更容易,因为您通常可以安装一个全新的 vmdk/vhd/whatever、分区/切片/布局、降级为单模式,并使用双 tar 管道复制系统,而无需破坏现有驱动器(如果您哎呀过程)。
更新- 您有一个与 var 切片相邻的 /tmp 切片,基本上未使用。您可以卸载、删除文件夹
/tmp
、将其符号链接到 var (ln -s /var/tmp /tmp
),删除 tmp 和 var 切片,在该空间中创建一个新的 var 切片,重新安装,一切就绪。