为OpenBSD 新增硬盘并扩展原有系统硬盘容量

2022-10-20 14:09:45 浏览数 (1)

作者:柳尉 本文链接

笔者在VMware ESXi中有一台OpenBSD虚拟机,因为安装时只跑路由,所以硬盘很小,当时只给了8G容量,经过多次升级,目前版本为6.9 。最近需要安装python开发包发现/usr分区都不够用了。

代码语言:yaml复制
openbsd# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd0a      989M    103M    837M    11%    /
/dev/sd0g      1.9G    1.0G    809M    56%    /home
/dev/sd0d      497M   14.0K    473M     0%    /tmp
/dev/sd0f      1.9G    1.6G    281M    85%    /usr
/dev/sd0e      1.9G   51.9M    1.8G     3%    /var

准备执行二项工作:

1,在原系统中增加一块64G的硬盘,全部容量用于创建一个新分区并挂载到/data,把/hom下的所有文件备份到/data目录下;

2,在VMware ESXi中把原来的系统盘由8G扩展为32G,把之前的sd0g(原/home )挂载到 /usr/local ,把新加的容量创建新分区sd0h 并挂载到 /home 。

准备工作:

首先在VMWare ESXi中增加一块64G硬盘以及把原有系统硬盘容量扩展到32G,这一步在VMware vSphere Client或VMware Workstationk都要以操作,操作前可以把虚拟关机并创建一个快照,以防万一。

对新增加的硬盘进行分区:

用root身份进入OpenBSD系统

代码语言:yaml复制
openbsd#dmesg | grep sd

可以知道新加的硬盘为sd1

对新加硬盘分区表进行初始化:

代码语言:yaml复制
openbsd# fdisk -i sd1

对新硬盘进行分区:

代码语言:yaml复制
openbsd# disklabel -E sd1
Label editor (enter '?' for help at any prompt)
sd1> a a  (新增一个分区,命名为a)

之后一路回车就行,结束按quit退出。

对新建分区进行格式化:

代码语言:yaml复制
openbsd# newfs /dev/sd1a 

挂载分区:

代码语言:yaml复制
openbsd# disklabel sd1   
# /dev/rsd1c:
type: SCSI
disk: SCSI disk
label: Virtual disk    
duid: 32c655cb045cffb0
flags:
......

在上面查找duid值: 32c655cb045cffb0,在fstab文件中需要引到 。

在/etc/fstab中增加/data项:

代码语言:yaml复制
openbsd# cat /etc/fstab 
549cc96b1058cc0a.b none swap sw
549cc96b1058cc0a.a / ffs rw 1 1
549cc96b1058cc0a.g /home ffs rw,nodev,nosuid 1 2
549cc96b1058cc0a.d /tmp ffs rw,nodev,nosuid 1 2
549cc96b1058cc0a.f /usr ffs rw,wxallowed,nodev 1 2
549cc96b1058cc0a.e /var ffs rw,nodev,nosuid 1 2
32c655cb045cffb0.a /data ffs rw,nodev,nosuid 1 2

手工挂载:

代码语言:yaml复制
openbsd#mount /data
openbsd# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd0a      989M    103M    837M    11%    /
/dev/sd0g      1.9G    1.0G    809M    56%    /home
/dev/sd0d      497M   14.0K    473M     0%    /tmp
/dev/sd0f      1.9G    1.6G    281M    85%    /usr
/dev/sd0e      1.9G   51.9M    1.8G     3%    /var
/dev/sd1a     62.0G    2.0K   58.9G     0%    /data

到此新硬盘就算添加完成了。

接下来备份数据:

代码语言:yaml复制
openbsd# mv /home/* /data/

对原来的系统盘sd0进行操作

虽然我们把sd0的容量已经加到32G了,但给OpenBSD分区的容量并没有改变,所以第一步要对sd0的分区表进行修改:

代码语言:yaml复制
openbsd# fdisk -e sd0
sd0: 1> p m 回车 (看到OpenBSD位于3号分区,容量为8192M)
......
sd0: 1> e 3 回车 (进入编辑状态)
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*3: A6      0   1   2 -   4177  85   4 [          64:    16771860 ] OpenBSD     
Partition id ('0' to disable) [01 - FF]: [A6] (? for help) 回车
Do you wish to edit in CHS mode? [n] 回车
Partition offset [0 - 67108863]: [64] 回车
Partition size [1 - 67108800]: [16771860] 67108800回车 
sd0: 1> p m 回车 (这时可以看到3号分区的容量已经增加到32768M了。)
......
sd0: 1> quit 回车

这样分区表已经修改完毕。

对sd0的openbsd分区进行修改:

代码语言:yaml复制
openbsd# disklabel -E sd0 
Label editor (enter '?' for help at any prompt)
sd0> p m 回车
OpenBSD area: 64-16771860; size: 8189.4M; free: 0.0M
#                size           offset  fstype [fsize bsize   cpg]
 a:          1027.6M               64  4.2BSD   2048 16384 12960 # /
 b:           517.7M          2104512    swap                    # none
 c:         32768.0M                0  unused                    
 d:           517.7M          3164832  4.2BSD   2048 16384  8217 # /tmp
 e:          2055.2M          4225088  4.2BSD   2048 16384 12960 # /var
 f:          2055.2M          8434112  4.2BSD   2048 16384 12960 # /usr
 g:          2016.0M         12643136  4.2BSD   2048 16384 12960 # /home
