FreeBSD13 扩容根目录

2026-5-22 7 5/22

服务器环境

服务器环境
root@test:~ # df -h
Filesystem      Size    Used   Avail Capacity  Mounted on
/dev/ada0s1a     48G    3.4G     41G     8%    /
devfs           1.0K    1.0K      0B   100%    /dev
/dev/ada0s1d    810G     32M    745G     0%    /home
需求将home目录 810G扩容到根目录

具体步骤如下:

步骤1:确认当前环境

# 查看分区布局
gpart show ada0
bsdlabel /dev/ada0s1

# 确认 /home 确实无重要数据
ls -la /home
df -h

步骤2:查看当前内存状态

top -b | head -5

步骤3:关闭swap

swapoff /dev/ada0s1b

步骤4:卸载/home

umount /home

没报错不用看下面
--------------------------
如果提示 busy:
fuser -m /home
lsof +D /home

步骤5:备份/etc/fstab

cp /etc/fstab /etc/fstab.bak

步骤6:修改/etc/fstab,删除 swap 和 home行

sed -i '' '/ada0s1b/d' /etc/fstab
sed -i '' '/ada0s1d/d' /etc/fstab

步骤7:验证fstab修改结果

cat /etc/fstab

步骤8:创建新分区标签文件(这里需要修改为自己的)

printf '%s\n' '# /dev/ada0s1:' '8 partitions:' '#        size           offset  fstype [fsize bsize bps/cpg]' '  a: 1858076672             0  4.2BSD     2048 16384 64008' '  b:   16777216    1858076672    swap' '  c: 1874853888             0  unused' > /tmp/newlabel
关于这行命令的解释
printf '%s\n' \
  '# /dev/ada0s1:' \
  '8 partitions:' \
  '#        size           offset  fstype [fsize bsize bps/cpg]' \
  '  a: 1858076672             0  4.2BSD     2048 16384 64008' \
  '  b:   16777216    1858076672    swap' \
  '  c: 1874853888             0  unused' \
  > /tmp/newlabel
  
 ---------------------------
  printf '%s\n' ... > /tmp/newlabel:将多行内容逐行写入 /tmp/newlabel 文件
  # /dev/ada0s1:  注释指明对应设备
  '8 partitions:  声明共有8个分区槽位(实际只用前面几个
  # size offset fstype [fsize bsize bps/cpg]  列标题注释
  a: 1858076672 0 4.2BSD 2048 16384 64008     新的根分区:- 大小 = 1858076672 扇区(约 887 GB,扇区=512B)
                                                         - 偏移 = 0(从 slice 起始开始)
                                                         - 类型 = 4.2BSD(UFS 文件系统)
                                                         - 后面是文件系统参数(碎片大小、块大小、柱面密度),保持默认
  b: 16777216 1858076672 swap                      新的 swap 分区:
                                                        - 大小 = 16777216 扇区(8 GB)
                                                        - 偏移 = 1858076672(紧跟在 a 分区之后)
                                                        - 类型 = swap        
  c: 1874853888 0 unused                          传统 c 分区:代表整个 slice(大小为 1874853888 扇区,即 894 GB)
                                                  偏移 0,
                                                  类型 unused,不应被修改     


如果需要修改,修改这个上面的三处
1.a行中的 1858076672 新的值为总盘区数-swap数值
2.b行中的1858076672 同上
3.c行中的 1874853888 新硬盘slice的总扇区数
                                                                                                                                    
查看 MBR slice 的大小
gpart show ada0

步骤9:验证新标签文件内容

cat /tmp/newlabel

步骤10:应用新分区标签

bsdlabel -R /dev/ada0s1 /tmp/newlabel

这里会出现报错如下:

root@test:~ # bsdlabel -R /dev/ada0s1 /tmp/newlabel
bsdlabel: cannot open provider /dev/adaes1 for writing label: Operation not permitted

这是因为  label 无法直接写入。需要用 gpart 命令来修改。先查看当前 gpart 布局:

gpart show ada0s1
gpart删除d、b分区
#删除d分区(home
gpart delete -i 4 /dev/ada0s1

##删除b分区(swap
gpart delete -i 2 /dev/ada0s1

步骤11:扩容根分区(这里数值根据实际硬盘大小来填)

gpart resize -i 1 -s 886G /dev/ada0s1

步骤12:重建swap分区

gpart add -t freebsd-swap -s 8G /dev/ada0s1

步骤13:验证新分区布局

gpart show ada0s1

步骤14:扩展根分区文件系统

growfs -y /dev/ada0s1a

到这一步基本就扩容完成,下面再启用swap,新建home目录就行

步骤15:启用swap

swapon /dev/ada0s1b

步骤16:创建空的 /home 目录

mkdir -p /home
chmod 755 /home

步骤17:验证

df -h
swapinfo
gpart show ada0s1

步骤18:添加 swap 到 fstab

printf '%s\t%s\t%s\t%s\t%s\t%s\n' '/dev/ada0s1b' 'none' 'swap' 'sw' '0' '0' >> /etc/fstab
执行后验证
cat /etc/fstab

步骤19:重启查看是否正常

reboot

具体文档

本文隐藏内容 登陆 后才可以浏览

 

 

 

- THE END -

delu

5月27日13:49

最后修改:2026年5月27日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论