sd0> 

注意首行:OpenBSD area: 64-16771860; size: 8189.4M; free: 0.0M 告诉我们OpenBSD area 为64-16771860 ,所以容量只有8189.4M 。

代码语言:yaml复制
sd0> ? 回车 
Available commands:
 ? | h    - show help                 n [part] - set mount point
 A        - auto partition all space  p [unit] - print partitions
 a [part] - add partition             q        - quit & save changes
 b        - set OpenBSD boundaries    R [part] - resize auto allocated partition
 c [part] - change partition size     r        - display free space
 D        - reset label to default    s [path] - save label to file
 d [part] - delete partition          U        - undo all changes
 e        - edit drive parameters     u        - undo last change
 g [d|u]  - [d]isk or [u]ser geometry w        - write label to disk
 i        - modify disklabel UID      X        - toggle expert mode
 l [unit] - print disk label header   x        - exit & lose changes
 M        - disklabel(8) man page     z        - delete all partitions
 m [part] - modify partition
Suffixes can be used to indicate units other than sectors:
 'b' (bytes), 'k' (kilobytes), 'm' (megabytes), 'g' (gigabytes) 't' (terabytes)
 'c' (cylinders), '%' (% of total disk), '&' (% of free space).
Values in non-sector units are truncated to the nearest cylinder boundary.

提示:b        -set OpenBSD boundaries ,应该就是它了

代码语言:yaml复制
sd0> b 回车
Starting sector: [64] 回车
Size ('*' for entire disk): [16771796] * 回车
sd0*> p m 回车 (看到free:24578.6M了)
OpenBSD area: 64-67108864; size: 32768.0M; free: 24578.6M
#                size           offset  fstype [fsize bsize   cpg]
  a:          1027.6M               64  4.2BSD   2048 16384 12960 # /
  b:           517.7M          2104512    swap                    # none
  c:         32768.0M                0  unused                    
  d:           517.7M          3164832  4.2BSD   2048 16384  8217 # /tmp
  e:          2055.2M          4225088  4.2BSD   2048 16384 12960 # /var
  f:          2055.2M          8434112  4.2BSD   2048 16384 12960 # /usr
  g:          2016.0M         12643136  4.2BSD   2048 16384 12960 # /home
sd0*> a h 回车 (增加一个编号为h的分区)
offset: [16771840] 回车
size: [50337024] 回车
FS type: [4.2BSD] 回车
sd0*> p m 回车 (看到h:         24578.6M 了)
OpenBSD area: 64-67108864; size: 32768.0M; free: 0.0M
#                size           offset  fstype [fsize bsize   cpg]
 a:          1027.6M               64  4.2BSD   2048 16384 12960 # /
 b:           517.7M          2104512    swap                    # none
 c:         32768.0M                0  unused                    
 d:           517.7M          3164832  4.2BSD   2048 16384  8217 # /tmp
 e:          2055.2M          4225088  4.2BSD   2048 16384 12960 # /var
 f:          2055.2M          8434112  4.2BSD   2048 16384 12960 # /usr
 g:          2016.0M         12643136  4.2BSD   2048 16384 12960 # /home
 h:         24578.6M         16771840  4.2BSD   2048 16384     1 
sd0*> w 回车
sd0*> q 回车

注意这行提示: Size ('*' for entire disk):16771796 * 回车

对 sd0h 进行格式化:

代码语言:yaml复制
openbsd# newfs /dev/rsd0h 

接下来的工作就是扫尾工作

1,把/dev/sd0g  挂到 /home/local下面:

代码语言:yaml复制
openbsd# mv /usr/local/* /home/ 

2,修改fstab

代码语言:yaml复制
openbsd# cat /etc/fstab
549cc96b1058cc0a.b none swap sw
549cc96b1058cc0a.a / ffs rw 1 1
549cc96b1058cc0a.d /tmp ffs rw,nodev,nosuid 1 2
549cc96b1058cc0a.f /usr ffs rw,wxallowed,nodev 1 2
549cc96b1058cc0a.g /usr/local ffs rw,wxallowed,nodev 1 2
549cc96b1058cc0a.e /var ffs rw,nodev,nosuid 1 2
549cc96b1058cc0a.h /home ffs rw,nodev,nosuid 1 2
32c655cb045cffb0.a /data ffs rw,nodev,nosuid 1 2

注意:549cc96b1058cc0a.g 指定到/usr/local ,后面的属性为rw,wxallowed,nodev ,要与 /usr保持一致 。549cc96b1058cc0a.h

指定到 /home 。

3,重新挂载目录

代码语言:yaml复制
openbsd# umount /home
openbsd# mount /usr/local
openbsd# mount /home

4,迁回数据

代码语言:yaml复制
openbsd# mv /data/* /home/

至此,两项任务全部完成。

2021-07-28

备注: 进行服务器升迁时,最好进入单用户模式进行操作。如果只能远程接入操作,最好先把除SSH以后的服务停掉,以免影响/usr/local下程序运行,也为了防止切换/usr/local目录时出错, 另外直接以root登入操作并阻止一般用户登入,防止unmount /home时出错。

0 人点赞